Prenons un exemple
<root>
<parent>
<child_one>Y</child_one>
<child_two>12</child_two>
</parent>
</root>
et concevoir un xsd pour cela :
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="parent">
<xs:complexType>
<xs:sequence>
<xs:element name="child_one" type="xs:string" />
<xs:element name="child_two" type="xs:int" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Ce qui n'est pas possible avec XSD : je voudrais l'écrire en premier car la liste est très petite
1) Vous ne pouvez pas valider un nœud/attribut en utilisant la valeur d'un autre nœud/attribut.
2) Il s'agit d'une restriction : Un élément défini dans un fichier XSD doit être défini avec un seul type de données. Dans l'exemple ci-dessus, pour <child_two>
apparaissant dans un autre <parent>
le type de données ne peut être défini autrement que par int.
3) Vous ne pouvez pas ignorer la validation des éléments et des attributs, c'est-à-dire que si un élément/attribut apparaît dans le XML, il doit être bien défini dans le XSD correspondant. Bien que l'utilisation de <xsd:any>
le permet, mais il a ses propres règles. Le respect de ces règles conduit à l'erreur de validation. J'avais essayé une approche similaire, et je n'ai certainement pas réussi, voici les questions-réponses
ce qui est possible avec XSD :
1) Vous pouvez tester la hiérarchie correcte des nœuds XML. Dans l'exemple ci-dessus, child_two ne peut pas être l'enfant immédiat de Root, mais il est l'enfant du tag "parent" qui est à son tour un enfant du noeud "Root", il y a une hiérarchie ].
2) Vous pouvez définir le type de données des valeurs des noeuds. Dans l'exemple ci-dessus, child_two ne peut pas avoir d'autres données que le nombre.
3) Vous pouvez également définir des types de données personnalisés, [par exemple, pour le nœud <month>
la donnée possible peut être l'un des 12 mois il faut donc définir tous les 12 mois dans un nouveau type de données en écrivant tous les noms des 12 mois comme des valeurs d'énumération la validation affiche une erreur si le XML d'entrée contient une autre valeur que ces 12 valeurs . ]
4) Vous pouvez mettre la restriction sur l'occurrence des éléments, en utilisant minOccurs et maxOccurs, les valeurs par défaut sont 1 et 1.
... et bien d'autres encore ...