Bonjour
Désolé pour le titre qui n'est pas trop parlant, j'ai eu un peu de mal à résumer mon problème.
Alors je voudrais dans un XML pouvoir définir plusieurs "bundle" chacun identifié par un attribut "locale". Jusque là tout va bien.
Ensuite pour chaque bundle je veux pouvoir définir des "property" identifiées par un attribut "id". Seulement une clé doit être unique pour un bundle donné mais doit pouvoir être présente dans plusieurs bundle à la fois.
Voici un exemple de ce que je veux :
Et voici le XSD que j'ai écrit :
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 <?xml version="1.0" encoding="UTF-8"?> <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="myNamespace" xsi:schemaLocation="myNamespace ./temp.xsd"> <bundle locale=""> <property id="id1">Value 1</property> <!-- <property id="id1">Value one</property> invalide car id1 existe déjà--> <property id="id2">Value 2</property> </bundle> <bundle locale="fr"> <property id="id1">Valeur 1</property> <property id="id2">Valeur 2</property> </bundle> </root>
Le problème est que la clé vérifiant l'unicité des propriétés ne tient pas compte des différents bundle et ne veux pas de la même property dans différents bundle.
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 <?xml version="1.0" encoding="UTF-8"?> <xs:schema targetNamespace="myNamespace" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:r="myNamespace" elementFormDefault="qualified"> <xs:element name="root"> <xs:complexType> <xs:sequence> <xs:element name="bundle" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="property" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="id" type="xs:normalizedString" use="required" /> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="locale" type="xs:string" default="" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <xs:key name="PK-bundles"> <xs:selector xpath="./r:bundle"/> <xs:field xpath="@locale"/> </xs:key> <xs:key name="PK-properties"> <xs:selector xpath="./r:bundle/r:property"/> <xs:field xpath="@id"/> </xs:key> </xs:element> </xs:schema>
Donc comme faire (si c'est possible) ?
Merci d'avance .
Partager