49 votes

Comment choisir entre les DTD et XSD

Je veux utiliser une DTD ou XSD pour décrire mon document XML. J'ai lu que XSDs sont mieux que les Dtd depuis qu'ils soutiennent les espaces de noms et les types de données, et que les Dtd sont plus âgés.

Est-ce à dire que je devrais utiliser XSDs pour tous les besoins futurs et d'ignorer totalement l'DTD comme une option? Devrais-je même pas la peine d'apprendre la structure de la Dtd?

Quels facteurs dois-je considérer lors du choix entre XSD et DTD?

46voto

Mike Mooney Points 5841

C'est probablement important d'apprendre Dtd comme un exercice distinct, juste pour la connaissance de la façon dont ils travaillent dans le cas où vous rencontrez quelque part d'autre, et de sorte que vous pouvez apprécier quelques-unes des choses que XSD essayait de résoudre.

Toutefois, pour les fins de la description d'un document XML, en effet stick à XSDs.

En plus d'avoir une beaucoup plus riche ensemble de fonctionnalités (comme vous le mentionnez, y compris les types de données et des espaces de noms), ils sont également des documents XML eux-mêmes, ce qui peut être vraiment utile. Parce qu'ils sont XML, vous pouvez vérifier leur bien-formation et la validité d'un beaucoup plus facile, et vous pouvez écrire du code qui fonctionne avec eux comme des fichiers XML (par exemple, si vous souhaitez générer automatiquement le code des classes à partir d'un schéma)

8voto

Brant Points 2038

Cela dépend vraiment de la complexité de la structure, c'est que vous avez besoin pour l'installation.

Si vous avez besoin des choses comme namespacing et les types de données, certainement aller avec XSD. Si vous avez juste besoin de faire un petit schéma pour vérifier contre, DTD vous donnera une performance plus rapide puisqu'il n'existe pas d'analyse XML impliqués.

Comme je le comprends, XSD est dérivé de la DTD afin de comprendre DTD donnera une base solide pour l'apprentissage de XSD, en plus de certains DTD défaillances de celle-ci.

6voto

Justin Niessner Points 144953

Il ne ferait pas de mal à comprendre la structure d'une DTD (il va vous aider à mieux comprendre un XSD dans le long terme)...mais vous devez utiliser XSDs aller de l'avant.

5voto

InfantPro'Aravind' Points 5728

Pas mal dans l'apprentissage de la DTD, mais assurez-vous d'utiliser XSD, car XSD a plus de force,

Avec XSD vous pouvez non seulement de valider la structure et la hiérarchie des balises XML, mais aussi,

  1. Vous pouvez définir le type de Données de la les valeurs des nœuds. [date, nombre, chaîne de caractères etc]
  2. Vous pouvez également définir un data_types, [par exemple, pour le nœud le possible, les données peuvent être l'une des 12 mois.. si vous avez besoin d' pour définir tous les 12 mois dans une nouvelle type de données à écrire tous les 12 mois des noms comme valeurs d'énumération .. la validation d'erreur s'affiche si l'entrée XML contient toute valeur autre que ces 12 valeurs .. ]
  3. Vous pouvez mettre la restriction sur l' l'apparition des éléments, à l'aide de minOccurs et maxOccurs, la valeur par défaut les valeurs sont 1 et 1.

.. et beaucoup plus ...

Il y a quelques restrictions: que,comme,

  1. Un élément(nom) définie dans le fichier XSD doit être définie avec un seul type de données.
  2. Vous ne pouvez pas valider un nœud ou d'un attribut à l'aide de la valeur de l'autre node/attribut.

3voto

MikeTheGuru Points 21

Il y a mon humble avis une question très importante à l'utilisation d'une DTD (peut-être avec un XSD si vous avez besoin profond de validation):

Dans la DTD, vous pouvez définir vos propres entités, par exemple:

<!ENTITY MyName "DrDr.Hannibal Xerxes Utah,MBA and CEO">

Dans votre document, vous pouvez wherevever besoin tout simplement le code &Nomutilisateur; au lieu de taper toutes ces choses.

En outre, supposons que vous disposez d'un XML comme fichier (peut-être produite par une autre application) qui se compose de beaucoup de similaires de balises, mais pas de racine-tag, par exemple:

<?xml version="1.0" encoding="ISO-8859-1"?> <!-- you need this when using foreign characters like 'ü' -->
<Book Author="Author1">
  <Titel>Erstes Buch</Titel>
</Book>
...
<Book Author="Author5">
  <Titel>Fünftes Buch</Titel>
</Book>

Supposons que ce fichier est nommé "Booklist.TXT",

Maintenant, vous pouvez coder votre maître-xml:

<?xml version="1.0" encoding="ISO-8859-1"?> <!-- you need this when using foreign characters like 'ü' -->
<DOCTYPE MyRoot [
<ENTITY AllBooks SYSTEM "Booklist.TXT">
]

<MyRoot>
... some prefix-stuff as needed ...
&AllBooks; <!-- here are all the Books -->
... some post stuff es needed ...
</MyBook>

et quand vous en avez besoin les livres dans un autre contexte, vous ne devez code environnantes xml et j'ai pas de toucher ou de le copier la liste compilée lui-même, de plus vous pouvez l'entretien dans un lieu unique et ont toutes les modifications dans un document.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X