Java SAXParser: отличается между "localName" и "qName"

В Java, Handler класс содержит метод, который называется startElement.этот метод имеет прототип:

public void startElement(String uri, String localName, String qName, Attributes attributes)

Я прочитал на веб-сайте Oracle Java, но я все еще не понимаю, что отличается между localName и

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, который либо знает пространство имен, либо нет, но документы, использующие пространства имен, как правило, должны быть анализируется имен известны анализаторы.

пространства имен определяются так, чтобы a) они могли быть каталогизированы синтаксическим анализатором и b) чтобы элементы с одинаковым именем в разных пространствах имен могли существовать в одном документе, не становясь двусмысленно определенными.

префикс

префикс-это короткий ключ, используемый для ссылки на пространство имен. В приведенном выше примере 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 (Qualified имя) были введены пространствами имен XML для использования в качестве ссылок URI. Имя определяет допустимый идентификатор для элементов и атрибутов. 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