Почему мне нужно квалифицировать именованный тип контента из атрибута «тип» локального элемента XSD? - PullRequest
0 голосов
/ 21 июня 2019

У меня есть XSD-файл, подобный этому:

<schema xmlns="https://www.w3.org/2001/XMLSchema"
    targetNamespace="http://myns.com"
    elementFormDefault="qualified">

  <complexType name="playerInfo">
    <sequence>
      <element name="level" type="integer" />
    </sequence>
  </complexType>

  <element name="player">
    <complexType>
      <sequence>
        <element name="name" type="string" />
        <element name="info" type="playerInfo" />
      </sequence>
    </complexType>
  </element>

</schema>

Теперь моя среда IDE выдает ошибку, говоря, что она "не может разрешить символ playerInfo" в атрибуте type локального элемента infoдекларация.Но если я добавлю псевдоним пространства имен xmlns:target="http://myns.com" к тегу <schema>, а затем изменим этот атрибут type на type="target:playerInfo", ошибка исчезнет.Я видел это в других уроках, поэтому я знаю, что это правильно.Но я запутался: зачем квалифицировать значение атрибута type целевым пространством имен?Как глобальный complexType автоматически установил связь с целевым пространством имен?Насколько я знаю, пространством имен по умолчанию для схемы является путь w3.org, так как complexType имеет какое-либо отношение к целевому пространству имен?

1 Ответ

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

Здесь нужно понять две вещи.

Во-первых, все компоненты глобальной схемы имеют имя, которое представляет собой QName, включающее targetNamespace содержащего документ схемы, вместе с локальным именем, указанным в name attribute.

Во-вторых, все атрибуты, которые ссылаются на компоненты глобальной схемы, такие как ref и type, являются экземплярами xs:QName, и поэтому, если они не имеют префикса, они представляют имена в nonamespace.

Таким образом, у вашего типа есть имя (в нотации XPath 3.0) Q{http://myns.com}playerInfo, но атрибут type расширяется до Q{}playerInfo.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...