Spec-Zone.ru › OpenJDK 27

Класс NamespaceSupport

java.lang.Object
org.xml.sax.helpers.NamespaceSupport
public class NamespaceSupport extends Object
Инкапсулирует логику пространств имен для использования приложениями, работающими с SAX, или непосредственно драйверами SAX.

Этот класс инкапсулирует логику обработки пространств имен: он отслеживает объявления, действующие в каждом контексте, и автоматически разбирает квалифицированные имена 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(String prefix, String uri)
Объявляет префикс пространства имен.
Enumeration<String> getDeclaredPrefixes()
Возвращает перечисление всех префиксов, объявленных в этом контексте.
String getPrefix(String uri)
Возвращает один из префиксов, сопоставленных URI пространства имен.
Enumeration<String> getPrefixes()
Возвращает перечисление всех префиксов, объявления которых активны в текущем контексте.
Enumeration<String> getPrefixes(String uri)
Возвращает перечисление всех префиксов для заданного URI, объявления которых активны в текущем контексте.
String getURI(String prefix)
Находит префикс и возвращает сопоставленный ему в данный момент URI пространства имен.
boolean isNamespaceDeclUris()
Возвращает true, если атрибуты объявлений пространств имен помещаются в пространство имен.
void popContext()
Возвращается к предыдущему контексту пространства имен.
String[] processName(String qName, String[] parts, boolean isAttribute)
Обрабатывает исходное квалифицированное имя XML после обработки всех объявлений в текущем контексте методом declarePrefix().
void pushContext()
Создает новый контекст пространства имен.
void reset()
Сбрасывает этот объект поддержки пространств имен для повторного использования.
void setNamespaceDeclUris(boolean value)
Управляет тем, помещает ли метод processName() атрибуты объявлений пространств имен в пространство имен NSDECL.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создает и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли этот объект какому-либо другому объекту.
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(long timeoutMillis)
Переводит текущий поток в состояние ожидания до его пробуждения, обычно в результате вызова метода notify или прерывания потока (interrupt), либо до истечения заданного времени.
final void wait(long timeoutMillis, int nanos)
Переводит текущий поток в состояние ожидания до его пробуждения, обычно в результате вызова метода notify или прерывания потока (interrupt), либо до истечения заданного времени.

Подробное описание полей

XMLNS

public static final String XMLNS
URI пространства имен XML в виде константы. Значение — http://www.w3.org/XML/1998/namespace, как указано в рекомендации «Пространства имен в XML».

Это URI пространства имен, автоматически сопоставляемый префиксу "xml".

См. также:
  • Значения констант полей

NSDECL

public static final String NSDECL
URI объявления пространства имен в виде константы. Значение — http://www.w3.org/xmlns/2000/, как указано в исправлении к рекомендации «Пространства имен в XML», несовместимом с предыдущими версиями. Поскольку это исправление было опубликовано после SAX2, по умолчанию SAX2 использует исходную рекомендацию и обычно не применяет этот URI.

Это URI пространства имен, которое может быть назначено атрибутам xmlns и xmlns:*, используемым для объявления пространств имен.

Начиная с:
1.5, SAX 2.1alpha
См. также:
  • setNamespaceDeclUris(boolean)
  • isNamespaceDeclUris()
  • Значения констант полей

Подробное описание конструкторов

NamespaceSupport

public NamespaceSupport()
Создает новый объект поддержки пространств имен.

Подробное описание методов

reset

public void reset()
Сбрасывает этот объект поддержки пространств имен для повторного использования.

Перед повторным использованием объекта поддержки пространств имен в новом сеансе необходимо вызвать этот метод. Если требуется поддержка URI объявлений пространств имен, этому флагу также необходимо задать значение, отличное от значения по умолчанию.

См. также:
  • setNamespaceDeclUris(boolean)

pushContext

public void pushContext()
Создает новый контекст пространства имен. Новый контекст автоматически наследует объявления родительского контекста, но также отслеживает объявления, сделанные в этом контексте.

