Класс NamespaceSupport
- java.lang.Object
-
- org.xml.sax.helpers.NamespaceSupport
public class NamespaceSupport extends Object
Капсулирует логику пространства имён для использования приложениями, использующими SAX, или внутренне драйверами SAX.
Этот модуль, как исходный код, так и документация, находится в общественном достоянии и не имеет ГАРАНТИИ. См. http://www.saxproject.org для получения дополнительной информации.
Этот класс инкапсулирует логику обработки пространства имён: отслеживает объявления, действующие в данный момент для каждого контекста, и автоматически преобразует квалифицированные имена 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:
- SAX 2.0
Поля
| Модификатор и тип | Поле и описание |
|---|---|
static String |
NSDECL URI объявления пространства имён в качестве константы. |
static String |
XMLNS URI XML-пространства имён в качестве константы. |
Конструкторы
| Конструктор и описание |
|---|
NamespaceSupport() Создаёт новый объект поддержки пространства имён. |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
boolean |
declarePrefix(String prefix,
String uri) Объявляет префикс пространства имён. |
Enumeration |
getDeclaredPrefixes() Возвращает перечисление всех префиксов, объявленных в этом контексте. |
String |
getPrefix(String uri) Возвращает один из префиксов, сопоставленных с URI пространства имён. |
Enumeration |
getPrefixes() Возвращает перечисление всех префиксов, объявления которых активны в текущем контексте. |
Enumeration |
getPrefixes(String uri) Возвращает перечисление всех префиксов для заданного URI, объявления которых активны в текущем контексте. |
String |
getURI(String prefix) Ищет префикс и получает сопоставленный в данный момент URI пространства имён. |
boolean |
isNamespaceDeclUris() Возвращает true, если атрибуты объявления пространства имён помещаются в пространство имён. |
void |
popContext() Возвращается в предыдущий контекст пространства имён. |
String[] |
processName(String qName,
String[] parts,
boolean isAttribute) Обрабатывает необработанное квалифицированное имя XML после того, как все объявления в текущем контексте были обработаны методом |
void |
pushContext() Начинает новый контекст пространства имён. |
void |
reset() Сбрасывает этот объект поддержки пространства имён для повторного использования. |
void |
setNamespaceDeclUris(boolean value) Управляет тем, помещаются ли атрибуты объявления пространства имён в пространство имён |
Методы, унаследованные от класса 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:*, используемым для объявления пространств имён.
- С:
- SAX 2.1alpha
- См. также:
-
setNamespaceDeclUris(boolean),isNamespaceDeclUris(), Значения константных полей
Конструкторы
NamespaceSupport
public NamespaceSupport()
Создать новый объект поддержки пространств имён.
Методы
reset
public void reset()
Сбросить этот объект поддержки пространств имён для повторного использования.
Необходимо вызвать этот метод перед повторным использованием объекта поддержки пространств имён для новой сессии. Если необходимо поддерживать URI объявлений пространств имён, этот флаг также должен быть установлен на отличное от значения по умолчанию значение.
- См. также:
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()
Возврат к предыдущему контексту пространства имён.
Обычно вы должны вызывать popContext в конце каждого XML-элемента. После вызова popContext, все ранее активные сопоставления префиксов пространств имён восстанавливаются.
Вы не должны пытаться объявить дополнительные префиксы пространств имён после вызова popContext, если вы не вызовете pushContext сначала.
- См. также:
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 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 getPrefixes(String uri)
Возвращает перечисление всех префиксов для данного URI, объявления которых активны в текущем контексте. Включает объявления из родительских контекстов, которые не были переопределены.
Этот метод возвращает префиксы, сопоставленные с конкретным URI пространства имён. Префикс xml: будет включён. Если вам нужен только один префикс, сопоставленный с URI пространства имён, и вам все равно какой, используйте метод getPrefix вместо этого.
Примечание: пустой (по умолчанию) префикс никогда не включается в это перечисление; чтобы проверить наличие пространства имён по умолчанию, используйте метод getURI с аргументом "".
- Параметры:
-
uri- URI пространства имён. - Возвращает:
- Перечисление префиксов (никогда пустое).
- См. также:
-
getPrefix(java.lang.String),getDeclaredPrefixes(),getURI(java.lang.String)
getDeclaredPrefixes
public Enumeration getDeclaredPrefixes()
Возвращает перечисление всех префиксов, объявленных в данном контексте.
Пустой (по умолчанию) префикс будет включён в это перечисление; обратите внимание, что это поведение отличается от поведения getPrefix(java.lang.String) и getPrefixes().
- Возвращает:
- Перечисление всех префиксов, объявленных в данном контексте.
- См. также:
-
getPrefixes(),getURI(java.lang.String)
setNamespaceDeclUris
public void setNamespaceDeclUris(boolean value)
Управляет тем, помещаются ли атрибуты объявления пространства имён в пространство имён NSDECL с помощью processName(). Это можно изменить только до того, как будут добавлены какие-либо контексты.
- Выбрасывает:
-
IllegalStateException- при попытке установить это после добавления любого контекста. - С:
- SAX 2.1alpha
isNamespaceDeclUris
public boolean isNamespaceDeclUris()
Возвращает true, если атрибуты объявления пространства имён помещаются в пространство имён. По умолчанию это поведение не используется.
- С:
- SAX 2.1alpha
© 1993, 2020, 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.