Bonjour à tous,
Dans le but de valider des documents XML, j'aurai voulu savoir si il était possible de faire une référence sur une valeur d'un attribut.
Concrètement, j'ai des états avec une valeur numérique dans l'attribut ID. Dans ces états, il y a des fils qui ont pour but d'indiquer une transition vers un autre état. J'aimerai pouvoir mettre ici une référence pour être sûr que l'ID indiqué dans le fils correspond bien à un ID existant dans un state.
Comme ça, si un ID indiqué n'est pas présent dans le document XML, alors le document n'est pas validé.
Voici mon document XSD :
J'aimerai donc que la valeur de la balise NEXTSTATE fasse référence à la valeur de l'attribut id de STATE.
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 xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" jxb:version="2.0"> <xs:element name="scxml"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="state"> <xs:complexType> <xs:choice maxOccurs="1"> <xs:element name="nextstate" type="xs:nonNegativeInteger"/> </xs:sequence> </xs:choice> <xs:attribute name="id" use="required" type="xs:nonNegativeInteger"/> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="version" type="xs:string" use="optional"/> </xs:complexType> <xs:unique name="uniqueStateID"> <xs:selector xpath="./state"/> <xs:field xpath="@id"/> </xs:unique> </xs:element> </xs:schema>
Exemple de document valide :
Exemple de document non-valide :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <sxml version="1.0"> <state id="1"> <nextstate>5</nextstate> </state> <state id="5" /> </scxml>
Est-ce possible ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <sxml version="1.0"> <state id="1"> <nextstate>5</nextstate> </state> </scxml>
Merci de vos réponses
Partager