Spec-Zone.ru › OpenJDK 25

Класс NamespaceSupport

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

Этот класс инкапсулирует логику обработки пространств имен: он отслеживает объявления, действующие в каждом контексте, и автоматически преобразует квалифицированные имена 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(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)
Определяет, помещаются ли атрибуты объявления пространства имен в пространство имен NSDECL методом processName().

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

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

XMLNS

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

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

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

NSDECL

public static final String NSDECL
URI объявления пространства имен в виде константы. Значение — http://www.w3.org/xmlns/2000/, как определено в исправлении к рекомендации «Namespaces in 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)
Определяет, помещаются ли атрибуты объявления пространства имен в пространство имен NSDECL методом processName(). Это значение можно изменить только до помещения в стек каких-либо контекстов.
Параметры:
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, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.xml/org/xml/sax/helpers/NamespaceSupport.html

Spec-Zone.ru

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