XML, DTD: comment rendre la commande non importante
J'ai commencé à l'aide d'un fichier XML et un analyseur comme un moyen pratique pour stocker mes données
Je veux utiliser la DTD pour vérifier la structure des fichiers xml quand ils arrivent.
Voici mon fichier DTD
< ?xml version="1.0" encoding="UTF-8"?>
< !ELEMENT document (level*)>
< !ELEMENT level (file,filelName?,fileNumber?)>
< !ELEMENT file (#PCDATA)>
< !ELEMENT filelName (#PCDATA)>
< !ELEMENT fileNumber (#PCDATA)>
(notez que le nom de fichier et le fichier number sont en fait purement facultatif)
et
<document>
<level>
<file>group1file01</file>
</level>
<level>
<file>group1file02</file>
<fileName>file 2</fileName>
<fileNumber>0</fileNumber>
</level>
...
en tant que tel tout cela fonctionne très bien. (J'utilise eclipse "valider" option de le tester pour l'instant)
cependant, alors que les tests que j'ai obtenu ce que je trouve bizarre d'erreur
si je ne
<level>
<levelName>Level 2</levelName>
<levelNumber>0</levelNumber>
<file>group1level02</file>
</level>
de changer l'ordre des lignes, Eclipse refuse de le valider ...
Je me demandais si c'était un problème avec Eclipse ou si la commande est réellement important.
Si l'ordre est important de savoir comment puis-je modifier la DTD pour le faire fonctionner, peu importe l'ordre des il des éléments?
Je ne peux pas vraiment changer le XML, car j'ai déjà tous les fichiers XML et de l'analyseur à l'écrit (je sais je l'ai fait dans le mauvais sens lol).
source d'informationauteur Jason Rogers
Vous devez vous connecter pour publier un commentaire.
Que Roger a dit, il y a seulement des listes ordonnées, mais vous pouvez utiliser l'opérateur OU
|
de définir toutes les combinaisonsLook iciil y a un exemple dans la section Choix
Déclarer les listes à puces avec des contraintes d'occurrence dans la DTD, ils sont souvent longues et complexes à la recherche déclarations. Une grande raison pour cela est que la Dtd doit être déterministe, donc même la commutation des Schémas XML n'est pas nécessairement de l'aide.
Voici une déclaration de DTD pour l'élément
<level>
qui contient:<file>
élément<fileName>
éléments<fileNumber>
élémentscode:
Vous pouvez utiliser
ANY
mot-clé si vous ne vous souciez pas trop de validité:J'ai été confronté à un problème similaire icices deux cas peuvent apparaître:
La seule solution que j'ai trouvé est celle-ci:
Peut-être il y a une meilleure solution, mais il fonctionne très bien pour mon problème particulier.
Avec une DTD les nœuds enfants doivent apparaître dans l'ordre indiqué dans la définition de l'élément. Il n'existe aucun moyen pour permettre alternative ordre, sauf si vous souhaitez mettre à niveau à un schéma XSD.
Addendum: Par @Gaim, vous peut proposer d'autres commandes à l'aide des (a,b,c...)|(b,a,c,...) de la syntaxe, mais ce n'est pas vraiment pratique pour les plus de, disons, 3 éléments imbriqués, car un ordre arbitraire permet une factorielle du nombre de rangements -- 6 pour 3 éléments, 24 pour les 4 éléments, 120 pour les 5 éléments-et une utilisation intelligente de l' ? les opérateurs est sûr de la suite dans les faux de validation pour les cas étranges.
Si vous pouvez le deviner sensible de la limite supérieure pour le nombre d'enfants pour votre élément, qu'il est extrêmement sale façon de surmonter le problème. Suit l'exemple pour les enfants de 0-3:
Ainsi, vous permettez à l'élément "myUnorderedElement" d'avoir des enfants de 0-3 de tout type de option1, option2 ou option3.