XSD - ограничение значений атрибута другим значением атрибута элемента - PullRequest
5 голосов
/ 03 марта 2010

У меня есть следующий XML:

<Content name="contentName1">
    <!-- Some sub elements here -->
</Content>

<Sequence Name="sequenceName1">
    <Content name="contentName1" />
    <!-- Some sub elements here -->
</Sequence>

со следующим XSD

<xs:element maxOccurs="unbounded" name="Content">
    <xs:complexType>
        <xs:attribute name="Name" type="xs:string" use="required" />
        <!-- other definitions here -->
     </xs:complexType>
</xs:element>

<xs:element maxOccurs="unbounded" name="Sequence">
    <xs:complexType>
        <xs:sequence>
            <xs:element maxOccurs="unbounded" name="Content">
                <xs:complexType>
                    <xs:attribute name="ContentName" type="xs:string" use="required" />
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="Name" type="xs:string" use="required" />
    </xs:complexType>
</xs:element>

В XSD, как я могу указать атрибуту ContentName элементов Content в Sequence принимать только значения, объявленные в ContentName элементов Content?

например: с указанным выше XML-кодом в Content of sequence будет приниматься только contentName1.

Ответы [ 2 ]

2 голосов
/ 19 сентября 2010

Определения ограничения идентичности используются для обеспечения связи между уникальным, первичным ключом и внешним ключом. сначала необходимо определить ключевой элемент для элемента содержимого, а затем использовать keyref во внутреннем элементе содержимого для средства проверки схемы, чтобы обеспечить выполнение упомянутого вами условия.
См. ссылку ниже, в которой также есть несколько примеров, а также учебник в xfront для xsd охватывает несколько примеров -

http://www.w3.org/TR/xmlschema11-1/#Identity-constraint_Definition_details
http://www.xfront.com/files/xml-schema.html

0 голосов
/ 18 октября 2014

Я не очень хорош в xsd, но, возможно, вы измените <xs:attribute name="Name" type="xs:string" use="required" /> на <xs:attribute name="Name" type="contentNames" use="required" />

и создайте

 <xs:simpleType name="contentNames" >
    <xs:restriction base="xs:token">
      <xs:enumeration value="contentName1"/>
      <xs:enumeration value="contentName2"/>

      <xs:pattern value="contentName[1234567890][1234567890]"/> 
      <xs:enumeration value="contentName1"/>
    </xs:restriction>
  </xs:simpleType>

для

<xs:pattern value="contentName[1234567890][1234567890]"/>

contentName1-99, но не знаете, можете ли вы использовать <xs:enumeration/>, вы можете попробовать

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