Spec-Zone.ru › OpenJDK 24

Класс NamespaceSupport

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

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

Методы, объявленные в классе java.lang.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, как определено в *рекомендации* «Пространства имен в 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()
Сбрасывает состояние объекта поддержки пространств имён для повторного использования.

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

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

pushContext

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

Код обратного вызова событий должен начинать новый контекст один раз на каждый элемент. Это означает возможность вызова в одном из двух мест. Для элементов, не включающих объявления пространств имён, правильным местом является обратный вызов ContentHandler.startElement(). Для элементов с объявлением это делается в первом обратном вызове ContentHandler.startPrefixMapping(). Флаг boolean можно использовать для отслеживания того, был ли контекст уже начат. При вызове любого из этих методов проверяется флаг, чтобы увидеть, нужно ли начинать новый контекст. Если да, начинается контекст, и флаг устанавливается. После 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(java.lang.String, java.lang.String[], boolean)
  • getURI(java.lang.String)
  • getPrefix(java.lang.String)

processName

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

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

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

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

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

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

getURI

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

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

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

getPrefixes

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

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

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

getPrefix

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

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

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

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

getPrefixes

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

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

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

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

getDeclaredPrefixes

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

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

Возвращает:
Перечисление всех префиксов, объявленных в этом контексте.
См. также:
  • getPrefixes()
  • getURI(java.lang.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

© 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

Spec-Zone.ru

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