Класс NamespaceSupport
public class NamespaceSupport extends Object
Этот класс инкапсулирует логику обработки пространств имен: он отслеживает объявления, действующие в каждом контексте, и автоматически преобразует квалифицированные имена XML в составляющие их пространства имен; его также можно использовать в обратном направлении для создания qname XML на основе пространств имен.
Объекты поддержки пространств имен можно использовать повторно, но между сеансами необходимо вызывать метод 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 (анализаторы) могут использовать этот класс для обработки пространств имен, они не обязаны этого делать. Если приложениям нужна информация о пространствах имен, они должны отслеживать ее самостоятельно.
- Начиная с:
- 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, как определено в рекомендации «Namespaces in XML». Это URI пространства имен, автоматически сопоставляемый префиксу «xml».
- См. также:
NSDECL
public static final String NSDECL
http://www.w3.org/xmlns/2000/, как определено в исправлении к рекомендации «Namespaces in 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 пространства имен или пустая строка, если 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, передав ему аргумент «».
- Параметры:
-
uri— URI пространства имен. - Возвращает:
- Перечисление префиксов (не бывает пустым).
- См. также:
getDeclaredPrefixes
public Enumeration<String> getDeclaredPrefixes()
Пустой префикс (префикс по умолчанию) будет включен в это перечисление; обратите внимание, что это поведение отличается от поведения методов getPrefix(String) и getPrefixes().
- Возвращает:
- Перечисление всех префиксов, объявленных в этом контексте.
- См. также:
setNamespaceDeclUris
public void setNamespaceDeclUris(boolean value)
NSDECL методом processName(). Это значение можно изменить только до помещения в стек каких-либо контекстов.- Параметры:
-
value— флаг, указывающий, помещаются ли атрибуты объявления пространства имен в пространство именNSDECL - Выбрасывает:
-
IllegalStateException— при попытке установить это значение после помещения в стек какого-либо контекста. - Начиная с:
- 1.5, SAX 2.1alpha
isNamespaceDeclUris
public boolean isNamespaceDeclUris()
- Возвращает:
- true, если атрибуты объявления пространства имен помещаются в пространство имен, иначе false
- Начиная с:
- 1.5, SAX 2.1alpha
© 1993, 2025, 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/25/docs/api/java.xml/org/xml/sax/helpers/NamespaceSupport.html