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 11

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