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.
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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>
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".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
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") :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 var xmlDoc = new ActiveXObject("Microsoft.XMLDOM") xmlDoc.async="false" xmlDoc.load(XmlFile) if ( xmlDoc.parseError.errorCode != 0 ) ...
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!!!
Et merci d'avance.
Partager