Existe-t-il un moyen de spécifier que l'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?
Non, je ne pense pas que vous puissiez le faire avec des attributs. Vous pouvez envelopper deux <xs:element>
dans une <xs:choice>
- mais pour les attributs, il n'y a pas de construction équivalente, je le crains.
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>
Marc a tout à fait raison ... Vous ne pouvez pas avoir d'éléments enfants xs: attribute 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 s'excluant mutuellement, alors ce sont logiquement deux éléments différents.
Une solution de contournement a été présentée par Jeni Tennison ici .
Vous devriez regarder ces pages sur le wiki du W3C: Implication d'attribut simple et Muttex d'attribut