69 votes

XSD - un des 2 attributs est requis?

Est-il possible de spécifier qu'un des 2 attributs est requis dans XSD?

Par exemple, j'ai une définition comme celle-ci.

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

Je veux pouvoir définir qu'au moins un de ces éléments est requis. Est-ce possible?

47voto

marc_s Points 321990

Non, je ne pense pas que vous puissiez faire cela avec des attributs. Vous pouvez envelopper deux <xs: element> dans un <xs: choice> - mais pour les attributs, il n'y a pas de construction équivalente, je le crains.

Marc

30voto

user1442305 Points 1

XSD 1.1 vous permettra de le faire en utilisant des assertions.

 <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>
 

9voto

Cerebrus Points 18045

Marc a tout à fait raison ... Vous ne pouvez pas avoir d'éléments enfants xs: attribut dans un élément parent xs: choice dans XSD.

La logique semble être que si deux instances d'un élément ont un ensemble d'attributs mutuellement exclusifs, il s'agit logiquement de deux éléments différents.

Une solution de contournement pour ce qui a été présenté par Jeni Tennison ici .

5voto

Ondřej Doněk Points 93

Vous devriez regarder ces pages sur le wiki du W3C: Implication d'attribut simple et Attribut muttex

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X