unicité d'élément par rapport à l'élément parent
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 :
Code:
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> |
Et voici le XSD que j'ai écrit :
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 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> |
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.
Donc comme faire (si c'est possible) ?
Merci d'avance :).