Выбор атрибутов в экземпляре XML для непосредственно определенных атрибутов или ссылок - PullRequest
6 голосов
/ 11 октября 2010

Я ищу вариант выбора атрибута для элемента, на который можно напрямую установить или на который можно ссылаться.

это то, что я имею в виду:

<root>    
<element>
   <attribute ref="shortname" />
</element>
<element>
   <attribute name="shortname" isEditable="true" anotherattrib="0815" />
</element>
</root>

Поскольку это не будет проблемой без XML-схемы, определение этого атрибута довольно сложно, если атрибут "name" элементаатрибут обязателен.

схема может выглядеть следующим образом

<xs:element name="attribute">
<xs:complexType>
<xs:attribute name="ref" use="required" />
<xs:attribute name="name" use="required" />
</xs:complexType>
</xs:element>

Есть ли возможность сделать выбор (похожий на xs: выбор для элементов) между атрибутами?Например, если есть атрибут из атрибута элемента с именем ref, другие атрибуты не допускаются.если нет, атрибут «имя» должен быть установлен ...

Эта проблема звучит чисто виртуально и академично, но я был бы рад, если бы было решение или если я совершенно не согласен с тем, что имеюразум:)

Заранее благодарю за любую помощь!

Дэйв

Ответы [ 2 ]

1 голос
/ 12 октября 2010

Мне кажется, что невозможно определить XML-схему так, как вы хотите.Либо вы должны определить два разных имени элемента , например <attribute> и <attributeRef> с различным набором обязательных атрибутов, либо вы не должны определять ни атрибут "ref", ни "name" как "required".

XML-схема - не единственный способ проверки данных, и вы не можете определить некоторые роли между значениями атрибута в отношении XML-схемы.Поэтому, если вам нужно проверить более сложные отношения в XML-документе, вы можете использовать XPath и XSLT для этого (см. Schematron , Сравнение языка XML-схем , Beyond W3C XML-схема, Улучшение проверки документов XML с помощью Schematron , Расширенная проверка XML и Использование XSL в качестве языка проверки ).

0 голосов
/ 14 ноября 2013

Этого можно добиться с помощью утверждений XML-схемы 1.1:

<xsd:complexType name="AttributeType">
    <xsd:sequence />
    <xsd:attribute name="ref" type="xsd:string" />
    <xsd:attribute name="name" type="xsd:string" />
    <xsd:assert test="count(@ref | @name) = 1" />
</xsd:complexType>

Элемент assert обеспечивает использование только одного из ref и name.

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