В чем разница между тегами </ x: out> и </out>? - PullRequest
1 голос
/ 11 июня 2019

В XML, в чем разница между тегами </x:out> и </out>? Так, например, если у меня есть <quantity>23</x:quantity> и <quantity>23</quantity>, что это изменит?

Ответы [ 2 ]

1 голос
/ 11 июня 2019

Разница в том, что вы получите ошибку с

<quantity>23</x:quantity>

против ошибки с

<quantity>23</quantity>

Префиксы, которые вы найдете в документах xml, называются префиксами пространства имен. Как указано в ответе выше, тег namespaceta «x» - это просто заполнитель для фактического пространства имен, который в значительной степени является просто уникальным идентификатором области видимости элемента. Пространства имен являются важной и незаметной частью работы с xml, но они выполняют хорошую функцию. Прежде чем области могли быть идентифицированы / установлены на более высоком уровне с помощью всех видов инструментов рабочего процесса, диапазон, в котором должен функционировать элемент, был определен заданным пространством имен этого элемента.

Пример:

x = oldNamespace, xy = newNamespace. Следующий шаблон кода в xslt вызывает <x:element> всякий раз, когда он встречается в документе xml, и создает новый элемент <xy:element>, в который он копирует значение <x:element>.

 <xsl:template match="x:element">
   <xsl:element name="xy:element">
      <xsl:value-of select="current()"/>
   </xsl:element>
</xsl:template>

Преимущество этого заключается в том, что вновь сформированный <xy:element> является совершенно другим элементом по сравнению с <x:element>, и когда <xy:element> вызывается другой функцией какого-либо рода, он оставляет <x:element> в одиночку, тем самым определяя область действия <x:element> и впоследствии <xy:element>.

Таким образом, префикс "x:" не вызывает функцию "x" для элемента <element>, как это может происходить на другом языке программирования (откуда, я полагаю, может возникнуть ваша путаница), он просто помещает элемент в стесненная среда.

Ура!

0 голосов
/ 11 июня 2019

x в <x:out> интерпретируется синтаксическими анализаторами XML как префикс пространства имен , который представляет собой механизм для создания документов с двумя или более словарями XML, имеющими элементы с одинаковым локальным именем. Например, XHTML имеет элемент title, как и SVG. Теперь в документе, содержащем как XHTML, так и SVG-разметку, элементы title должны обрабатываться по-разному (для целей проверки и в отношении допустимых атрибутов и т. Д.) В зависимости от того, предназначен ли данный элемент title для содержимого XHTML или SVG, соответственно. В XML префикс пространства имен (все, что появляется перед : в именах элементов или атрибутов) должен быть связан с привязкой пространства имен (один или несколько специальных атрибутов XML, начинающихся с xmlns или xmlns:). Например, в следующем документе используется привязка пространства имен xmlns:myvocabulary="http://example.com/myvocabulary" для назначения префикса пространства имен XML myvocabulary имени пространства имен, указанному в URI http://example.com/myvocabulary:

<p>
  <myvocabulary:myelement xmlns:myvocabulary="http://example.com/myvocabulary"/>
</p>

Тот факт, что пространство имен name является URL-адресом, не важен - анализатор XML просто использует URL-адрес в качестве строкового идентификатора для имени пространства имен.

Редактировать : следующее, как указал Майкл, неверно. Вместо этого конструкция <x:myelement>...</y:myelement> является всегда недопустимой, и пространство имен с префиксами , а не только привязанные к именам пространства имен, должны совпадать при сопоставлении тегов начального и конечного элементов.

Обратите внимание, что XML требует правильного содержимого XML в отношении пространств имен XML: такая конструкция, как <x:myelement>...</y:myelement>, допустима только в том случае, если оба префикса пространства имен x и y связаны с одним и тем же именем пространства имен, например, в

<x:myelement xmlns:x="http://example.com/myvocab" xmlns:y="http://example.com/myvocab">...</y:myelement>

Напротив, SGML (предок / расширенный набор XML и HTML) не обычно (1) обрабатывает префиксы пространства имен или даже специальный символ двоеточия (:) и интерпретирует всю строку x:myelement как имя элемента.

См. Пространства имен в XML

(1), если не используется специальная инструкция обработки привязки пространства имен DSDL-9, определенная в ИСО / МЭК 19757-9: 2008

...