Java SAXParser: различается между `localName` и` qName` - PullRequest
11 голосов
/ 24 февраля 2012

В 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 ]

29 голосов
/ 24 февраля 2012

В качестве примера я буду ссылаться на следующий пример 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 в качестве квалифицированных имен. Эти имена однозначны и могут быть обработаны синтаксическим анализатором и проверены.

1 голос
/ 23 октября 2013

В синтаксическом анализаторе саксофонов есть локальное имя, qname и пространство имен

qname - это имя тега вместе с пространством имен, а локальное имя - только имя тега. локальное имя может быть неоднозначным, но qname никогда.

1 голос
/ 24 февраля 2012

Райан ответил отлично.Единственное, что вам нужно, это то, что точные детали того, что сообщается о событии startElement в SAX, зависят от различных параметров конфигурации синтаксического анализатора SAX.К сожалению, у меня нет времени, чтобы подробно описать то, что сделал Райан.

0 голосов
/ 19 июня 2017

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
...