Eu pesquisei essa questão no Google, mas não entendo claramente o que é um esquema XML e DTD (definição de tipo de documento) e por que o esquema XML é mais poderoso comparado ao DTD.
Qualquer orientação seria muito apreciada.
Na seção Diferenças entre DTDs e Esquema do artigo Convertendo uma DTD em um esquema :
A diferença crítica entre DTDs e XML Schema é que o XML Schema utiliza uma sintaxe baseada em XML, enquanto as DTDs têm uma sintaxe exclusiva mantida em relação às DTDs SGML. Embora as DTDs sejam frequentemente criticadas por causa dessa necessidade de aprender uma nova sintaxe, a própria sintaxe é bastante concisa. O oposto é verdadeiro para o XML Schema, que é detalhado, mas também usa tags e XML, para que os autores de XML achem a sintaxe do XML Schema menos intimidadora.
O objetivo das DTDs era manter um nível de compatibilidade com SGML para aplicativos que podem querer converter DTDs SGML em DTDs XML. No entanto, de acordo com um dos objetivos do XML, "a dispersão na marcação XML é de importância mínima", não há uma preocupação real em manter a sintaxe breve.
[...]
Então, quais são algumas das outras diferenças que podem ser especialmente importantes quando estamos convertendo uma DTD? Vamos dar uma olhada.
Digitando
A diferença mais significativa entre DTDs e XML Schema é a capacidade de criar e usar tipos de dados no Schema em conjunto com as declarações de elemento e atributo. De fato, é uma diferença tão importante que metade da Recomendação do Esquema XML é dedicada à digitação de dados e ao Esquema XML. Abordamos os tipos de dados em detalhes na Parte III deste livro, "XML Schema Datatypes".
[...]
Restrições de Ocorrência
Outra área em que DTDs e Esquema diferem significativamente é com restrições de ocorrência. Se você se lembra dos exemplos anteriores no Capítulo 2, "Estrutura do esquema" (ou seu próprio trabalho com DTDs), existem três símbolos que você pode usar para limitar o número de ocorrências de um elemento: *, + e?.
[...]
Enumerações
Então, digamos que tínhamos um elemento e queríamos definir um atributo de tamanho para a camiseta, o que permitia aos usuários escolher um tamanho: pequeno, médio ou grande. Nosso DTD ficaria assim:
<!ELEMENT item (shirt)> <!ELEMENT shirt (#PCDATA)> <!ATTLIST shirt size_value (small | medium | large)>
[...]
Mas e se quiséssemos
size
ser um elemento? Não podemos fazer isso com um DTD. As DTDs não fornecem enumerações no conteúdo de texto de um elemento. No entanto, devido aos tipos de dados com o esquema, quando declaramos a enumeração no exemplo anterior, na verdade criamos umasimpleType
chamadasize_values
que agora podemos usar com um elemento:<xs:element name="size" type="size_value">
[...]
As diferenças entre uma definição de esquema XML (XSD) e uma definição de tipo de documento (DTD) incluem:
UPDATE : 2015.08.26
Nem todos esses pontos são 100% precisos, mas você entende.
Por outro lado:
fonte
Como muitas pessoas mencionaram antes, o XML Schema utiliza uma sintaxe baseada em XML e as DTDs têm uma sintaxe exclusiva. O DTD não suporta tipos de dados, o que importa.
Vamos ver um exemplo muito simples no qual a universidade tem vários alunos e cada aluno tem dois elementos "nome" e "ano". Observe que eu tenho usos "// ->" no meu código apenas para comentários.
Agora vou escrever este exemplo em DTD e em XSD.
DTD
Definição de esquema XML (XSD)
fonte
DTD é anterior ao XML e, portanto, não é o próprio XML válido. Essa é provavelmente a maior razão para a invenção do XSD.
fonte
Semelhanças entre XSD e DTD
Diferenças entre XSD e DTD
Além disso, embora o XSD seja pouco detalhado, sua sintaxe é uma extensão do XML, tornando conveniente o aprendizado rápido.
fonte
1
,0 or 1
,0 or more
, enquanto XSD pode especificar o número mínimo e máximo.Uma diferença é que, em uma DTD, o modelo de conteúdo de um elemento é completamente determinado por seu nome, independentemente de onde aparece no documento:
Supondo que você queira ter
person
elementoname
name
si tem elementos filhosfirst
elast
.Como isso
Se um
city
elemento no mesmo documento também precisa ter 'nome' um elemento filho do DTD exige que este elemento 'nome' deve ter elementos filhosfirst
elast
bem. Apesar do fato de quecity.name
não requerfirst
elast
como crianças.Por outro lado, o XML Schema permite declarar tipos de elementos filhos localmente; você pode declarar os
name
elementos filhos para ambosperson
ecity
separadamente. Dando a eles seus modelos de conteúdo adequados nesses contextos.A outra grande diferença é o suporte a namespaces. Como as DTDs fazem parte da especificação XML original (e são herdadas do SGML), elas não reconhecem o namespace, porque os namespaces XML foram especificados posteriormente. Você pode usar DTDs em combinação com espaços para nome, mas isso requer algumas contorções, como ser forçado a definir os prefixos na DTD e usar apenas esses prefixos, em vez de poder usar prefixos arbitrários.
Para mim, outras diferenças são principalmente superficiais. O suporte ao tipo de dados pode ser facilmente adicionado às DTDs, e a sintaxe é apenas sintaxe. (Eu, por exemplo, considero a sintaxe do esquema XML horrível e nunca gostaria de manter manualmente um esquema XML, o que eu não diria sobre DTDs ou esquemas RELAX NG; se eu precisar de um esquema XML por algum motivo, geralmente escrevo um RELAX NG one e converta-o com
trang
.)fonte
Semelhanças :
DTDs e Schemas desempenham as mesmas funções básicas:
Diferenças:
As DTDs são melhores para aplicativos com uso intenso de texto, enquanto os esquemas têm várias vantagens para fluxos de trabalho com uso intenso de dados.
Os esquemas são escritos em XML e, portanto, seguem as mesmas regras, enquanto os DTDs são escritos em uma linguagem completamente diferente.
Exemplos:
DTD:
XSD:
fonte
O DTD pode ter apenas dois tipos de dados, o CDATA e o PCDATA. Porém, em um esquema, você pode usar todo o tipo de dados primitivo usado na linguagem de programação e ter a flexibilidade de definir seus próprios tipos de dados personalizados.
O desenvolvedor que cria um esquema pode criar tipos de dados personalizados com base nos tipos de dados principais e usando diferentes operadores e modificadores.
fonte
Quando o XML foi lançado, fomos informados de que resolveria todos os nossos problemas: o XML será fácil de usar, infinitamente extensível, evitará digitação forte e não exigirá nenhuma habilidade de programação. Eu aprendi sobre DTDs e escrevi meu próprio analisador de XML. Mais de 15 anos depois, vejo que a maioria dos XML não é fácil de usar e não é muito extensível (dependendo do uso). Assim que alguns tamancos inteligentes conectaram o XML a um banco de dados, eu sabia que os tipos de dados eram praticamente inevitáveis. E você deve ver o XSLT (arquivo de transformação) que tive que trabalhar no outro dia. Se isso não é programação, não sei o que é! Atualmente, não é incomum ver todos os tipos de problemas relacionados a dados ou interfaces XML em mau estado. Eu amo XML, mas ele se afastou do ponto de partida altruísta original.
A resposta curta? As DTDs foram descontinuadas em favor dos XSDs, porque um XSD permite definir uma estrutura XML com mais precisão.
fonte
DTD XML
O objetivo de uma DTD é definir a estrutura de um documento XML. Ele define a estrutura com uma lista de elementos legais:
Esquema XML
O esquema XML permite que os autores do esquema especifiquem que os dados da quantidade do elemento devem ser numéricos ou, mais especificamente, um número inteiro. No exemplo a seguir eu usei
string
:fonte
A DTD está praticamente obsoleta porque é limitada em sua utilidade como linguagem de esquema, não suporta espaço para nome e não suporta tipo de dados. Além disso, a sintaxe da DTD é bastante complicada, dificultando a compreensão e a manutenção.
fonte
DTD indica a sintaxe do elemento XML
Esquemas XML são a alternativa da Microsoft ao DTD para validar XML
fonte