Фундаментальный характер пространств имен xml и проверка xsd - PullRequest
0 голосов
/ 31 мая 2018

Я понимаю, что это широкий вопрос, но я хотел понять фундаментальное различие в значении в отношении проверки XSD этих двух случаев:

A: без префиксов пространства имен -

<someRoot xmlns="http://myNamespace">
  <someElement>skjdhf</someElement>
</someRoot>

B: с префиксами пространства имен -

<ns0:someRoot xmlns:ns0="http://myNamespace">
  <someElement>skjdhf</someElement>
</ns0:someRoot>

Я хотел бы понять разницу между A и B, поскольку даже если они кажутся функционально эквивалентными, я знаю, что это не так.Что меня интересует, так это то, что два экземпляра «говорят», которые отличаются - чем отличается элемент someElement по отношению к пространству имен, определенному в элементе someRoot между двумя примерами?

1 Ответ

0 голосов
/ 31 мая 2018

XML не силен в определении «значения» (он же «семантика»).Авторы спецификации были совершенно непреклонны в этом: XML определяет выразительный синтаксис, но то, что он «означает», является вопросом, по которому отправитель и получатель должны договориться.

Сказав это, существует широко распространенный консенсусв сообществе XML эти префиксы пространства имен являются произвольными и что получатель XML-документа должен принимать любой префикс, который он находит (или не имеет префикса, как в первом примере), и до тех пор, пока он связан с правильным URI, выборпрефикса не передает никакой информации.Это можно увидеть, например, в спецификации W3C XML Infoset, где говорится (в §2.2): «Обратите внимание, что приложения, использующие пространство имен, должны использовать имя пространства имен [*], а не префикс для идентификации элементов».

Этот консенсус отражен в спецификации XSD: проверка схемы игнорирует префиксы пространства имен.

Во всем этом выбор использования префикса пространства имен (<X xmlns="uri"/>) является произвольным выбором, так же как выбор конкретногопрефикс (<æ:X xmlns:æ="uri"/>) есть.

[*] спецификация использует «имя пространства имен» для того, что большинство людей называют «URI пространства имен».

Однако есть одно различие между вашими двумя примерами, которое является более значительным, чемвыбор префикса.В вашем первом примере дочерний элемент someElement имеет имя пространства имен (URI) http://myNamespace.Во втором примере элемент не находится в пространстве имен.Это важно (и повлияет на проверку схемы);выбор префикса не

...