XSD: атрибуты для всего документа - PullRequest
0 голосов
/ 30 марта 2011

Эй, у меня возникли трудности с обращением к определенному в документе атрибуту.Я использую атрибут внутри элемента, используя атрибут ref так, как я считаю, он должен работать.Но когда я пытаюсь проверить свой тестовый XML-файл по нему, я просто получаю сообщение об ошибке, что атрибут не был определен.

Если я заменю ref -атрибут встроенным объявлением или даже attributeGroup, который содержит только определение атрибута, тогда он волшебным образом работает.Автозаполнение Visual Studio предлагает мне снова импортировать пространство имен с некоторым префиксом и хочет использовать этот префикс в атрибуте, хотя само пространство имен уже импортировано как пространство имен по умолчанию (и используется только одно).

Я в значительной степени свел и мои XML, и свои XSD-файлы, так что вот что осталось:

<?xml version="1.0" encoding="utf-8"?>
<foo xmlns="http://example.com/test" attr="xy" />
<!-- Visual Studio autocompletes to this, which works too:
<foo xmlns="http://example.com/test" a:attr="xy" xmlns:a="http://example.com/test" />
-->

И вот схема:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns="http://example.com/test" targetNamespace="http://example.com/test"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

  <xs:attribute name="attr" type="xs:string" />

  <xs:attributeGroup name="attrGroup">
    <xs:attribute name="attr" type="xs:string" />
  </xs:attributeGroup>

  <xs:element name="foo">
    <xs:complexType>
      <xs:attribute ref="attr" />
      <!-- These two examples work:
      <xs:attributeGroup ref="attrGroup" />
      <xs:attribute name="attr" type="xs:string" />
      -->
    </xs:complexType>
  </xs:element>
</xs:schema>

В чем причинатакое поведение и что я могу сделать, чтобы это исправить?

1 Ответ

3 голосов
/ 30 марта 2011

ref="attr" - это ссылка на объявление атрибута верхнего уровня с name="attr", которое объявляет атрибут в целевом пространстве имен документа схемы.Обычно это не то, что вам нужно, поэтому объявления атрибутов верхнего уровня встречаются редко.Лучше обратиться к группе атрибутов, которая содержит локальный атрибут с именем "attr", который (поскольку attributeFormDefault неявно неквалифицирован) не находится в пространстве имен.

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