Comment choisir entre DTD et XSD

Je souhaite utiliser un DTD ou un XSD pour décrire mon document XML. J’ai lu que les XSD sont meilleurs que les DTD car ils supportent les espaces de noms et les types de données, et que les DTD sont plus anciens.

Est-ce que cela signifie que je ne devrais utiliser que des XSD pour tous les besoins futurs et ignorer totalement la DTD en tant qu’option? Dois-je même apprendre la structure des DTD?

Quels facteurs dois-je prendre en compte lorsque vous choisissez entre XSD et DTD?

Il est probablement important d’apprendre les DTD en tant qu’exercice séparé, simplement pour savoir comment elles fonctionnent dans le cas où vous les rencontrez ailleurs, et pour pouvoir apprécier certaines des choses que XSD essayait de résoudre.

Cependant, pour les besoins actuels de la description d’un document XML, respectez les XSD.

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

Cela dépend vraiment de la complexité de la structure à configurer.

Si vous avez besoin de choses comme les espaces de noms et les types de données, optez pour XSD. Si vous avez juste besoin d’un petit schéma rapide pour vérifier, DTD vous donnera des performances plus rapides car il n’y a pas d’parsing XML impliquée.

Si je comprends bien, XSD est dérivé de la DTD, de sorte que la compréhension de la DTD fournira une base solide pour l’apprentissage du XSD, en plus de souligner certaines lacunes de la DTD.

Ne pas nuire à l’apprentissage de la DTD, mais assurez-vous d’utiliser XSD, car XSD a plus de force,

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

  1. Vous pouvez définir le type de données des valeurs des noeuds. [date, numéro, chaîne, etc.]
  2. Vous pouvez également définir des data_types personnalisés, [exemple, pour le noeud, les données possibles peuvent être l’un des 12 mois. Par conséquent, vous devez définir tous les 12 mois dans un nouveau type de données en écrivant tous les noms de la validation montre une erreur si le XML d’entrée contient une autre valeur que ces 12 valeurs ..]
  3. Vous pouvez mettre la ressortingction sur l’occurrence des éléments, en utilisant minOccurs et maxOccurs, les valeurs par défaut sont 1 et 1.

.. et beaucoup plus …

Il y a quelques ressortingctions: comme par exemple,

  1. Un élément (nom) défini dans le fichier XSD doit être défini avec un seul type de données.
  2. Vous ne pouvez pas valider un noeud / atsortingbut en utilisant la valeur d’un autre noeud / atsortingbut.

C’est une vieille chaîne, MAIS au cas où quelqu’un d’autre la trouverait … d’après ce que je peux dire, DTD a toujours deux avantages que XSD ne possède pas, à savoir l’inclusion de la fonction ENTITY qui n’existe pas dans XSD. C’est une fonctionnalité très intéressante qui indique au compilateur comment traiter les types de fichiers potentiellement inconnus en identifiant les programmes à ouvrir pour les traiter.

De plus, les DTD sont écrites dans la spécification XML afin de pouvoir être écrites directement dans des documents XML, alors que XSD doit exister en tant que fichier externe et connecté. Pas un gros problème, surtout quand on utilise de plus gros documents.

Je pense que XSD est encore bien meilleur et plus naturel car il utilise la syntaxe XML, je voulais juste jouer à l’avocat de diable 🙂

Il y a un problème très important pour utiliser une DTD (peut-être avec un XSD si vous avez besoin d’une validation approfondie):

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

 

Dans votre document, vous pouvez, où que vous soyez, simplement utiliser le code & MyName; au lieu de taper tout ça.

En outre, supposons que vous ayez un fichier de type XML (peut-être produit par une autre application) qui se compose de beaucoup de balises similaires, mais pas de balise racine, par exemple:

    Erstes Buch  ...  Fünftes Buch  

Supposons que ce fichier s’appelle “Booklist.TXT”,

Maintenant, vous pouvez coder votre master-xml:

    ]  ... some prefix-stuff as needed ... &AllBooks;  ... some post stuff es needed ...  

et chaque fois que vous avez besoin des livres dans un autre contexte, vous devez uniquement coder le fichier XML environnant et ne pas toucher ou copier la liste de livres elle-même. De plus, vous pouvez la conserver au même endroit et modifier tous les documents.

Le schéma XML peut effectuer des validations plus complexes. Par exemple, si DTD vérifie que le type de données d’un élément XML est entier ou que ssortingng.XML schema peut effectuer des validations plus compliquées comme si l’élément xml est une chaîne commençant par une lettre majuscule ou un entier positif. Enfin, le schéma XML utilise la syntaxe XML et constitue un choix naturel pour le développement de services Web.