2010-08-29 14 views
4

Parmi les éléments qui composent mon xml, j'ai l'élément appelons-le 'X' qui peut contenir de nombreux types d'éléments internes. Par conséquent, je voudrais définir l'analyseur DTD pour éviter d'analyser son contenu lors de sa validation XMl.
J'ai essayé de définir ce elemtn par:
<!ELEMENT X ANY>
et a obtenu un message d'erreur que l'élément interne à l'intérieur « X » est pas défini et en essayant de le définir comme:
<!ELEMENT X (#PCDATA)>
J'ai reçu le message d'erreur « seulement texte autorisé à l'intérieur de 'X' '
xml dtd- comment éviter d'analyser le contenu d'un élément?

Comment dois-je définir X pour que le validateur DTD ignore le contenu de l'élément' X '?

Répondre

5

Certains guides sur Internet affirment que ANY signifie l'arrêt du processus de validation pour cet élément, mais ce n'est pas une information correcte. Le modèle de contenu ANY dans DTD ne signifie pas réellement "autoriser tout contenu XML bien formé dans cet élément". Au lieu de cela, cela signifie "autoriser tout contenu défini dans cette DTD". Cela signifie que vous obtiendrez une erreur pour chaque élément dont le modèle de contenu n'a pas été défini (ou que vous ne pouvez pas définir). Conceptuellement, cela signifie la même chose que d'être incapable d'autoriser le contenu d'un autre espace de noms. Malheureusement, pour le moment, je ne me souviens d'aucun moyen de le faire avec la DTD. Cependant, cela est possible avec XML schemas:

<xs:complexType> 
    <xs:sequence> 
    <xs:any namespace="##any" processContents="skip"/> 
    </xs:sequence> 
</xs:complexType> 

Cela permettrait à tous les éléments de tout espace de noms et ignorer la validation pour cet élément. Si vous pouvez passer des DTD aux schémas XML, cela résoudra votre problème.

Remarque sur une simple erreur lors de l'utilisation ANY
(Affiche originale n'a pas eu cette erreur mais je suis juste mentionner ici depuis que je suis déjà écrit sur ce sujet.)
C'est un simple faute de frappe à faire, mais ces deux ne veut pas dire la même chose:

<!ELEMENT X ANY > 
<!ELEMENT X (ANY) > 

le premier fait référence à mot-clé modèle de contenu ANY mais le second, un élément avec le nom « ANY », et il est la parenthèse qui causent cette différence .

+0

Donc, votre réponse est qu'il n'y a pas de solution dans la DTD. Il n'y a pas de solution de contournement intead? – Spiderman

+0

@ Spiderman Ma réponse est que "pour le moment, je ne me souviens d'aucun moyen de le faire avec DTD". Il y a une petite chance que cela soit possible, mais je ne le pense pas et je n'ai pas trouvé de solution. :(La solution consiste à utiliser autre chose que la DTD pour valider, si l'utilisation de la DTD n'est pas obligatoire – jasso

+0

Finalement, je suis passé au monde XSD et j'ai utilisé solution. Donc, merci – Spiderman