Класс NamespaceSupport
- java.lang.Object
-
- org.xml.sax.helpers.NamespaceSupport
public class NamespaceSupport extends Object
Заворачивает логику пространства имён для использования приложениями, использующими SAX, или внутренними драйверами SAX.
Этот модуль, как исходный код, так и документация, находится в общественном достоянии и не имеет ГАРАНТИИ. См. http://www.saxproject.org для получения дополнительной информации.
Этот класс оборачивает логику обработки пространств имён: он отслеживает объявленные в данный момент пространства имён для каждого контекста и автоматически преобразует квалифицированные имена XML в части пространства имён; он также может использоваться в обратном направлении для генерации XML-полных имён из пространств имён.
Объекты поддержки пространств имён являются многоразовыми, но метод сброса должен вызываться между каждой сессией.
Вот простая сессия:
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 String | NSDECL | URI объявления пространства имён в качестве константы. |
static 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 после того, как все объявления в текущем контексте были обработаны методом |
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:*, которые используются для объявления пространств имён.
- С момента:
- 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 пространства имён (или пустую строку), локальное имя и полное квалифицированное имя; или 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(). Это можно изменить только до запуска каких-либо контекстов.
- Исключения:
-
IllegalStateException- при попытке установить это после запуска любого контекста. - С:
- 1.5, SAX 2.1alpha
isNamespaceDeclUris
public boolean isNamespaceDeclUris()
Возвращает true, если атрибуты объявления пространства имён помещаются в пространство имён. Это поведение не является стандартным по умолчанию.
- С:
- 1.5, 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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.xml/org/xml/sax/helpers/NamespaceSupport.html