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 :

[XSD] Plusieur keyref dans un element.


Sujet :

Valider XML

  1. #1
    Membre averti Avatar de Ekinoks
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    687
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 687
    Points : 358
    Points
    358
    Par défaut [XSD] Plusieur keyref dans un element.
    Bonjours,

    J'ai un souci avec l'utilisation des xs:key et xs:keyref dans les schémas(*.xsd)

    Je n'arrive pas à trouver comment faire pour qu'un élément puisse posséder plusieurs référence de clé (xs:keyref).

    Voici un petit exemple pour illustre mon problème :
    test.xml :
    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
    <?xml version="1.0" encoding="UTF-8"?>
     
    <ecole xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="test.xsd">
        <!-- liste des profs -->
        <prof>
            <id>A</id>
            <nom>Mr A</nom>
        </prof>
        <prof>
            <id>B</id>
            <nom>Mr B</nom>
        </prof>
        <!-- liste des matieres, une matiere peu faire referance a plusieur prof -->
        <matiere>
            <nom>Francais</nom>
            <ref-prof>A</ref-prof>
            <ref-prof>B</ref-prof>
        </matiere>
    </ecole>
    test.xsd :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
     
        <xs:element name="ecole" type="TypeEcole">
            <xs:key name="id.prof">
                <xs:selector xpath="prof"></xs:selector>
                <xs:field xpath="id"></xs:field>
            </xs:key>
     
            <xs:keyref refer="id.prof" name="ref.prof">
                <xs:selector xpath="matiere"></xs:selector>
                <xs:field xpath="ref-prof"></xs:field>
            </xs:keyref>
        </xs:element>
     
        <xs:complexType name="TypeEcole">
            <xs:sequence>
                <xs:element name="prof" type="TypeProf" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="matiere" type="TypeMatiere" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
     
        <xs:complexType name="TypeProf">
            <xs:sequence>
                <xs:element name="id" type="xs:string"/>
                <xs:element name="nom" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
     
        <xs:complexType name="TypeMatiere">
            <xs:sequence>
                <xs:element name="nom" type="xs:string"/>
                <xs:element name="ref-prof" type="xs:string" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:schema>
    Le problème avec cette exemple, c'est que la validation me dit :
    SystemID: /home/ekinoks/Desktop/XML/test.xml
    Endroit: 17:31
    Description: [Xerces] cvc-identity-constraint.3: Field "./ref-prof" of identity constraint "ref.prof" matches more than one value within the scope of its selector; fields must match unique values.
    URL: http://www.w3.org/TR/xmlschema-1/#cv...ity-constraint
    Apparemment il ne veux pas que "matiere" possède plusieurs "ref-prof"

    Quelqu'un serait il pour quoi ? et comment contourner le probleme ?

    Merci pour votre aide.

  2. #2
    Membre averti Avatar de Ekinoks
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    687
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 687
    Points : 358
    Points
    358
    Par défaut
    Apres deux jour de recherche, il suffit que je pose la question sur le forum pour que je trouve quelque minute plus tard comment faire :^/

    Donc voici la correction a apporter a la xsd pour la cas ou d'autre personne ce retrouve dans le même cas que moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            <xs:keyref refer="id.prof" name="ref.prof">
                <xs:selector xpath="matiere/ref-prof"></xs:selector>
                <xs:field xpath="."></xs:field>
            </xs:keyref>

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 346
    Points : 119
    Points
    119
    Par défaut
    Merci d'avoir envoyé ta solution, c'est exactement ce que je cherchais aussi

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

Discussions similaires

  1. [XSD] Plusieurs element dans n'importe quel ordre.
    Par Ldoppea dans le forum Valider
    Réponses: 2
    Dernier message: 24/09/2010, 09h43
  2. Réponses: 5
    Dernier message: 07/06/2010, 13h12
  3. [XSD] Plusieurs element 0 à 1 fois sans ordre
    Par benkunz dans le forum Valider
    Réponses: 8
    Dernier message: 06/06/2008, 16h31
  4. Réponses: 2
    Dernier message: 14/06/2006, 08h53
  5. Réponses: 1
    Dernier message: 27/10/2005, 16h26

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