10
votes

Comment ignorer la validation de balises inconnues?

Un autre défi de la capacité du XSD,

J'ai envoyé des fichiers XML par mes clients, qui auront des balises inattendues de 0 ou plus indéfinies ou [appelle] (peut apparaître dans la hiérarchie). Eh bien, ils sont des tags redondants pour moi .. Donc, je dois ignorer leur présence, mais avec eux, il y a un ensemble de tags qui doivent être validés.

Ceci est un exemple XML: P>

  <xs:element name="root" type="root"></xs:element>
  <xs:complexType name="root">
    <xs:sequence>
      <xs:any maxOccurs="2" minOccurs="0"/>
      <xs:element name="node" type="xs:string"/>
      <xs:any maxOccurs="2" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType


2 commentaires

Le problème n'est-il pas valide contre le schéma?


yup .. plutôt je voulais montrer que "je ne sais pas comment le faire .. et j'ai essayé ça" ..


5 Réponses :


1
votes

Peut-être que c'est possible d'utiliser des espaces de noms: xxx

Ceci sera probablement validera probablement.


1 commentaires

Bien pensé [+1] .. mais malheureusement ne fonctionne pas dans mon cas. merci pour la réponse. :-)



3
votes

Conclusion:

Ceci n'est pas possible avec XSD. Toutes les approches que j'essayais d'atteindre l'exigence ont été nommées «ambiguës» par des outils de validation, accompagnant des erreurs d'erreurs.


0 commentaires

4
votes

Si vous n'êtes pas déjà fait avec ceci, vous pouvez essayer ce qui suit: xxx

sous Linux, cela fonctionne bien avec Xmllint en utilisant libxml version 20706.


5 commentaires

Cependant, cela n'autorise toujours pas le premier élément d'être! :(


Quel est exactement le problème, s'il vous plaît?


C'est l'erreur que je reçois: wildcard '## tout "permet à" nœud "de l'élément et provoque le modèle de contenu ambigu. Alors et donc


Cela ressemble à un problème de conceptuel. Pour plus de détails, voir ici: w3.org/tr/xmlschema-1/# Cos-Nonambig Un fait intéressant pour moi est que des outils évidemment différents gèrent ce cas différemment. Comme je l'ai écrit, la solution fournit par mon travail avec les outils mentionnés.


Bien. Merci pour l'info et votre temps précieux :) Il a été utile que je ne puisse pas en mettre en œuvre Coz, je n'ai à traiter qu'avec .net :)



1
votes

J'ai fait face au même problème.

Puisque j'ai appelé la validation de .net; J'ai décidé de supprimer l'erreur de validation spécifique dans validationEventhandler xxx

Il est important que thread.currenttuiculture doit être défini sur l'anglais ou cultureinfo.invarianTculture pour le fil actuel pour que cela fonctionne.


0 commentaires

2
votes

Vous pouvez utiliser une nouvelle fonctionnalité dans XML 1.1 appelé "contenu ouvert". En bref, il vous permet de spécifier que des éléments "inconnus" supplémentaires peuvent être ajoutés à un type complexe dans diverses positions et ce que l'analyseur devrait faire s'il frappe l'un de ces éléments.

Utilisation de XML 1.1, votre type complexe serait devenir: p> xxx pré>

Si vous avez beaucoup de types complexes, vous pouvez également définir un mode de contenu ouvert "par défaut" en haut de votre schéma: p>

<xs:schema ...>
  <xs:defaultOpenContent mode="interleave">
    <xs:any namespace="##any" processContents="skip"/>
  </xs:defaultOpenContent>

  ...
</xs:schema>


0 commentaires