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 :

Validation d'unicité de l'attribut Name


Sujet :

Valider XML

  1. #1
    Membre confirmé
    Profil pro
    Développeur .NET
    Inscrit en
    février 2005
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2005
    Messages : 299
    Points : 596
    Points
    596
    Par défaut Validation d'unicité de l'attribut Name
    Bonjour,

    Je cherche depuis 3 semaines à valider un schema xml.
    Dans ce dernier j'aimerais bien que l'attribut Name des tags Insert soient uniques, mais je ne parviens à rien.

    Voici le xsd simplifié avec un seul tag parent et sous tag
    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
     
    <xs:complexType name="TypeQueryList">
        <xs:sequence>
          <xs:element name="Inserts" maxOccurs="unbounded">
            <xs:complexType>
              <xs:sequence>
                <xs:element maxOccurs="unbounded" minOccurs="1" name="Insert">
                  <xs:complexType>
                    <xs:simpleContent>
                      <xs:extension base="xs:string">
                        <xs:attribute name="name" type="xs:string" use="required"/>
                      </xs:extension>
                    </xs:simpleContent>
                  </xs:complexType>
                </xs:element>
              </xs:sequence>       
            </xs:complexType>
            <xs:unique name="unique-Insert-name">
              <xs:selector xpath="Inserts/Insert"/>
              <xs:field xpath="@name"/>
            </xs:unique>
          </xs:element>
        </xs:sequence>
      </xs:complexType>
     
      <xs:element name="QueryList" type="TypeQueryList"/>
    Le xml donnerait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <QueryList xmlns="http://www.osames.org/osamesorm"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.osames.org/osamesorm file:/C:/Development/Tests/TestXmlValidation/TestValidation/xml_schemas/orm.xsd">
        <Inserts>
            <Insert name="test1"></Insert>
            <Insert name="test1"></Insert>
        </Inserts>
    </QueryList>
    Je suis complètement largué sur comment avoir une erreur si j'ai déjà un nom donné.

    Merci.

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    octobre 2011
    Messages
    1 343
    Détails du profil
    Informations forums :
    Inscription : octobre 2011
    Messages : 1 343
    Points : 2 372
    Points
    2 372
    Par défaut
    Là, je vois deux problèmes avec l'expression de xs:unique.

    [1] Comme xs:unique est défini dedans la portée de l'élément Inserts, réference sur Inserts ne serait pas. Le selector xpath commence avec une réference de Insert (mais pas tout à fait encore, voir desous).

    [2] Et puis, je peux déduire que vous avez déclaré un défaut namespace en coincidant avec l'attribut targetNamepace dans la racine xs:schema (la raison de déduction est en vue la façon vous écrivez l'attribut type dans le schéma). Là, c'est une bonne chose. Mais il vous faut déclarer aussi un préfixe pour le targetNamespace aussi : la raison est que le mode d'emploi n'y reconnaitrait pas. Donc voici les choses vous devriez faire.

    [2.1] Faites attention à la déclaration de tns ou quelque préfixe valable que vous voulez.
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.osames.org/osamesorm"
        xmlns:tns="http://www.osames.org/osamesorm"
        xmlns="http://www.osames.org/osamesorm"
        elementFormDefault="qualified" attributeFormDefault="unqualified"
    >
    [2.2]
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            <xs:unique name="unique-Insert-name">
              <xs:selector xpath="tns:Insert"/>
              <xs:field xpath="@name"/>
            </xs:unique>

    Et bien, c'est fait.

  3. #3
    Membre confirmé
    Profil pro
    Développeur .NET
    Inscrit en
    février 2005
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2005
    Messages : 299
    Points : 596
    Points
    596
    Par défaut
    Merci. Je peut avancer dans mon projet maintenant

Discussions similaires

  1. [HTML 5] [Warning] Attribute 'name' is not a valid attribute
    Par Jinkas dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 24/04/2013, 16h24
  2. [DOM] Changement de l'attribut name dynamique
    Par Metal3d dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 25/06/2008, 16h39
  3. Pb attribut name pour un form
    Par mariemor64 dans le forum Struts 1
    Réponses: 2
    Dernier message: 04/07/2006, 12h12
  4. Balise form - problème attributs name et type
    Par michihala dans le forum Struts 1
    Réponses: 3
    Dernier message: 03/04/2006, 17h17
  5. xhtml ->xml xsl:attribute name+not valid
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 14/06/2005, 07h27

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