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

XML/XSL et SOAP Discussion :

Problème avec key/keyRef lors de validation d'un fichier xsd


Sujet :

XML/XSL et SOAP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Mars 2012
    Messages : 6
    Par défaut Problème avec key/keyRef lors de validation d'un fichier xsd
    Bonjour,
    j'ai un souci dans le contenu xsd suivant:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <xsd:schema xmlnssd="http://www.w3.org/2001/XMLSchema"
    targetNamespace="targetNamespaceURI"
    xmlns="targetNamespaceURI" elementFormDefault="qualified">
    <xsd:element name="root">
    <xsd:complexType>
    <xsd:sequence>
    <xsd:element name="professor">
    <xsd:complexType>
    <xsd:sequence>
    <xsd:element name="professorId" type="xsd:integer" minOccurs="1" maxOccurs="1"/>
    <xsd:element name="nomProfessor" type="xsd:string"/>
    <xsd:element name="teaches" type="xsd:string" maxOccurs="unbounded"/>
    </xsd:sequence>
    </xsd:complexType>
    </xsd:element>
    <xsd:element name="student">
    <xsd:complexType>
    <xsd:sequence>
    <xsd:element name="studentId" type="xsd:integer" minOccurs="1" maxOccurs="1"/>
    <xsd:element name="nomStudent" type="xsd:string"/>
    <xsd:element name="teachedby" type="xsd:string" maxOccurs="unbounded"/>
    </xsd:sequence>
    </xsd:complexType>
    </xsd:element>
    </xsd:sequence>
    </xsd:complexType>
    </xsd:element>

    <xsd:key name="professorK">
    <xsd:selector xpath="./professor"/>
    <xsd:field xpath="@professorId"/>
    </xsd:key>

    <xsd:key name="studentK">
    <xsd:selector xpath="./student"/>
    <xsd:field xpath="@studentId"/>
    </xsd:key>

    <xsd:keyref name="professorRefstudent " refer="studentK">
    <xsd:selector xpath=".// professor "/>
    <xsd:field xpath="teaches"/>
    </xsd:keyref>

    <xsd:keyref name="studentRefprofessor " refer="professorK">
    <xsd:selector xpath=".// student "/>
    <xsd:field xpath="teachedby"/>
    </xsd:keyref>
    </xsd:schema>

    quand j'essaye de valider ce fichier, j'ai le message d'erreur suivant
    element 'key' is invalid misplaced or occurs too often et element 'keyref' is invalid misplaced or occurs too often

    voici mon code xml
    <professor>
    <professorId>1</professorId>
    <nomProfessor>Alaoui</nomProfessor>
    <teaches>3</teaches>
    </professor>

    <student>
    <studentId>3</studentId>
    <nomStudent>oussama</nomStudent>
    <teachedby>1</teachedby>
    </student>

    </xml>
    je serais très reconnaissant si vous pouviez m'aidez.
    Merci.

  2. #2
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Cela semble simple mais des erreurs, il y'en a pleines.

    [0] Les éléments key et keyref ne peuvent apparaître et prennent un sens que comme enfant d'une xsd:element et convenablement dans le élément emboîtant les éléments en questions. Ici, il faut les placer dans xsd:element de root.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xsd:element name="root">
        <!-- etc etc -->
        <!-- xsd:key, xsd:keyref sont placés ici -->
    </xsd:element>
    [1] Les clés sont mal conçues en deux sens.
    [1.1] Ce ne sont pas d'attributs, professionId et studentId, ils sont des enfants directed de root. Il faut éliminer le signe @.
    [1.2] Et puis, là c'est plus difficile à comprendre. Les xpaths des selector et field ne connaient pas le namespace par défaut; il faut les prefixés et pour ce but il faut rajouter la déclaration pour ça dans la racine xsd:schema.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        targetNamespace="targetNamespaceURI"
        xmlns="targetNamespaceURI" 
        elementFormDefault="qualified"
        xmlns:tns="targetNamespaceURI">
    Après, les clés et les ref sont écrits comme ça, éliminé en plus les points et / inutiles.
    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
    <xsd:key name="professorK">
        <xsd:selector xpath="tns:professor"/>
        <xsd:field xpath="tns:professorId"/>
    </xsd:key>
     
    <xsd:key name="studentK">
        <xsd:selector xpath="tns:student"/>
        <xsd:field xpath="tns:studentId"/>
    </xsd:key>
     
    <xsd:keyref name="professorRefstudent " refer="studentK">
    <xsd:selector xpath="tns:professor "/>
    <xsd:field xpath="tns:teaches"/>
    </xsd:keyref>
     
    <xsd:keyref name="studentRefprofessor " refer="professorK">
    <xsd:selector xpath="tns:student "/>
    <xsd:field xpath="tns:teachedby"/>
    </xsd:keyref>
    [2] Et puis, encore une chose difficile. Il faut les types de clé et clé ref s'accordent les unes les autres. xsd:integer ne peut pas s'accorder avec xsd:string parce qu'ils ne se dérivent pas. Dans le cas-ci, il vaut mieux les accorder par xsd:integer. Pour ce fait, il faut s'écrire les teaches et teachedby.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsd:element name="teaches" type="xsd:integer" maxOccurs="unbounded"/>
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsd:element name="teachedby" type="xsd:integer" maxOccurs="unbounded"/>
    [3] Et puis les cardinalité de professor et student. Comme s'écrits ils ne peuvent que s'apparaître une fois ce qui est une peu contre-productif. Je pense vous devriez s'entendre par multiple au lieu qu'une.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsd:element name="professor" maxOccurs="unbounded">
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsd:element name="student" maxOccurs="unbounded">
    Voilà et il doit commencer à fonctionner.

Discussions similaires

  1. Réponses: 0
    Dernier message: 25/01/2008, 09h36
  2. Flash 8: Problème avec Key.addListener
    Par ErnestLamoureuxInc dans le forum Intégration
    Réponses: 5
    Dernier message: 10/07/2007, 22h19
  3. Réponses: 3
    Dernier message: 01/05/2007, 16h07
  4. Problème avec Key.DOWN
    Par Nymphon dans le forum Flash
    Réponses: 4
    Dernier message: 23/03/2007, 15h47
  5. Réponses: 1
    Dernier message: 09/08/2006, 17h05

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