IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Valider XML Discussion :

unicité d'élément par rapport à l'élément parent [XSD]


Sujet :

Valider XML

  1. #1
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut 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 : 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>
    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
    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 .
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Pourque la clé PK-properties acquière une portée limitée à chacune de bundle, vous la mettez justement dedans la définition de l'élément lui-même.
    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
    40
    41
    42
    43
    44
    45
    46
    <?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>
                <!-- remis ici avec les xpaths modifiés -->
                <xs:key name="PK-properties">
                    <xs:selector xpath="r:property"/>
                    <xs:field    xpath="@id"/>
                </xs:key>
            </xs:complexType>
     
            <xs:key name="PK-bundles">
                <xs:selector xpath="./r:bundle"/>
                <xs:field    xpath="@locale"/>
            </xs:key>
            <!-- enlevé ça
            <xs:key name="PK-properties">
                <xs:selector xpath="./r:bundle/r:property"/>
                <xs:field    xpath="@id"/>
            </xs:key>
            -->
        </xs:element>
     
    </xs:schema>

  3. #3
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    C'était logique ^^

    Merci beaucoup
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 11/10/2013, 16h53
  2. Ordonner les éléments par rapport à une sélection ?
    Par brunoperel dans le forum Langage SQL
    Réponses: 3
    Dernier message: 22/03/2007, 13h13
  3. Coordonnées de la souris par rapport à un élément
    Par renaud26 dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 08/09/2006, 17h07
  4. [CSS]positionnement d'un élément par rapport à un autre
    Par deldin dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 13/07/2006, 12h21
  5. [HTML]Positionner un élément par rapport à un autre
    Par Samanta dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 03/03/2006, 18h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo