2010-12-06 15 views
0

Je reçois l'erreur à venir lors de la validation du code XML par rapport au schéma.L'expression régulière dans la définition de schéma XML échoue

Value 'this/is/a/simple/node-path' is not facet-valid 
with respect to pattern '^(\w+[\w\-/])+\w' for type 'PathModel'. 

La définition de type PathModel est défini comme un simpleType comme le montre l'extrait de code ci-dessous. Il est utilisé par <path>this/is/a/simple/node-path</path>

<xs:simpleType name="PathModel"> 
    <xs:restriction base="xs:string"> 
    <xs:pattern value="^(\w+[\w\-/])+\w" /> 
    </xs:restriction> 
</xs:simpleType> 

Le résultat attendu est listé dans ce tableau de correspondance.

this/is/a/simple/node-path  MATCHING 
/this/is/a/simple/node-path  NOT MATCHING 
this/is/a/simple/node-path/  NOT MATCHING 
this/is/a/simple/nodep%th  NOT MATCHING (special characters) 

Qu'est-ce qui ne va pas? Merci

Répondre

5

Supprime le premier caractère ^.

 

<xs:simpleType name="PathModel"> 
    <xs:restriction base="xs:string"> 
    <xs:pattern value="(\w+[\w\-/])+\w" /> 
    </xs:restriction> 
</xs:simpleType> 
 

Ceci est la seule valeur valide de l'ensemble que vous avez fourni:

 

this/is/a/simple/node-path 
 

Cela devrait faire l'affaire pour vous (testé dans mon Eclipse IDE).

La raison est visible, par exemple, ici: http://www.regular-expressions.info/xml.html

« Par rapport à d'autres saveurs d'expression régulière, la saveur de schéma XML est assez limité dans les caractéristiques Comme il est utilisé pour valider si un élément entier correspond à un modèle. ou non, pour extraire des correspondances à partir de gros blocs de données Le schéma XML ancre toujours implicitement toute l'expression régulière La regex doit correspondre à l'élément entier pour que l'élément soit considéré comme valide Si vous avez le modèle regexp, le XML Le validateur de schéma l'appliquera de la même manière que Perl, Java ou .NET avec le modèle ^regexp$. "

+0

Merci beaucoup pour la bonne solution et l'explication, j'aurais dû savoir par moi-même que le schéma XML regex ne correspond qu'à l'élément entier et les instructions '^ $' sont totalement déplacées et inutiles! J'aimerais pouvoir t'avoir plus d'une fois! – codevour

-2

Autant que je peux voir l'expression régulière semble être valide et devrait donner les résultats montrés dans votre table correspondante, selon la spécification XSD. En utilisant Microsoft .NET Framework 2 avec un scénario de test en utilisant vos valeurs de chemin et votre expression régulière, vous obtenez exactement les résultats attendus.

Ainsi, les raisons possibles de ce que vous voyez:

  • Il y a un bogue dans la mise en œuvre de XSD que vous utilisez.
  • Votre code ne valide pas ce que vous pensez qu'il est de valider (bien que cela semble peu probable étant donné le message d'erreur que vous voyez)

Si vous nous dire ce que la mise en œuvre que vous utilisez et postez votre code, il peut être possible d'aider plus loin.

+0

Nous vous remercions de votre réponse. Le message de Jiri Patera a résolu le problème. – codevour

+0

Ah ... donc il semble que le bug est dans l'implémentation .NET 2 XSD de Microsoft, pas le vôtre :-). –