[Debutant] pbl de validation d'un élément xs:unique
Bonjour à tous,
Je débute en xml et j'ai un problème pour valider une contrainte d'unicité.
Voici mon schéma "test.xsd" (très simplifié, mais autonome). La racine est un élément "Syntax" qui contient des "Command" (ici limitées à un "Code" et un "Verb"). Je désire assurer que le "Code" soit unique.
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
| <?xml version="1.0" encoding="utf-8" ?>
<xs:schema targetNamespace="http://www.lorsim.be/lscli" elementFormDefault="qualified" xmlns="http://www.lorsim.be/lscli" xmlns:lscli="http://www.lorsim.be/lscli" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:complexType name="Command">
<xs:sequence>
<xs:element name="Code" type="xs:string" />
<xs:element name="Verb" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="Syntax">
<xs:complexType>
<xs:sequence>
<xs:element name="Name" type="xs:string" />
<xs:element name="Command" type="Command" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:unique name="UniqueCommandCode">
<xs:selector xpath="Command" />
<xs:field xpath="Code" />
</xs:unique>
</xs:element>
</xs:schema> |
Et voici un exemple "test.xml", volontairement erroné. La dernière commande a le même "Code" que la première (et le même "Verb" que la seconde, d'ailleurs).
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <?xml version="1.0" encoding="utf-8" ?>
<Syntax xmlns="http://www.lorsim.be/lscli">
<Name>ms1</Name>
<Command>
<Code>HELP</Code>
<Verb>Aide</Verb>
</Command>
<Command>
<Code>QUIT</Code>
<Verb>Quitter</Verb>
</Command>
<Command>
<Code>HELP</Code>
<Verb>Quitter</Verb>
</Command>
</Syntax> |
Si j'essaye de valider tout cela avec le validateur http://apps.gotdotnet.com/xmltools/xsdvalidator/, il me dit que tout est bon. J'ai essayé avec des tas d'xpath différents, mais sans réussir à obtenir la détection de l'erreur de non-unicité du "Code".
Dans la foulée, j'ai essayé de faire mon propre validateur avec msxml en local sur mon pc (juste pour voir) . En gros, j'utilise le même formulaire qu'eux, tandis que mon bouton "valider" appelle un JavaScript qui fait fondamentalement ceci (XmlFile étant une variable dans laquelle j'ai récupéré le chemin vers "test.xml") :
Code:
1 2 3 4 5
| var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load(XmlFile)
if ( xmlDoc.parseError.errorCode != 0 )
... |
A ce stade, ça ne marche pas mieux, mais il est vrai que je n'ai pas trouvé comment lui indiquer où se trouve le fichier "test.xsd" correspondant.
Voici donc les deux questions que je pose :
- Est-ce que c'est leur validateur qui ne marche pas (j'en doute) ou alors qu'est-ce que je loupe ?
- Comment faire pour que mon objet xmlDoc utilise le schéma "test.xsd" pour valider "test.xml" ? J'ai bien quelques éléments de réponse ailleurs sur ce site (http://www.developpez.net/forums/vie...140877#2140877) sauf qu'on y utilise un objet DocumentBuilderFactory en Java, alors que j'aurai voulu continuer avec le parseur msxml et en javascript. Est-ce possible ?
Pardon d'avoir été aussi long, j'essayerai de faire mieux la prochaine fois :oops: !!!
Et merci d'avance.