Класс NamespaceSupport
public class NamespaceSupport extends Object
Этот класс инкапсулирует логику обработки пространств имён: он отслеживает объявления, действующие в данный момент для каждого контекста, и автоматически преобразует квалифицированные имена XML в их части пространства имён; он также может использоваться в обратном порядке для генерации имен XML qname из пространств имён.
Объекты поддержки пространств имён являются многократно используемыми, но метод reset должен вызываться между каждой сессией.
Вот простая сессия:
String parts[] = new String[3];
NamespaceSupport support = new NamespaceSupport();
support.pushContext();
support.declarePrefix("", "http://www.w3.org/1999/xhtml");
support.declarePrefix("dc", "http://www.purl.org/dc#");
parts = support.processName("p", parts, false);
System.out.println("Namespace URI: " + parts[0]);
System.out.println("Local name: " + parts[1]);
System.out.println("Raw name: " + parts[2]);
parts = support.processName("dc:title", parts, false);
System.out.println("Namespace URI: " + parts[0]);
System.out.println("Local name: " + parts[1]);
System.out.println("Raw name: " + parts[2]);
support.popContext();
Обратите внимание, что этот класс оптимизирован для случаев, когда большинство элементов не содержат объявления пространств имён: если одна и та же пара префикс/URI повторяется для каждого контекста (например), этот класс будет несколько менее эффективен.
Хотя драйверы SAX (парсеры) могут выбрать использование этого класса для реализации обработки пространств имён, это не обязательно. Приложения должны самостоятельно отслеживать информацию о пространствах имён, если они хотят использовать информацию о пространствах имён.
- Since:
- 1.4, SAX 2.0
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final String |
NSDECL |
URI объявления пространства имён в качестве константы. |
static final String |
XMLNS |
URI пространства имён XML в качестве константы. |
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
NamespaceSupport() |
Создает новый объект поддержки пространств имён. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
declarePrefix |
Объявляет префикс пространства имён. |
Enumeration |
getDeclaredPrefixes() |
Возвращает перечисление всех префиксов, объявленных в данном контексте. |
String |
getPrefix |
Возвращает один из префиксов, сопоставленных с URI пространства имён. |
Enumeration |
getPrefixes() |
Возвращает перечисление всех префиксов, объявления которых активны в текущем контексте. |
Enumeration |
getPrefixes |
Возвращает перечисление всех префиксов для данного URI, объявления которых активны в текущем контексте. |
String |
getURI |
Ищет префикс и получает сопоставленный в настоящее время URI пространства имён. |
boolean |
isNamespaceDeclUris() |
Возвращает true, если атрибуты объявления пространства имён помещаются в пространство имён. |
void |
popContext() |
Возвращается к предыдущему контексту пространства имён. |
String[] |
processName |
Обрабатывает сырое квалифицированное имя XML после того, как все объявления в текущем контексте были обработаны методом declarePrefix(). |
void |
pushContext() |
Начинает новый контекст пространства имён. |
void |
reset() |
Сбрасывает этот объект поддержки пространств имён для повторного использования. |
void |
setNamespaceDeclUris |
Управляет тем, помещаются ли атрибуты объявления пространства имён в пространство имён NSDECL методом processName(). |
Подробное описание полей
XMLNS
public static final String XMLNS
http://www.w3.org/XML/1998/namespace согласно рекомендации "Пространства имён в XML". Это URI пространства имён, который автоматически сопоставляется с префиксом "xml".
- См. также:
NSDECL
public static final String NSDECL
http://www.w3.org/xmlns/2000/, как определено в несовместимой с предыдущими версиями поправке к рекомендации "Пространства имён в XML". Поскольку эта поправка была создана после SAX2, SAX2 по умолчанию использует первоначальную рекомендацию и обычно не использует этот URI. Это URI пространства имён, который необязательно применяется к атрибутам xmlns и xmlns:*, используемым для объявления пространств имён.
- С версии:
- 1.5, SAX 2.1alpha
- См. также:
Подробное описание конструкторов
NamespaceSupport
public NamespaceSupport()
Подробное описание методов
reset
public void reset()
Необходимо вызвать этот метод перед повторным использованием объекта поддержки пространств имён для новой сессии. Если поддержка пространств имён объявления URI требуется, необходимо также установить этот флаг в значение, отличное от значения по умолчанию.
- См. также:
pushContext
public void pushContext()
Код обратного вызова события должен запускать новый контекст один раз на каждый элемент. Это означает, что нужно быть готовым вызвать это в одном из двух мест. Для элементов, не содержащих объявлений пространств имён, соответствующим местом является обратный вызов ContentHandler.startElement(). Для элементов с таким объявлением, это делается в первом обратном вызове ContentHandler.startPrefixMapping(). Можно использовать флаг булевого типа, чтобы отслеживать, был ли контекст запущен. Когда вызывается любой из этих методов, проверяется флаг, чтобы увидеть, нужно ли запустить новый контекст. Если нужно, запускается контекст и устанавливается флаг. После того, как ContentHandler.startElement() делает это, он всегда сбрасывает флаг.
Обычно драйверы SAX запускают новый контекст в начале каждого XML-элемента. Затем они выполняют первый проход по атрибутам, чтобы обработать все объявления пространств имён, вызывая обратные вызовы ContentHandler.startPrefixMapping(). Затем выполняется второй проход, чтобы определить имена пространств имён для всех атрибутов и для имени элемента. Наконец, вся информация для обратного вызова ContentHandler.startElement() становится доступной, поэтому его можно вызвать.
Объект поддержки пространств имён всегда начинает работу с базовым контекстом: в этом контексте объявлено только префикс "xml".
- См. также:
popContext
public void popContext()
Обычно контекст следует извлекать в конце каждого XML-элемента. После извлечения контекста все сопоставления префиксов пространств имён, которые ранее действовали, восстанавливаются.
Нельзя пытаться объявить дополнительные префиксы пространств имён после извлечения контекста, пока не будет создан новый контекст.
- См. также:
declarePrefix
public boolean declarePrefix(String prefix, String uri)
processName() для интерпретации префиксов по отношению к (возможно переопределённым) префиксам. Этот метод объявляет префикс в текущем контексте пространства имён; префикс будет действовать до тех пор, пока этот контекст не будет извлечён, если он не будет затенён в дочернем контексте.
Для объявления пространства имён элемента по умолчанию используйте пустую строку в качестве префикса.
Обратите внимание на асимметрию в этой библиотеке: getPrefix не вернёт префикс "", даже если вы объявили пространство имён элемента по умолчанию. Чтобы проверить наличие пространства имён по умолчанию, необходимо явно обратиться к нему с помощью getURI.
- Параметры:
-
prefix- Префикс для объявления, или пустая строка для обозначения пространства имён элемента по умолчанию. Это значение никогда не может быть "xml" или "xmlns". -
uri- URI пространства имён, который следует связать с префиксом. - Возвращает:
- true, если префикс был корректным, false в противном случае
- См. также:
processName
public String[] processName(String qName, String[] parts, boolean isAttribute)
declarePrefix(). Этот метод обрабатывает квалифицированное имя XML в текущем контексте путём удаления префикса и его поиска среди объявленных префиксов. Возвращаемое значение будет массивом, предоставленным вызывающим объектом, заполненным следующим образом:
- parts[0]
- URI пространства имён или пустая строка, если он не используется.
- parts[1]
- Локальное имя (без префикса).
- parts[2]
- Оригинальное квалифицированное имя.
Все строки в массиве будут интернализованы. Если у квалифицированного имени есть префикс, который не был объявлен, то возвращаемое значение будет null.
Обратите внимание, что имена атрибутов обрабатываются по-другому, чем имена элементов: неименованное имя элемента получит пространство имён по умолчанию (если оно есть), в то время как неименованное имя атрибута его не получит.
- Параметры:
-
qName- Квалифицированное имя XML для обработки. -
parts- Массив, предоставленный вызывающим объектом, способный содержать как минимум три элемента. -
isAttribute- Флаг, указывающий, является ли это имя атрибута (true) или имя элемента (false). - Возвращает:
- Предоставленный массив, содержащий три интернализованные строки, представляющие URI пространства имён (или пустую строку), локальное имя и квалифицированное имя XML; или null, если префикс не объявлен.
- См. также:
getURI
public String getURI(String prefix)
Этот метод ищет префикс в текущем контексте. Используйте пустую строку ("") для пространства имён по умолчанию.
- Параметры:
-
prefix- Префикс для поиска. - Возвращает:
- Соответствующий URI пространства имён или null, если префикс не объявлен в данном контексте.
- См. также:
getPrefixes
public Enumeration<String> getPrefixes()
Примечание: если есть префикс по умолчанию, он не будет возвращён в этом перечислении; проверьте префикс по умолчанию, используя getURI с аргументом "".
- Возвращает:
- Перечисление префиксов (никогда пустое).
- См. также:
getPrefix
public String getPrefix(String uri)
Если более одного префикса сопоставлено с одним и тем же URI, этот метод сделает произвольный выбор; если вам нужны все префиксы, используйте метод getPrefixes() вместо этого.
Примечание: это значение никогда не вернёт пустой (по умолчанию) префикс; чтобы проверить наличие префикса по умолчанию, используйте метод getURI с аргументом "".
- Параметры:
-
uri- URI пространства имён - Возвращает:
- один из префиксов, в данный момент сопоставленных с предоставленным URI, или null, если ни один не сопоставлен или если URI присвоен пространству имён по умолчанию
- См. также:
getPrefixes
public Enumeration<String> getPrefixes(String uri)
Этот метод возвращает префиксы, сопоставленные с конкретным URI пространства имён. Префикс xml: будет включён. Если вам нужен только один префикс, сопоставленный с URI пространства имён, и вам всё равно какой, используйте метод getPrefix вместо этого.
Примечание: пустой (по умолчанию) префикс никогда не включается в это перечисление; чтобы проверить наличие пространства имён по умолчанию, используйте метод getURI с аргументом "".
- Parameters:
-
uri- URI пространства имён. - Returns:
- Перечисление префиксов (никогда пустое).
- See Also:
getDeclaredPrefixes
public Enumeration<String> getDeclaredPrefixes()
Пустой (по умолчанию) префикс будет включён в это перечисление; обратите внимание, что это поведение отличается от поведения методов getPrefix(java.lang.String) и getPrefixes().
- Returns:
- Перечисление всех префиксов, объявленных в этом контексте.
- See Also:
setNamespaceDeclUris
public void setNamespaceDeclUris(boolean value)
NSDECL методом processName(). Это можно изменить только до того, как любые контексты будут добавлены.- Parameters:
-
value- Флаг, указывающий, помещаются ли атрибуты объявления пространства имён в пространство имёнNSDECL - Throws:
-
IllegalStateException- при попытке установить это после того, как любой контекст был добавлен. - Since:
- 1.5, SAX 2.1alpha
isNamespaceDeclUris
public boolean isNamespaceDeclUris()
- Returns:
- true, если атрибуты объявления пространства имён помещаются в пространство имён, иначе false
- Since:
- 1.5, SAX 2.1alpha
© 1993, 2023, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/21/docs/api/java.xml/org/xml/sax/helpers/NamespaceSupport.html