2009-09-29 13 views
30

Quali sono i pro/contro negli schemi DTD e XML (non sono nemmeno sicuro di quale sia il nome ufficiale di quest'ultimo!)? Che è migliore? Perché abbiamo bisogno di due modi per fare la stessa cosa?DTD o schema XML. Qual è il migliore?

Edit: Ho trovato questo in un articolo che stavo leggendo, che è ciò che mi ha spinto a porre la domanda:

Perché W3C XML Schema linguaggio?

Il linguaggio dello schema XML W3C non è il linguaggio dello schema solo . In effetti, la specifica XML descrive le definizioni del documento tipo (DTD) come modo di esprimere uno schema con . Inoltre, le versioni pre-release dell'elaborazione di riferimento JAXB hanno funzionato solo con con DTD, ovvero non con gli schemi scritti in XML Schema Language. Tuttavia, lo XML Schema Language è molto più ricco di DTD. Ad esempio, gli schemi scritti nello schema XML lingua possono descrivere relazioni e tipi di dati strutturali che non possono essere espressi (o non possono essere facilmente espressi) in DTD. Ci sono strumenti disponibili per convertire DTD al W3C XML Schema Lingua, quindi se avete schemi DTD-based che si è utilizzato con una versione precedente del JAXB Reference Implementation, è possibile utilizzare questi strumenti per convertire gli schemi a XML Schema Language.

Credo che mi piacerebbe esempi che illustrano perché XML-Schema è migliore (se lo è davvero).

risposta

22

Da http://weblogs.asp.net/rchartier/archive/2006/03/21/440782.aspx

  • DTD non sono a conoscenza dello spazio dei nomi.

  • DTD sono #define, #include e #ifdef - o, meno C-oriented, la capacità di definire abbreviazioni stenografia, contenuto esterno , e alcune analisi condizionale.

  • Un DTD descrive l'intero documento XML (anche se lascia "buchi"); uno schema può definire porzioni.

  • XSD ha un sistema di tipi.

  • XSD ha un linguaggio molto più ricco per descrivere quale elemento o contenuto di attributo "assomiglia". Questo è correlato al sistema di tipo .

  • È possibile inserire un DTD in linea in un documento XML, non è possibile farlo con XSD. Ciò significa che le DTD sono più sicure (è sufficiente che solo si debba proteggere uno per volta - il xml/dtd - e non lo multiplo).

  • La definizione ufficiale di "XML valido" richiede un DTD.Dal momento che ciò potrebbe essere poco pratico, se non impossibile, è spesso necessario risolvere lo schema per lo schema, che non è esattamente la stessa cosa.

Per quanto mi riguarda, è abbastanza semplice per scrivere un validatore per qualche XML se si dispone di un XSD. Non ho visto questo con un DTD, anche se sono sicuro che esista.

+2

È possibile inserire XSD in linea con XML. Basta usare il giusto spazio dei nomi e annidare lo schema all'interno del documento. I file WSDL lo fanno comunemente. I DTD sono soggetti a attacchi DoS. Vedi http://en.wikipedia.org/wiki/Billion_laughs – lavinio

+0

@lavinio, penso che tu abbia ragione riguardo all'integrazione di XSD; Ho visto file prima di farlo. Interessante articolo sull'attacco di Billion Laughs. –

+4

C'è qualche funzione DTD, che non può essere eseguita in XSD? –

4

C'è anche Relax NG - un altro potente linguaggio per la convalida di documenti XML, insieme a Schematron e altre tecnologie da DSDL. Relax NG è molto semplice e ha una forma leggibile dall'uomo: Relax NG Compact che consente di scrivere schemi simili a schemi BNF.

+0

Sì! EditiX fornisce un modo per scrivere in Relax NG e convertirlo in DTD o XSD. Sono a favore del Relax NG. XSD è a volte un po 'complicato per alcuni dei miei ingegneri junior. –

10

Alcuni anni fa, ci sarebbero stati motivi per usare DTD su XML Schema (era più comune o meglio supportato dagli strumenti XML). Oggi, tuttavia, non vedo alcun motivo per non utilizzare XML Schema invece di DTD: XML Schema è molto più potente.

Tuttavia, XML Schema è lungi dall'essere perfetto (basta provare a leggere le specifiche o un libro su XML Schema ...) e da allora sono state sviluppate molte alternative (Schematron, Examplotron, RelaxNG). Questi possono avere vantaggi tecnici rispetto allo schema XML, ma oggi lo schema XML è molto più pervasivo che vedo pochissimi casi in cui una soluzione avrebbe senso.

5

Lo schema XML può eseguire convalide più complesse. Ad esempio se DTD può verificare se il tipo di dati di un elemento XML è intero o stringa. Mentre 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 sintassi XML ed è una scelta naturale per lo sviluppo di servizi Web.

Problemi correlati