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 éclairé
    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<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />si="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
    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<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />s="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 éclairé
    Merci. Je peut avancer dans mon projet maintenant

###raw>template_hook.ano_emploi###