Spec-Zone.ru › OpenJDK 21

Класс 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 (парсеры) могут выбрать использование этого класса для реализации обработки пространств имён, это не обязательно. Приложения должны самостоятельно отслеживать информацию о пространствах имён, если они хотят использовать информацию о пространствах имён.

Since:
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().

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

Необходимо вызвать этот метод перед повторным использованием объекта поддержки пространств имён для новой сессии. Если поддержка пространств имён объявления 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(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 с аргументом "".

Parameters:
uri - URI пространства имён.
Returns:
Перечисление префиксов (никогда пустое).
See Also:
  • getPrefix(java.lang.String)
  • getDeclaredPrefixes()
  • getURI(java.lang.String)

getDeclaredPrefixes

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

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

Returns:
Перечисление всех префиксов, объявленных в этом контексте.
See Also:
  • getPrefixes()
  • getURI(java.lang.String)

setNamespaceDeclUris

public void setNamespaceDeclUris(boolean value)
Управляет тем, помещаются ли атрибуты объявления пространства имён в пространство имён NSDECL методом processName(). Это можно изменить только до того, как любые контексты будут добавлены.
Parameters:
value - Флаг, указывающий, помещаются ли атрибуты объявления пространства имён в пространство имён NSDECL
Throws:
IllegalStateException - при попытке установить это после того, как любой контекст был добавлен.
Since:
1.5, SAX 2.1alpha

isNamespaceDeclUris

public boolean isNamespaceDeclUris()
Возвращает true, если атрибуты объявления пространства имён помещаются в пространство имён. Это поведение не является по умолчанию.
Returns:
true, если атрибуты объявления пространства имён помещаются в пространство имён, иначе false
Since:
1.5, SAX 2.1alpha

© 1993, 2023, 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/21/docs/api/java.xml/org/xml/sax/helpers/NamespaceSupport.html

Spec-Zone.ru

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