[XML Schema] Ajout d'attributs

Fermé
Gantark Messages postés 3 Date d'inscription mercredi 16 août 2006 Statut Membre Dernière intervention 7 juillet 2008 - 7 juil. 2008 à 11:14
ftiercel Messages postés 119 Date d'inscription dimanche 24 septembre 2006 Statut Membre Dernière intervention 8 février 2014 - 2 août 2009 à 10:45
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 :

<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 :
   <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.
A voir également:

1 réponse

ftiercel Messages postés 119 Date d'inscription dimanche 24 septembre 2006 Statut Membre Dernière intervention 8 février 2014 61
2 août 2009 à 10:45
À ma connaissance, on ne peut pas fixer de contraintes particulières à des attributs ou des sous-éléments selon la valeur que prend un autre attribut. À part le choice, je n'ai rien d'autre à te proposer. Si tu as besoin d'aide, il y a ce tutoriel :

https://fr.wikiversity.org/wiki/Extensible_Markup_Language/XML_Schema
0