Класс NamespaceSupport
public class NamespaceSupport extends Object
Этот класс капсулирует логику обработки пространств имён: он отслеживает объявления, действующие в данный момент для каждого контекста, и автоматически преобразует квалифицированные имена XML в части их пространств имён; он также может быть использован в обратном направлении для генерации 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 (парсеры) могут выбрать использование этого класса для реализации обработки пространств имён, это не является обязательным. Приложения должны отслеживать информацию о пространствах имён самостоятельно, если они хотят использовать информацию о пространствах имён.
- Since:
- 1.4, SAX 2.0
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final String |
NSDECL |
URI объявления пространства имён в качестве константы. |
static final String |
XMLNS |
XML-URI пространства имён в качестве константы. |
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
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()
Необходимо вызвать этот метод перед повторным использованием объекта поддержки пространств имён для новой сессии. Если требуется поддержка пространств имён, этот флаг также должен быть установлен в значение, отличное от значения по умолчанию.
- См. также:
pushContext
public void pushContext()
Код обратного вызова событий должен начинать новый контекст один раз на каждый элемент. Это означает возможность вызова в одном из двух мест. Для элементов, не включающих объявления пространств имён, правильным местом является обратный вызов ContentHandler.startElement(). Для элементов с объявлением это делается в первом обратном вызове ContentHandler.startPrefixMapping(). Флаг boolean можно использовать для отслеживания того, был ли контекст уже начат. При вызове любого из этих методов проверяется флаг, чтобы увидеть, нужно ли начинать новый контекст. Если да, начинается контекст, и флаг устанавливается. После 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 с аргументом "".
- Параметры:
-
uri- URI пространства имён. - Возвращает:
- Перечисление префиксов (никогда пустое).
- См. также:
getDeclaredPrefixes
public Enumeration<String> getDeclaredPrefixes()
Пустой (по умолчанию) префикс будет включён в это перечисление; обратите внимание, что это поведение отличается от поведения getPrefix(java.lang.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://download.java.net/java/early_access/jdk24/docs/api/java.xml/org/xml/sax/helpers/NamespaceSupport.html