[XML Schema] Assigner des attributs avec contrainte
Bonjour,
Je suis en train de rédiger un schema XSD pour un fichier .XML.
Je souhaiterais ajouter une contrainte pour ne pouvoir n'assigner des attributs que si un autre a une valeur particulière, ou si ce n'est pas possible, au moins ne pas pouvoir assigner certains attributs si d'autres le sont déjà.
Voici le bout de code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| <xs:element name="activity">
<xs:complexType>
<xs:sequence minOccurs="0">
<!-- <xs:element ref="startDate" minOccurs="0"/>
<xs:element ref="endDate" minOccurs="0"/> -->
<xs:element ref="activity" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="account" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="required"/>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="start" type="xs:string" use="required"/>
<xs:attribute name="end" type="xs:string" use="required"/>
<xs:attribute name="type" use="required">
<xs:simpleType>
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="Root"/>
<xs:enumeration value="Resource"/>
<xs:enumeration value="Training"/>
<xs:enumeration value="Project"/>
<xs:enumeration value="Presales"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<!-- Attributes for a task -->
<xs:attribute name="comment" type="xs:string"/>
<xs:attribute name="probability" type="xs:int"/>
<xs:attribute name="duration" type="xs:int"/>
<!-- Attributes for a resource -->
<xs:attribute name="role" type="xs:string"/>
</xs:complexType>
</xs:element> |
Dans l'idéal, je souhaiterais que l'on ne puisse assigner ces attributs :
Code:
1 2 3
| <xs:attribute name="comment" type="xs:string"/>
<xs:attribute name="probability" type="xs:int"/>
<xs:attribute name="duration" type="xs:int"/> |
à l'élément "activity" que si l'attribut "type" a la valeur "Training", "Presales" ou "Project", et cet attribut :
Code:
<xs:attribute name="role" type="xs:string"/>
à l'élément "activity" que si l'attribut "type" a la valeur "Resource".
Si ce n'est pas possible, je souhaiterais que si on assigne les trois attributs ci-dessus, on ne puisse pas assigner le dernier, et vice versa.
Pour la seconde solution, j'ai pensé à choice, mais je ne peux pas l'insérer à cet endroit. Je me demande si ce n'est pas à cause de la séquence qui a déjà été déclarée plus haut.
Je suis débutant en XML Schema mais j'ai pourtant besoin d'implémenter ces règles relativement complexes.
Merci de votre aide,
Rémi.