Java SAXParser: разница между "localName" и " qName`
В Java, Handler
класс содержит метод, имя которого startElement
.этот метод имеет прототип:
public void startElement(String uri, String localName, String qName, Attributes attributes)
Я читал на сайте Oracle Java, но до сих пор не понимаю, чем отличается параметр localName
от параметра qName
.Здесь они объясняют:
LocalName-локальное имя (без префикса) или пустая строка, если Обработка пространства имен не выполняется. qName-полное имя XML 1.0 (с префиксом) или пустая строка, если полные имена не являются доступный.
В приведенном выше определении я не знаю некоторых понятий: prefix
(префикс чего ?) Namespace
Кто может объяснить мне (как можно проще) об этих параметрах, пожалуйста.
Спасибо :)
4 ответа:
В качестве примера я приведу следующий пример XML:
<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="note"> <xs:complexType> <xs:sequence> <xs:element name="to" type="xs:string"/> <xs:element name="from" type="xs:string"/> <xs:element name="heading" type="xs:string"/> <xs:element name="body" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
Пространство имен
Пространство имен-это логический контейнер, в котором определен элемент. Пространство имен XML-схемы (с uri: http://www.w3.org/2001/XMLSchema ). в вышеприведенном документе на него делается ссылка в строке 2. Обработка XML-документов может выполняться с помощью синтаксического анализатора XML, который либо поддерживает пространство имен, либо нет, но документы, использующие пространства имен, как правило, должны быть проанализированы с помощью синтаксические анализаторы с учетом пространства имен. Пространства имен определяются так, чтобы а) они могли быть каталогизированы синтаксическим анализатором и Б) чтобы элементы с одинаковыми именами в разных пространствах имен могли существовать в одном документе, не становясь двусмысленно определенными.Префикс
Префикс-это короткий ключ, используемый для обращения к пространству имен. В приведенном выше примереxs
используется для ссылки на пространство имен XML-схемы.Местное Название (Часть)
Элемент в документе имеет имя, как это определяется в пространстве имен. В приведенном выше примере вы можете найти
schema
,element
,complexType
,sequence
, иelement
как местные названия. Локальные имена могут быть неоднозначными, если в документе имеется несколько пространств имен, на которые ссылаются, и одно или несколько из этих пространств имен определяют элементы с одинаковыми именами.Полное имя (qName)
Полное имя состоит из префикса для пространства имен (необязательно, некоторые реализации могут использовать uri пространства имен), за которым следует
:
, а затем элемент локальное имя. В приведенном выше примере вы можете найтиxs:schema
,xs:element
,xs:complexType
,xs:sequence
, иxs:element
как квалифицированные имена. Эти имена являются однозначными и могут быть обработаны синтаксическим анализатором и проверены.
Ответ Райана превосходен. Единственная другая информация, которая вам нужна, заключается в том, что точные сведения о том, что будет сообщено о событии startElement в SAX, зависят от различных параметров конфигурации анализатора SAX. К сожалению, у меня нет времени, чтобы подробно описать все, что сделал Райан.
В Sax parser есть локальное имя, qname и пространство имен
Qname-это имя тега вместе с пространством имен, в то время как локальное имя-это только имя тега. локальное имя может быть неоднозначным, но qname-никогда.
QNames (Q ualified Name) были введены пространствами имен XML для использования в качестве ссылок URI. QName определяет допустимый идентификатор для элементов и атрибутов. QNames обычно используются для ссылки на определенные элементы или атрибуты в XML-документах и обеспечивают механизм для краткой идентификации пары
{URI, local-name}
. Пространства имен также могут быть объявлены в корневом элементе XMLПример:
<?xml version='1.0'?> <doc xmlns:x="http://example.com/ns/foo"> <x:p/> </doc>
QName
x:p
является кратким, однозначное имя для пары{URI, local-name}
{"http://example.com/ns/foo", "p"}.
, гдеdoc
- локальное имя.Аналогия Java:
com.prem.java.Employee employee; //creating object using fully qualified name i.e. QName Student student; //create an object using local name