Код обратного вызова событий должен создавать новый контекст для каждого элемента. Для этого нужно быть готовым вызвать метод в одном из двух мест. Для элементов без объявлений пространств имен подходящее место — обратный вызов ContentHandler.startElement(). Для элементов с такими объявлениями это делается в первом обратном вызове ContentHandler.startPrefixMapping(). Чтобы отслеживать, был ли уже создан контекст, можно использовать логический флаг. При вызове любого из этих методов проверяется флаг, чтобы определить, нужно ли создавать новый контекст. Если нужно, контекст создается, а флаг устанавливается. После выполнения этих действий в ContentHandler.startElement() флаг всегда сбрасывается.

Обычно драйверы SAX помещают новый контекст в стек в начале каждого элемента XML. Затем они выполняют первый проход по атрибутам для обработки всех объявлений пространств имен, вызывая обратные вызовы ContentHandler.startPrefixMapping(). Далее выполняется второй проход, чтобы определить имена, квалифицированные пространствами имен, для всех атрибутов и имени элемента. После этого доступны все данные для обратного вызова ContentHandler.startElement(), и его можно выполнить.

Объект поддержки пространств имен всегда начинает работу с уже активным базовым контекстом: в этом контексте объявлен только префикс "xml".

См. также:
  • ContentHandler
  • popContext()

popContext

public void popContext()
Возвращается к предыдущему контексту пространства имен.

Обычно контекст следует извлекать из стека в конце каждого элемента XML. После извлечения контекста из стека восстанавливаются все ранее действовавшие сопоставления префиксов пространств имен.

После извлечения контекста из стека нельзя объявлять дополнительные префиксы пространств имен, пока сначала не будет создан новый контекст.

См. также:
  • pushContext()

declarePrefix

public boolean declarePrefix(String prefix, String uri)
Объявляет префикс пространства имен. Все префиксы должны быть объявлены до обращения к ним. Например, драйвер SAX (анализатор) просматривает атрибуты элемента за два прохода: сначала ищет объявления пространств имен, затем выполняет второй проход, используя processName() для интерпретации префиксов с учетом (возможно, переопределенных) префиксов.

Этот метод объявляет префикс в текущем контексте пространства имен; префикс остается активным, пока этот контекст не будет извлечен из стека, если только он не будет перекрыт в дочернем контексте.

Чтобы объявить пространство имен элемента по умолчанию, используйте в качестве префикса пустую строку.

Обратите внимание на асимметрию этой библиотеки: getPrefix не возвращает префикс "", даже если объявлено пространство имен элемента по умолчанию. Чтобы проверить пространство имен по умолчанию, нужно явно выполнить поиск с помощью getURI. Эта асимметрия упрощает поиск префиксов для имен атрибутов, для которых нельзя использовать префикс по умолчанию.

Параметры:
prefix — объявляемый префикс или пустая строка, указывающая на пространство имен элемента по умолчанию. Значение не может быть равно "xml" или "xmlns".
uri — URI пространства имен, связываемый с префиксом.
Возвращает:
true, если префикс допустим; в противном случае false
См. также:
  • processName(String, String[], boolean)
  • getURI(String)
  • getPrefix(String)

processName

public String[] processName(String qName, String[] parts, boolean isAttribute)
Обрабатывает исходное квалифицированное имя XML после обработки всех объявлений в текущем контексте методом declarePrefix().

Этот метод обрабатывает исходное квалифицированное имя XML в текущем контексте, удаляя префикс и выполняя его поиск среди объявленных в данный момент префиксов. Возвращаемым значением будет массив, переданный вызывающим кодом и заполненный следующим образом:

parts[0]
URI пространства имен или пустая строка, если URI не используется.
parts[1]
Локальное имя (без префикса).
parts[2]
Исходное имя.

Все строки в массиве будут интернированы. Если у исходного имени есть необъявленный префикс, будет возвращено значение null.

Обратите внимание, что имена атрибутов обрабатываются иначе, чем имена элементов: к имени элемента без префикса будет применено пространство имен по умолчанию (если оно задано), а к имени атрибута без префикса — нет.

Параметры:
qName — квалифицированное имя XML, которое нужно обработать.
parts — переданный вызывающим кодом массив, способный вместить не менее трех элементов.
isAttribute — флаг, указывающий, является ли это имя атрибута (true) или элемента (false).
Возвращает:
Переданный массив, содержащий три интернированные строки, представляющие URI пространства имен (или пустую строку), локальное имя и квалифицированное имя XML; либо null, если обнаружен необъявленный префикс.
См. также:
  • declarePrefix(String, String)
  • String.intern()

