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, Cle primaire... [FAQ]


Sujet :

Valider XML

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 29
    Points : 23
    Points
    23
    Par défaut XSD, Cle primaire...
    Bonjour a tous,

    j aurais voulu savoir si on pouvais indiquer dans une xsd qu'un element soit une cle primaire:
    exemple si mon fichier XML correspond a des enregistrements ( <R> ) avec les champs ( <pK>, <C1>,...<Cn> ):
    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
     
    <Table>
      <R>
        <PK>0</PK>
        <C1>....</C1>
      </R>
      <R>
        <PK>1</PK>
        <C1>....</C1>
      </R>
      <R>
        <PK>2</PK>
        <C1>....</C1>
      </R>
    ...
    </Table>
    Y a t il moyen d indiquer dans le XSD associe qu'il n'y a pas deux fois la meme valeur dans un <PK>?

    Merci

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2002
    Messages : 35
    Points : 38
    Points
    38
    Par défaut
    Bonjour goupil,

    Une petite piste :
    Dans un DTD, tu peux spécifier qu'un attribut est de type ID ce qui veut dire que dans ton document, tu ne peux avoir deux éléments ayant la même valeur d'attribut.
    Tu devrais alors modifier ton document XML comme ceci par exemple :
    (Ta PK devient un attribut de l'élément R>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <Table> 
      <R pk="0"> 
        <C1>....</C1> 
      </R> 
      <R pk="1"> 
        <C1>....</C1> 
      </R> 
      <R pk="2"> 
        <C1>....</C1> 
      </R> 
    ... 
    </Table>
    Il faut maintenant trouver la traduction en Xml Schema de la notation DTD
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <!ELEMENT R>
    <!ATTLIST R
       pk ID #REQUIRED>
    Je ne suis pas assez calé en XML Schema pour t'aider... Mais tu as une piste de recherche...
    Bonne chance !

    Michel

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 29
    Points : 23
    Points
    23
    Par défaut
    Merci Michel de ta reponse.

    Dans mon cas ceci va etre difficile a mettre en place car en fait mon fichier xml va etre loade en base et pour se faire je ne voulais pas avoir d'attribut sur mes tags...

    Mais je vais voir qd meme si je ne peux pas me debrouiller avec...

    Merci qd meme

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    effectivement, tu peux préciser que ton élément R dans Table sera unique avec comme critère d'unicité la valeur de l'élément PK. il te faut pour cela ajouter une contrainte d'unicité, ce qui se fait par l'ajout d'un élément xs:unique (en supposant que le nom d'espace attribué au schéma des schémas est xs
    ex dans le fichier xsd :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" ...
    )
    dans ce que l'on appelle la racine de la contrainte d'unicité, c'est à dire l'élément qui va contenir tes éléments uniques, soit ici, l'élément Table (les éléments uniques étant tes enregistrements R).

    Dans cet élément xs:unique (un attribut name donne le nom de cette contrainte, ici je l'ai appelé RUnique), il te faut préciser sur quels éléments s'appliquent la contrainte (les éléments R) en ajoutant l'élément xs:selector dont l'attribut xpath spécifie cet élément
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xs:unique name="RUnique">
    	<xs:selector xpath="R"/>
    </xs:unique>
    ensuite, il te faut préciser les critères d'unicité (chez toi, la valeur de l'élément PK) en ajoutant l'élément xs:field toujours avec un attribut xpath qui précise le critère.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xs:unique name="RUnique">
    	<xs:selector xpath="R"/>
    	<xs:field xpath="PK"/>
    </xs:unique>
    Remarque: on peut ajouter plusieurs critères d'unicité (par exemple, un double critère sur la valeur de PK et la valeur de C1. il faut pour cela ajouter un autre élément xs:field) pour plus de précisions sur la syntaxe XPath, se réferrer aux tutoriels sur www.zvon.org
    voilà ce que donne le fichier du schéma
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    	<xs:element name="Table">
    		<xs:complexType>
    			<xs:sequence minOccurs="0" maxOccurs="unbounded">
    				<xs:element name="R">
    					<xs:complexType>
    						<xs:sequence>
    							<xs:element name="PK"/>
    							<xs:element name="C1"/>
    						</xs:sequence>
    					</xs:complexType>
    				</xs:element>
    			</xs:sequence>
    		</xs:complexType>
    		<xs:unique name="RUnique">
    			<xs:selector xpath="R"/>
    			<xs:field xpath="PK"/>
    		</xs:unique>
    	</xs:element>
    </xs:schema>
    voilà, j'espère que cela t'aidera. si je n'ai pas été assez clair (ou si je n'ai pas bien compris la question, ça arrive :-)!), n'hésites pas à demander des précisions. bon courage.

Discussions similaires

  1. Déterminer si un champ est une clé primaire
    Par fbalien dans le forum Bases de données
    Réponses: 5
    Dernier message: 23/09/2019, 10h19
  2. Réponses: 8
    Dernier message: 26/09/2005, 22h06
  3. Clé primaire et incrémentation automatique
    Par spacegoogie dans le forum 4D
    Réponses: 4
    Dernier message: 20/06/2005, 10h36
  4. [debutant]cle primaire particuliere
    Par christophebmx dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 21/08/2004, 13h27
  5. [ db2 ] cle primaire autoincrement
    Par hocinema dans le forum DB2
    Réponses: 4
    Dernier message: 25/02/2004, 14h20

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