Accueil
 chercher             Plan du site             Info (English version) 
L'histoire de XML s'écrit en ce moment même. XMLfr vous aide à la suivre et à en dégager les tendances.Les listes de discussions XMLfr sont à votre disposition pour réagir sur nos articles ou simplement poser une question.Si vous ètes passionnée(e) par XML, pourquoi ne pas en faire votre métier ?XMLfr n'est heureusement pas le seul site où l'on parle de XML. Découvrez les autres grâce à XMLfr et à l'ODP.Les partenaires grâce auxquels XMLfr peut se développer.Pour tout savoir sur XMLfr.XMLfr sans fil, c'est possible !Pour ceux qui veulent vraiment en savoir plus sur XML.L'index du site.
 Si vous vous posez une question, vous n'êtes peut-être pas le premier...Les traductions en français des bibles XML.Ces articles sont des références dans leur domaine.Tout ce qu'il faut savoir pour démarrer sur un sujet XML...


Schémas conditionnels

Comment peut-on définir avec W3C XML Schema des contenus qui dépendent d'une valeur (pays ou nationalité par exemple)?

Eric van der Vlist, Dyomedea (vdv@dyomedea.com).
vendredi 13 septembre 2002

J'aurais voulu savoir comment je pourrais valider un document XML dont le contenu varie suivant la valeur d'un attribut comme par exemple:

<enregistrement contenu="type1">
 <a />
</enregistrement>
<enregistrement contenu="type2">
 <b /> 
</enregistrement>

Où le contenu autorisé dans l'élément "enregistrement" dépend de la valeur de l'attribut "contenu".

Si vous tenez au nom de l'attribut "contenu", W3C XML Schema seul ne peut pas grand chose pour vous et vous devrez accepter que votre contenu soit le contenu "type1" ou "type2" quelque soit la valeur de l'attribut "contenu" en écrivant un schéma qui accepte toutes les combinaisons, par exemple:

<xs:element name="enregistrement">
 <xs:complexType>
  <xs:choice>
  <xs:sequence>
   <xs:element name="a" type="..."/>
  </xs:sequence><xs:sequence>
   <xs:element name="b" type="..."/>
  </xs:sequence></xs:choice>
  <xs:attribute name="contenu">
   <xs:simpleType> 
    <xs:restriction base="xs:token">
     <xs:enumeration value="type1"/>
     <xs:enumeration value="type2"/>
    </xs:restriction>
   </xs:simpleType>
  </xs:attribute>
 </xs:complexType>
</xs:element>

A ce schéma de base, vous pouvez éventuellement ajouter des règles XPath en utilisant le langage de schémas Schematron si vos applications le supportent.

Si par contre vous pouvez changer le nom de l'attribut "contenu" et utiliser à la place l'attribut "xsi:type" prévu à cet usage par W3C XML Schema, vous pouvez simplement déclarer votre élément "enregistrement" comme acceptant un type abstrait dont seront dérivés vos contenus possibles.

<xs:complexType name="generique" abstract="true">
 <xs:sequence> 
  <xs:element name="a" type="..." minOccurs="0"/>
  <xs:element name="b" type="..." minOccurs="0"/>
 </xs:sequence> 
</xs:complexType>
<xs:complexType name="type1">
 <xs:complexContent>
  <xs:restriction base="generique">
   <xs:sequence> 
    <xs:element name="a" type="..."/>
   </xs:sequence> 
  </xs:restriction>
 </xs:complexContent>
</xs:complexType>
<xs:complexType name="type2">
 <xs:complexContent>
  <xs:restriction base="generique">
   <xs:sequence> 
    <xs:element name="b" type="..."/>
   </xs:sequence> 
  </xs:restriction>
 </xs:complexContent>
</xs:complexType>
<xs:element name="enregistrement" type="generique"/>

Il ne reste plus ensuite qu'à déclarer dans vos éléments quel est le type utilisé:

<enregistrement xsi:type="type1">
 <a/>
</enregistrement>
<enregistrement xsi:type="type2">
 <b/>
</enregistrement>
Pascal EMMA: "[xml-tech] Schéma conditionnel"Eric van der Vlist: "[xml-tech] Re: Schéma conditionnel"Eric van der Vlist: "[xml-tech] Re: Schéma conditionnel"Pascal EMMA: "[xml-tech] Re: Schéma conditionnel"Charles Nepote: "[xml-tech] XML Schéma : choix d'un groupe d'élément déterminé par la valeur d'un attribut"Eric van der Vlist: "[xml-tech] Re: XML Schéma : choix d'un groupe d'élément déterminé par la valeur d'un attribut"LAMY Olivier: "[xml-tech] Utilisation de XPath dans les schémas"Eric van der Vlist: "[xml-tech] Re: Utilisation de XPath dans les schémas"

Copyright 2002, Eric van der Vlist.


 

Mots clés.



L'histoire de XML s'écrit en ce moment même. XMLfr vous aide à la suivre et à en dégager les tendances.


Les documents publiés sur ce site le sont sous licence "Open Content"
Conception graphique
  l.henriot  

Conception, réalisation et hébergement
Questions ou commentaires
  redacteurs@xmlfr.org