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] utilisation de key et keyref


Sujet :

Valider XML

  1. #1
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut [XSD] utilisation de key et keyref
    Bonjour,

    J'ai un problème pour utiliser une clé et pour la référencer dans un schéma xsd.

    Le schéma est le suivant:

    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
     
    <?xml version="1.0" encoding="utf-8" ?>
    <!-- Created with Liquid XML Studio 1.0.8.0 (http://www.liquid-technologies.com) -->
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:element name="query">
        <xs:complexType>
          <xs:sequence>
            <xs:element minOccurs="1" maxOccurs="1" name="tables">
              <xs:complexType>
                <xs:sequence>
                  <xs:element minOccurs="1" maxOccurs="unbounded" name="table">
                    <xs:complexType>
                      <xs:attribute name="name" type="xs:string" use="required" />
                    </xs:complexType>
                    <xs:key name="tableKey">
                      <xs:selector xpath="table" />
                      <xs:field xpath="@name" />
                    </xs:key>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <xs:element minOccurs="1" maxOccurs="1" name="columns">
              <xs:complexType>
                <xs:sequence>
                  <xs:element minOccurs="1" maxOccurs="unbounded" name="column">
                    <xs:complexType>
                      <xs:attribute name="name" type="xs:string" use="required" />
                      <xs:attribute name="ref-table" type="xs:string" use="required" />
                    </xs:complexType>
                    <xs:keyref name="tableKeyRef" refer="tableKey">
                      <xs:selector xpath="table" />
                      <xs:field xpath="@name" />
                    </xs:keyref>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:schema>
    Et un fichier xml valide serait le suivant:

    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <query xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="query.xsd">
     
    	<tables>
    		<table name="table1" />
    		<table name="table2" />		
    	</tables>
     
     
    	<columns>
    		<column name="col1" ref-table="table1" />
    		<column name="col1" ref-table="table2" />
    	</columns>
     
    </query>
    En gros l'idée c'est que l'attribut ref-table désigne a quelle table appartient la colonne. Mon problème c'est que quand je tente de valider le xml, j'ai une erreur : "the keyref 'column' cannot find the referred or unique in scope".

    Je pense que c'est au niveau de la clé que ca chie parce que si je mets deux clés avec le même nom, je n'ai pas d'erreur...

    Merci d'avance pour toute aide.

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    il y a un problème de placement de tes contraintes, et les chemins XPath ne sont pas bons. Keyref doit référencer une clé déclarée dans le même élément ou dans un de ses descendants.

    En bref :
    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
    <xs:element name="query">
        <xs:complexType> 
          ...
            <xs:element name="tables">
                <xs:complexType>
                    ...
                 </xs:complexType>
                 <xs:key name="tableKey">
                   <xs:selector xpath="table" />
                   <xs:field xpath="@name" />
                 </xs:key>
           </xs:element>
           ...
        </xs:complexType>
        <xs:keyref name="tableKeyRef" refer="tableKey">
             <xs:selector xpath="columns/column" />
             <xs:field xpath="@ref-table" />
        </xs:keyref>      
     
    </xs:element>
    tableKey pourrait également être déclaré dans <query> comme tableKeyRef, mais il est généralement préférable de déclarer la clé dans l'élément parent de l'élément indexé.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  3. #3
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Ok ca marche impec, merci a toi.

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

Discussions similaires

  1. utilisation Foreign keys
    Par The_Big_Lebowski dans le forum Requêtes
    Réponses: 6
    Dernier message: 06/10/2009, 22h53
  2. utilisation de key
    Par zekabyle dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 04/03/2009, 16h07
  3. [DEBUTANT] Utilisation UNIQUE KEY, INDEX,
    Par nounetmasque dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 26/07/2007, 17h07
  4. [XSD] Utiliser plusieurs schémas pour un XML
    Par baygz dans le forum Valider
    Réponses: 1
    Dernier message: 31/07/2006, 16h03
  5. [XSD] Utilisation de groupes de balises xhtml
    Par Kehel dans le forum Valider
    Réponses: 7
    Dernier message: 30/01/2004, 09h55

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