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 :
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 :
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 :
<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.
Partager