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] Attribut unique seulement dans une même balise parente


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 [XSD] Attribut unique seulement dans une même balise parente
    Bonjour,

    Voilà la situation, j'ai des balises <urls> qui contiennent chacune 0 ou n balise(s) <url> possédant un attribut name.
    Je voudrais que cet attribut soit unique pour les <url> contenues dans une même balise <urls> mais que je puisse avoir le même pour deux <url> contenues dans des <urls> différentes (je ne suis pas sûr d'être clair ).

    Donc tout d'abord est-ce possible ?
    Si oui comment ?

    Voici un exemple de XML qui serait valide mais qui ne le serait plus si on décommente la ligne commentée [edit]il y a apparement un problème avec la coloration syntaxique, seul le début de la ligne est commenté[/edit]
    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
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <drivers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="drivers.xsd">
     
        <driver name="PostgreSQL-8.0-311" class="org.postgresql.Driver">
            <urls>
                <url name="Default">jdbc:postgresql://$location$database</url>
            </urls>
        </driver>
     
        <driver name="HSQLDB" class="org.hsqldb.jdbcDriver">
            <urls>
                <url name="Server">jdbc:hsqldb:hsql://$location$database</url>
                <url name="File">jdbc:hsqldb:file:$location$database</url>
            </urls>
        </driver>
     
        <driver name="Derby" class="org.apache.derby.jdbc.EmbeddedDriver">
            <urls>
                <url name="Default">jdbc:derby:$location$database</url>
                <!-- <url name="Default">jdbc:derby:...</url> -->
            </urls>
        </driver>
     
    </drivers>
    Voici également mon XSD actuel (ne gérant donc pas cette restriction)
    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
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
     
        <xsd:complexType name="drivers">
            <xsd:sequence>
                <xsd:element ref="driver" minOccurs="0" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>
        <xsd:element name="drivers" type="drivers"/>
     
        <xsd:complexType name="driver">
            <xsd:sequence>
                <xsd:element ref="urls"/>
            </xsd:sequence>
            <xsd:attribute name="name" type="xsd:ID" use="required"/>
            <xsd:attribute name="class" type="xsd:string" use="required"/>
        </xsd:complexType>
        <xsd:element name="driver" type="driver"/>
     
        <xsd:complexType name="urls">
            <xsd:sequence>
                <xsd:element ref="url" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>
        <xsd:element name="urls" type="urls"/>
     
        <xsd:simpleType name="fullString">
            <xsd:restriction base="xsd:string">
                <xsd:pattern value=".*[^ ].*"/>
            </xsd:restriction>
        </xsd:simpleType>
     
        <xsd:complexType name="url" mixed="true">
            <xsd:simpleContent>
                <xsd:extension base="fullString">
                    <xsd:attribute name="name" type="xsd:string" use="required"/>
                </xsd:extension>
            </xsd:simpleContent>
        </xsd:complexType>
        <xsd:element name="url" type="url"/>
    </xsd:schema>
    Merci d'avance pour votre aide.
    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
    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
    Salut,

    Il suffit de modifier la déclaration de l'élément <urls>, et de spécifier un index unique basé sur l'attribut name de la balise <url> :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsd:element name="urls" type="urls">
      <xsd:key name="url-unique">
        <xsd:selector xpath="url"/>
        <xsd:field xpath="@name"/>
      </xsd:key>
    </xsd:element>
    Si tu souhaites étendre cette contrainte à l'ensemble des <url> de ton document, il faut placer cette contrainte au niveau de <drivers> :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsd:element name="drivers" type="drivers">
      <xsd:key name="url-unique">
        <xsd:selector xpath="driver/urls/url"/>
        <xsd:field xpath="@name"/>
      </xsd:key>
    </xsd:element>
    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
    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
    Nickel , un grand 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: 2
    Dernier message: 16/12/2009, 13h36
  2. [W3C] class et id dans une même balise
    Par stars333 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 26/01/2008, 01h47
  3. [Applet]Utiliser plusieurs Applet dans une même classe
    Par BRAUKRIS dans le forum Applets
    Réponses: 5
    Dernier message: 11/06/2004, 15h27
  4. Résultats dans une même colonne.
    Par souellet dans le forum Langage SQL
    Réponses: 6
    Dernier message: 10/03/2004, 19h51

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