XSD-требуется один из 2 атрибутов?


есть ли способ указать, что один из 2 атрибутов требуется в XSD?

например, у меня есть определение такое:

<xs:attribute name="Name" type="xs:string" use="optional" />
<xs:attribute name="Id" type="xs:string" use="optional" />

Я хочу быть в состоянии определить, что по крайней мере один из них требуется. Это возможно?

5 54
xsd

5 ответов:

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

Марк

в XSD 1.1 позволит вам сделать это с помощью утверждений.

<xsd:element name="remove">
    <xsd:complexType>                        
        <xsd:attribute name="ref" use="optional"/>
        <xsd:attribute name="uri" use="optional"/>
        <xsd:assert test="(@ref and not(@uri)) or (not(@ref) and @uri)"/>            
    </xsd:complexType>
</xsd:element>

Марк совершенно прав... Вы не можете иметь дочерние элементы XS:attribute внутри родительского элемента xs:choice в XSD.

обходной путь для этого был представлен Джени Теннисон здесь.

вы должны посмотреть на эту страницу на W3C wiki: простой атрибут импликации и атрибут muttex

пример определяет элемент с именем "человек", которое должно содержать либо "работник" или "член" элемент.

<xs:element name="person">
  <xs:complexType>
    <xs:choice>
      <xs:element name="employee" type="employee"/>
      <xs:element name="member" type="member"/>
    </xs:choice>
  </xs:complexType>
</xs:element>