Класс 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 (анализаторы) могут использовать этот класс для реализации обработки пространств имен, они не обязаны это делать. Если приложениям требуется использовать информацию о пространствах имен, они должны отслеживать ее самостоятельно.
- Начиная с:
- 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 |
Управляет тем, помещает ли метод processName() атрибуты объявлений пространств имен в пространство имен NSDECL. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создает и возвращает копию этого объекта. |
boolean |
equals |
Указывает, равен ли этот объект какому-либо другому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удален в будущей версии. Финализация объявлена устаревшей и может быть удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
String |
toString() |
Возвращает строковое представление объекта. |
final void |
wait() |
Переводит текущий поток в состояние ожидания до его пробуждения, обычно в результате вызова метода notify или прерывания потока (interrupt). |
final void |
wait |
Переводит текущий поток в состояние ожидания до его пробуждения, обычно в результате вызова метода notify или прерывания потока (interrupt), либо до истечения заданного времени. |
final void |
wait |
Переводит текущий поток в состояние ожидания до его пробуждения, обычно в результате вызова метода notify или прерывания потока (interrupt), либо до истечения заданного времени. |
Подробное описание полей
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 пространства имен или пустая строка, если 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)
processName() атрибуты объявлений пространств имен в пространство имен NSDECL. Это значение можно изменить только до помещения в стек каких-либо контекстов.- Параметры:
-
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.