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 :

XMLSchema -> un élement dans lui même


Sujet :

Valider XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 4
    Par défaut XMLSchema -> un élement dans lui même
    Ceci est le format DTD:
    <!ELEMENT op ((var, var+) | (op, op+) | (var, op+,var*) | (var*, op+, var)) >

    Je voudrais l'avoir en XMLSchema si possible, j'ai essayé de la façon suivante mais ça ne marche pas! Je vous prie de bien vouloir m'aider
    Description de l'erreur:
    E [Xerces] cos-nonambig: op and op (or elements from their substitution group) violate "Unique Particle Attribution". During validation against this schema, ambiguity would be created for those two particles.

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     <xs:group name="op1">
         <xs:sequence>
            <xs:element ref="op" minOccurs="2" maxOccurs="unbounded">  </xs:element>
         </xs:sequence>
       </xs:group>
        
        <xs:group name="op2">
            <xs:sequence>
                <xs:element ref="var" minOccurs="2" maxOccurs="unbounded"></xs:element>
            </xs:sequence>
        </xs:group>
        
        <xs:group name="op3">
            <xs:sequence>
                <xs:element ref="var"></xs:element>
                <xs:element ref="op" maxOccurs="unbounded"></xs:element>
                <xs:element ref="var" minOccurs="0" maxOccurs="unbounded"></xs:element>
            </xs:sequence>
        </xs:group>
        
        <xs:group name="op4">
            <xs:sequence>
                <xs:element ref="var" minOccurs="0" maxOccurs="unbounded"></xs:element>
                <xs:element ref="op" maxOccurs="unbounded"></xs:element>
                <xs:element ref="var"></xs:element>
            </xs:sequence>
        </xs:group>
        
        <xs:element name="op">
           <xs:complexType>
            <xs:choice>
                <xs:group ref="op1"></xs:group>
                <xs:group ref="op2"></xs:group>
                <xs:group ref="op3"></xs:group>
                <xs:group ref="op4"></xs:group>
            </xs:choice>
              <xs:attribute name="symbole" type="symboles_possibles"/>
           </xs:complexType>
        </xs:element>
      
          <xs:element name="var">
               <xs:complexType >
                   <xs:attribute name="nom" type="xs:string"></xs:attribute>
               </xs:complexType>
          </xs:element>
        
          <xs:simpleType name="symboles_possibles">
              <xs:restriction base="xs:string">
                  <xs:pattern value="[+*/-]"></xs:pattern>
              </xs:restriction>
          </xs:simpleType>

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

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

    le problème ne vient pas du fait que la définition de l'élément op soit récursive (encore que ça n'arrange rien), mais bien du fait que ton schéma est ambigu : si en premier vient un var par exemple, le validateur de schéma se retrouve face à 3 branches possibles du choice (les branches 1, 2 et 4), ce qui est interdit par la spécification du W3C (la fameuse règle du "Unique Particle Attribution"). La validation est un processus complètement déterministe, il n'y a pas de possibilité de "retour en arrière" pour essayer une autre possibilité quand celle choisie aboutit sur un échec.

    Tu n'as donc que 2 possibilités :
    • Soit "dégrader" un peu ton schéma pour supprimer toute ambiguïté, quitte à valider des schémas non corrects ; ça peut être fait a priori avec ce schéma :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      <!ELEMENT op (var*, op*, var*)>
    • Soit utiliser un autre langage de validation, RelaxNG est plus souple en matière de résolution de l'ambiguïté
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 4
    Par défaut
    Merci pour la réponse, c'est maintenant plus clair dans ma tête.

Discussions similaires

  1. [Batch] Soucis pour lister le fichier de sortie dans lui-même
    Par Olivier Regnier dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 21/01/2013, 23h31
  2. Lire l'étiquette d'un Xcontrol dans lui-même
    Par Gazawik dans le forum LabVIEW
    Réponses: 0
    Dernier message: 23/04/2009, 09h49
  3. Réponses: 5
    Dernier message: 07/09/2007, 17h23
  4. Réponses: 7
    Dernier message: 29/06/2007, 07h45
  5. [VB2005] Se copier lui même dans un répértoire
    Par Nico128 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 03/03/2007, 00h41

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