Come scegliere tra DTD e XSD

Voglio usare un DTD o un XSD per descrivere il mio documento XML. Ho letto che gli XSD sono migliori dei DTD poiché supportano spazi dei nomi e tipi di dati e che i DTD sono più vecchi.

Questo significa che dovrei usare XSD solo per tutti i bisogni futuri e ignorare totalmente la DTD come opzione? Dovrei anche preoccuparmi di imparare la struttura dei DTD?

Quali fattori dovrei considerare nella scelta tra XSD e DTD?

Probabilmente è importante imparare i DTD come esercizio separato, solo per sapere come funzionano nel caso li incontri da qualche altra parte, e così puoi apprezzare alcune delle cose che XSD stava cercando di risolvere.

Tuttavia, per gli attuali scopi della descrizione di un documento XML, attenersi effettivamente agli XSD.

Oltre ad avere un set di funzionalità molto più ricco (come menzioni, inclusi tipi di dati e spazi dei nomi), sono anche documenti XML stessi, che possono essere davvero utili. Poiché sono XML, puoi controllare molto bene la loro validità e validità e puoi scrivere codice che funzioni con loro come normali file XML (ad esempio, se vuoi generare automaticamente le classi di codice da uno schema)

Dipende davvero dalla complessità della struttura che è necessario configurare.

Se hai bisogno di cose come namespacing e datatypes, sicuramente vai con XSD. Se hai solo bisogno di uno schema piccolo e veloce da controllare, DTD ti darà prestazioni più veloci poiché non è coinvolto l’analisi XML.

A quanto ho capito, XSD è derivato dalla DTD, quindi comprendere DTD fornirà solide fondamenta per l’apprendimento dell’XSD, oltre a sottolineare alcuni dei cortometraggi della DTD.

Non sarebbe male capire la struttura di un DTD (ti aiuterà a capire meglio un XSD nel lungo periodo) … ma dovresti usare XSD per andare avanti.

Nessun danno nell’apprendimento della DTD, ma assicurati di usare XSD, perché XSD ha più forza,

Con XSD puoi non solo convalidare la struttura / la gerarchia dei tag XML ma anche,

  1. È ansible definire il tipo di dati dei valori dei nodes. [data, numero, stringa, ecc.]
  2. È anche ansible definire tipi di dati personalizzati, [ad esempio, per il nodo, i dati possibili possono essere uno dei 12 mesi .. quindi è necessario definire tutti i 12 mesi in un nuovo tipo di dati scrivendo tutti i nomi di 12 mesi come valori di enumerazione. la validazione mostra un errore se l’XML di input contiene un valore diverso da questi 12 valori ..]
  3. Puoi mettere la restrizione sull’occorrenza degli elementi, usando minOccurs e maxOccurs, i valori di default sono 1 e 1.

.. e molti altri …

Ci sono alcune restrizioni: come,

  1. Un elemento (nome) definito nel file XSD deve essere definito con un solo tipo di dati.
  2. Non è ansible convalidare un nodo / attributo utilizzando il valore di un altro nodo / attributo.

Questa è una vecchia stringa, MA nel caso che qualcuno la trovi … da quello che posso dire DTD ha ancora due vantaggi che XSD non ha, vale a dire l’inclusione della funzione ENTITY che non esiste in XSD. Questa è una funzionalità davvero fantastica che dice al compilatore come elaborare tipi di file potenzialmente non familiari identificando quali programmi aprire per elaborarli.

Inoltre, i DTD sono scritti nelle specifiche XML in modo che possano essere scritti direttamente nei documenti XML mentre XSD deve esistere come file esterno e connesso. Non è un grosso problema, soprattutto quando si utilizza in documenti più grandi comunque.

Penso che XSD sia ancora molto migliore e più naturale dal momento che usa la syntax XML, volevo solo fare l’avvocato del diavolo 🙂

C’è un problema IMHO molto importante per usare un DTD (magari insieme a un XSD se hai bisogno di una validazione approfondita):

In DTD puoi definire le tue entity framework es:

 

Nel tuo documento puoi dove vuoi semplicemente codice e MyName; invece di scrivere tutte queste cose.

Supponiamo inoltre di avere un file simile a XML (magari prodotto da qualche altra applicazione) che consiste di molti tag simili ma nessun tag di root, ad es .:

    Erstes Buch  ...  Fünftes Buch  

Supponiamo che questo file sia denominato “Booklist.TXT”,

Ora puoi codificare il tuo master-xml:

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

e ogni volta che hai bisogno dei libri in un altro contesto, devi solo codificare l’xml circostante e non devi toccare o copiare la stessa lista di libri, inoltre puoi mantenerla in un unico posto e avere tutte le modifiche in qualsiasi documento.

Lo schema XML può eseguire convalide più complesse. Ad esempio se DTD verifica che il tipo di dati di un elemento XML sia intero o stringa. Lo schema XML può eseguire convalide più complicate come se l’elemento xml fosse una stringa che inizia con la lettera maiuscola o un intero positivo. Infine, lo schema XML utilizza la syntax XML ed è una scelta naturale per lo sviluppo di servizi web.