getURI

public String getURI(String prefix)
Находит префикс и возвращает сопоставленный ему в данный момент URI пространства имен.

Этот метод ищет префикс в текущем контексте. Для пространства имен по умолчанию используйте пустую строку ("").

Параметры:
prefix — префикс, который нужно найти.
Возвращает:
Связанный URI пространства имен или null, если префикс не объявлен в этом контексте.
См. также:
  • getPrefix(String)
  • getPrefixes()

getPrefixes

public Enumeration<String> getPrefixes()
Возвращает перечисление всех префиксов, объявления которых активны в текущем контексте. В него входят объявления из родительских контекстов, которые не были переопределены.

Примечание: если существует префикс по умолчанию, он не будет включен в это перечисление; наличие префикса по умолчанию можно проверить с помощью метода getURI, передав ему аргумент "".

Возвращает:
Перечисление префиксов (не бывает пустым).
См. также:
  • getDeclaredPrefixes()
  • getURI(String)

getPrefix

public String getPrefix(String uri)
Возвращает один из префиксов, сопоставленных URI пространства имен.

Если в данный момент одному URI сопоставлено несколько префиксов, этот метод произвольно выберет один из них; чтобы получить все префиксы, используйте метод getPrefixes().

Примечание: этот метод никогда не возвращает пустой префикс (префикс по умолчанию); чтобы проверить наличие префикса по умолчанию, используйте метод getURI, передав ему аргумент "".

Параметры:
uri — URI пространства имен
Возвращает:
Один из префиксов, сопоставленных переданному URI, либо null, если ни один префикс не сопоставлен или URI назначен пространству имен по умолчанию
См. также:
  • getPrefixes(java.lang.String)
  • getURI(String)

getPrefixes

public Enumeration<String> getPrefixes(String uri)
Возвращает перечисление всех префиксов для заданного URI, объявления которых активны в текущем контексте. В него входят объявления из родительских контекстов, которые не были переопределены.

Этот метод возвращает префиксы, сопоставленные определенному URI пространства имен. В перечисление будет включен префикс xml:. Если нужен только один префикс, сопоставленный URI пространства имен, и неважно, какой именно, используйте вместо этого метод getPrefix.

Примечание: пустой префикс (префикс по умолчанию) никогда не включается в это перечисление; наличие пространства имен по умолчанию можно проверить с помощью метода getURI, передав ему аргумент "".

Параметры:
uri — URI пространства имен.
Возвращает:
Перечисление префиксов (не бывает пустым).
См. также:
  • getPrefix(String)
  • getDeclaredPrefixes()
  • getURI(String)

getDeclaredPrefixes

public Enumeration<String> getDeclaredPrefixes()
Возвращает перечисление всех префиксов, объявленных в этом контексте.

Пустой префикс (префикс по умолчанию) будет включен в это перечисление; обратите внимание, что такое поведение отличается от поведения методов getPrefix(String) и getPrefixes().

Возвращает:
Перечисление всех префиксов, объявленных в этом контексте.
См. также:
  • getPrefixes()
  • getURI(String)

setNamespaceDeclUris

public void setNamespaceDeclUris(boolean value)
Управляет тем, помещает ли метод processName() атрибуты объявлений пространств имен в пространство имен NSDECL. Это значение можно изменить только до помещения в стек каких-либо контекстов.
Параметры:
value — флаг, указывающий, помещаются ли атрибуты объявлений пространств имен в пространство имен NSDECL
Выбрасывает:
IllegalStateException — при попытке установить это значение после помещения в стек какого-либо контекста.
Начиная с:
1.5, SAX 2.1alpha

isNamespaceDeclUris

public boolean isNamespaceDeclUris()
Возвращает true, если атрибуты объявлений пространств имен помещаются в пространство имен. Такое поведение не используется по умолчанию.
Возвращает:
true, если атрибуты объявлений пространств имен помещаются в пространство имен; в противном случае false
Начиная с:
1.5, SAX 2.1alpha

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, обзоры концепций, определения терминов, способы обхода ограничений и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2026, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API