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] Erreur "Unique Particle Attribution"


Sujet :

Valider XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de be_tnt
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Par défaut [XSD] Erreur "Unique Particle Attribution"
    Hello!

    Voilà mon problème: je voudrais spécifier dans un schéma XML un choix tel que:

    A OR ( A AND B)

    Ci-dessous ce que j'ai mis dans mon schéma:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <xs:choice>
     <xs:element name="DelegationResult" type="ns1:delegationResult" minOccurs="1" />
     <xs:sequence>
      <xs:element name="DelegationResult" type="ns1:delegationResult" minOccurs="1" />
      <xs:element name="DelegationReason" type="ns1:delegationReason" minOccurs="1" />
     </xs:sequence>
    </xs:choice>
    J'obtiens l'erreur: "Unique particle attribution". En cherchant un peu, j'ai trouvé que je ne pouvais pas avoir DelegationResult défini 2 fois. Comment ext-ce que je peux donc faire mon: A OR ( A AND B) ???

  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,

    tel qu'il est écrit, ton schéma non déterministe ; ça signifie que lorsqu'il rencontre un élément <DelegationResult>, le processeur de schéma ne sait pas encore s'il correspond à la première particule (c'est le terme) du <xs:sequence>, ou à la deuxième (le bloc <xs:choice>). Pour le savoir, il faudrait qu'il fasse un choix entre les deux et lise l'élément qui suit pour le vérifier, et éventuellement revenir en arrière s'il s'est engagé sur la mauvaise voie. Or, ce "retour en arrière" est interdit par la spécification des WXS (pour faciliter l'implémentation). D'où le message d'erreur...

    Dans ton cas, la violation de cette règle est facile à contourner ; il suffit de se rendre compte que A est présent dans tous les cas, et B est optionnel. On peut donc transformer le <xs:choice> en <xs:sequence> (et simplifier au passage ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xs:sequence>
     <xs:element name="DelegationResult" type="ns1:delegationResult" minOccurs="1" />
     <xs:element name="DelegationReason" type="ns1:delegationReason" minOccurs="0" />
    </xs:sequence>
    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
    Membre éclairé Avatar de be_tnt
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Par défaut
    Merci!! Il est vrai que cela est plus simple ainsi.

    D'après ton explication, il n'est pas possible d'avoir dans plusieurs branches d'un choice un même élément? Ou cela marcherait-il si chacune des branches est une séquence commençant avec un élément différents? Du style:

    ( A AND B ) OR ( B AND C)

  4. #4
    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
    Citation Envoyé par be_tnt
    D'après ton explication, il n'est pas possible d'avoir dans plusieurs branches d'un choice un même élément? Ou cela marcherait-il si chacune des branches est une séquence commençant avec un élément différents? Du style:

    ( A AND B ) OR ( B AND C)
    Le principe, c'est qu'il ne doit pas y avoir d'ambiguïté pour le processeur qui doit savoir à tout moment où il est positionné dans le modèle qu'il valide ; en l'occurrence, ton exemple est tout à fait valide.
    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

  5. #5
    Membre éclairé Avatar de be_tnt
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Par défaut
    ok Merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/04/2010, 15h33
  2. [MySQL] Supprimer les erreurs de syntaxe dues aux quotes
    Par gotenks dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/01/2006, 16h10

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