DTD - Guia Rápido
A Declaração de Tipo de Documento XML, comumente conhecida como DTD, é uma maneira de descrever precisamente a linguagem XML. Os DTDs verificam a validade da estrutura e do vocabulário de um documento XML em relação às regras gramaticais da linguagem XML apropriada.
Um documento XML pode ser definido como -
Well-formed- Se o documento XML aderir a todas as regras XML gerais, como as tags, devem ser aninhadas corretamente, as tags de abertura e fechamento devem ser balanceadas e as tags vazias devem terminar com '/>', então ele é chamado de bem formado .
OU
Valid- Um documento XML considerado válido quando não está apenas bem formado , mas também está em conformidade com o DTD disponível que especifica quais tags ele usa, quais atributos essas tags podem conter e quais tags podem ocorrer dentro de outras tags, entre outras propriedades .
O diagrama a seguir representa que um DTD é usado para estruturar o documento XML -
![](https://assets.edu.lat/dtd/images/dtd_technology.jpg)
Tipos
O DTD pode ser classificado com base em sua declaração no documento XML, como -
DTD interno
DTD externo
Quando um DTD é declarado dentro do arquivo, ele é chamado Internal DTD e se for declarado em um arquivo separado, é chamado External DTD.
Aprenderemos mais sobre isso no capítulo Sintaxe DTD
Características
A seguir estão alguns pontos importantes que um DTD descreve -
os elementos que podem aparecer em um documento XML.
a ordem em que podem aparecer.
elementos opcionais e obrigatórios.
atributos do elemento e se são opcionais ou obrigatórios.
se os atributos podem ter valores padrão.
Vantagens de usar DTD
Documentation- Você pode definir seu próprio formato para os arquivos XML. Olhando para este documento, um usuário / desenvolvedor pode entender a estrutura dos dados.
Validation - Permite verificar a validade dos arquivos XML, verificando se os elementos aparecem na ordem correta, se os elementos e atributos obrigatórios estão no lugar, se os elementos e atributos não foram inseridos de forma incorreta, etc.
Desvantagens de usar DTD
Ele não oferece suporte a namespaces. O namespace é um mecanismo pelo qual nomes de elementos e atributos podem ser atribuídos a grupos. No entanto, em um DTD, os namespaces devem ser definidos dentro do DTD, o que viola o propósito de usar os namespaces.
Ele suporta apenas o tipo de dados de string de texto.
Não é orientado a objetos. Conseqüentemente, o conceito de herança não pode ser aplicado aos DTDs.
Possibilidades limitadas de expressar a cardinalidade dos elementos.
Um XML DTD pode ser especificado dentro do documento ou pode ser mantido em um documento separado e, em seguida, o documento pode ser vinculado ao documento DTD para usá-lo.
Sintaxe
A sintaxe básica de um DTD é a seguinte -
<!DOCTYPE element DTD identifier
[
declaration1
declaration2
........
]>
Na sintaxe acima -
DTD começa com o delimitador <! DOCTYPE.
A element diz ao analisador para analisar o documento do elemento raiz especificado.
DTD identifieré um identificador para a definição do tipo de documento, que pode ser o caminho para um arquivo no sistema ou URL para um arquivo na Internet. Se o DTD está apontando para um caminho externo, ele é chamadoexternal subset.
o square brackets [ ] inclua uma lista opcional de declarações de entidades chamadas internal subset.
DTD interno
Um DTD é referido como um DTD interno se os elementos forem declarados nos arquivos XML. Para referenciá-lo como DTD interno, o atributo autônomo na declaração XML deve ser definido comoyes. Isso significa que a declaração funciona independentemente da fonte externa.
Sintaxe
A sintaxe do DTD interno é mostrada -
<!DOCTYPE root-element [element-declarations]>
onde root-element é o nome do elemento-raiz e element-declarations é onde você declara os elementos.
Exemplo
A seguir está um exemplo simples de DTD interno -
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
<!DOCTYPE address [
<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
]>
<address>
<name>Tanmay Patil</name>
<company>TutorialsPoint</company>
<phone>(011) 123-4567</phone>
</address>
Vamos examinar o código acima -
Start Declaration - Comece a declaração XML com a seguinte instrução.
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
DTD- Imediatamente após o cabeçalho XML, segue-se a declaração do tipo de documento , comumente referido como DOCTYPE -
<!DOCTYPE address [
A declaração DOCTYPE possui um ponto de exclamação (!) No início do nome do elemento. O DOCTYPE informa ao analisador que um DTD está associado a este documento XML.
DTD Body - A declaração DOCTYPE é seguida pelo corpo do DTD, onde você declara elementos, atributos, entidades e notações -
<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone_no (#PCDATA)>
Vários elementos são declarados aqui que compõem o vocabulário do documento <nome>. <! ELEMENT name (#PCDATA)> define o nome do elemento como sendo do tipo "#PCDATA". Aqui, #PCDATA significa dados de texto analisáveis.
End Declaration- Finalmente, a seção de declaração do DTD é fechada usando um colchete de fechamento e um colchete de fechamento angular (]>). Isso efetivamente encerra a definição e, a partir daí, o documento XML segue imediatamente.
Regras
A declaração do tipo de documento deve aparecer no início do documento (precedida apenas pelo cabeçalho XML) - não é permitida em nenhum outro local do documento.
Semelhante à declaração DOCTYPE, as declarações do elemento devem começar com um ponto de exclamação.
O Nome na declaração do tipo de documento deve corresponder ao tipo de elemento do elemento raiz.
DTD externo
No DTD externo, os elementos são declarados fora do arquivo XML. Eles são acessados especificando os atributos do sistema que podem ser o arquivo .dtd legal ou um URL válido. Para referenciá-lo como DTD externo, o atributo autônomo na declaração XML deve ser definido como no. Isso significa que a declaração inclui informações da fonte externa.
Sintaxe
A seguir está a sintaxe para DTD externo -
<!DOCTYPE root-element SYSTEM "file-name">
onde nome do arquivo é o arquivo com extensão .dtd .
Exemplo
O exemplo a seguir mostra o uso externo de DTD -
<?xml version = "1.0" encoding = "UTF-8" standalone = "no" ?>
<!DOCTYPE address SYSTEM "address.dtd">
<address>
<name>Tanmay Patil</name>
<company>TutorialsPoint</company>
<phone>(011) 123-4567</phone>
</address>
O conteúdo do arquivo DTD address.dtd são como mostrado -
<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
Tipos
Você pode se referir a um DTD externo usando system identifiers ou public identifiers.
System Identifiers
Um identificador de sistema permite que você especifique a localização de um arquivo externo contendo declarações DTD. A sintaxe é a seguinte -
<!DOCTYPE name SYSTEM "address.dtd" [...]>
Como você pode ver, ele contém a palavra-chave SYSTEM e uma referência de URI apontando para a localização do documento.
Public Identifiers
Os identificadores públicos fornecem um mecanismo para localizar recursos DTD e são escritos conforme abaixo -
<!DOCTYPE name PUBLIC "-//Beginning XML//DTD Address Example//EN">
Como você pode ver, ele começa com a palavra-chave PUBLIC, seguida por um identificador especializado. Identificadores públicos são usados para identificar uma entrada em um catálogo. Os identificadores públicos podem seguir qualquer formato, entretanto, um formato comumente usado é chamado de Identificadores Públicos Formais ou FPIs.
Este capítulo discutirá sobre os componentes XML da perspectiva do DTD. Um DTD basicamente conterá declarações dos seguintes componentes XML -
Element
Attributes
Entities
Elements
Os elementos XML podem ser definidos como blocos de construção de um documento XML. Os elementos podem se comportar como um contêiner para conter texto, elementos, atributos, objetos de mídia ou uma combinação de todos.
Cada documento XML contém um ou mais elementos, os limites dos quais são delimitados por tags de início e tags de fim ou elementos vazios.
Exemplo
Abaixo está um exemplo simples de elementos XML
<name>
Tutorials Point
</name>
Como você pode ver, definimos uma tag <name>. Há um texto entre as marcas de início e fim de <name>. Os elementos, quando usados em um XML-DTD, precisam ser declarados, o que será discutido em detalhes no capítulo Elementos do DTD .
Atributos
Os atributos fazem parte dos elementos XML. Um elemento pode ter qualquer número de atributos exclusivos. Atributos fornecem mais informações sobre o elemento XML ou, mais precisamente, definem uma propriedade do elemento. Um atributo XML é sempre um par nome-valor .
Exemplo
Abaixo está um exemplo simples de atributos XML -
<img src = "flower.jpg"/>
Aqui, img é o nome do elemento, enquanto src é um nome de atributo e flower.jpg é um valor fornecido para o atributo src .
Se os atributos são usados em um XML DTD, então eles precisam ser declarados, o que será discutido em detalhes no capítulo Atributos do DTD
Entidades
Entidades são marcadores de posição em XML. Eles podem ser declarados no prólogo do documento ou em um DTD. As entidades podem ser categorizadas principalmente como -
Entidades integradas
Entidades de personagem
Entidades gerais
Entidades de parâmetro
Existem cinco entidades integradas que funcionam em XML bem formado, elas são -
E comercial: & amp;
Citação única: & apos;
Maior que: & gt;
Menor que: & lt;
Aspas duplas: & quot;
Estudaremos mais sobre as declarações de entidade em XML DTD em detalhes no capítulo DTD Entidades
Os elementos XML podem ser definidos como blocos de construção de um documento XML. Os elementos podem se comportar como um contêiner para conter texto, elementos, atributos, objetos de mídia ou uma combinação de todos.
Um elemento DTD é declarado com uma declaração ELEMENT. Quando um arquivo XML é validado por DTD, o analisador verifica inicialmente o elemento raiz e, em seguida, os elementos filhos são validados.
Sintaxe
Todas as declarações de elemento DTD têm esta forma geral -
<!ELEMENT elementname (content)>
A declaração ELEMENT é usada para indicar o analisador que você está prestes a definir um elemento.
elementname é o nome do elemento (também chamado de identificador genérico ) que você está definindo.
content define qual conteúdo (se houver) pode ir dentro do elemento.
Tipos de conteúdo de elemento
O conteúdo da declaração de elementos em um DTD pode ser categorizado conforme abaixo -
Conteúdo vazio
Conteúdo do elemento
Conteúdo misto
Qualquer conteúdo
Conteúdo Vazio
Este é um caso especial de declaração de elemento. Esta declaração de elemento não contém nenhum conteúdo. Eles são declarados com a palavra-chaveEMPTY.
Syntax
A seguir está a sintaxe para declaração de elemento vazio -
<!ELEMENT elementname EMPTY >
Na sintaxe acima -
ELEMENTé a declaração do elemento da categoria VAZIO
elementname é o nome do elemento vazio.
Example
A seguir está um exemplo simples que demonstra a declaração de elemento vazio -
<?xml version = "1.0"?>
<!DOCTYPE hr[
<!ELEMENT address EMPTY>
]>
<address />
Neste exemplo, o endereço é declarado como um elemento vazio. A marcação para o elemento de endereço apareceria como <endereço />.
Conteúdo do Elemento
Na declaração de elemento com conteúdo de elemento, o conteúdo seria elementos permitidos entre parênteses. Também podemos incluir mais de um elemento.
Syntax
A seguir está uma sintaxe de declaração de elemento com conteúdo de elemento -
<!ELEMENT elementname (child1, child2...)>
ELEMENT é a tag de declaração do elemento
elementname é o nome do elemento.
child1, child2 .. são os elementos e cada elemento deve ter sua própria definição dentro do DTD.
Example
O exemplo abaixo demonstra um exemplo simples para declaração de elemento com conteúdo de elemento -
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
<!DOCTYPE address [
<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
]>
<address>
<name>Tanmay Patil</name>
<company>TutorialsPoint</company>
<phone>(011) 123-4567</phone>
</address>
No exemplo acima, address é o elemento pai e name , company e phone_no são seus elementos filhos.
Lista de operadores e regras de sintaxe
A tabela abaixo mostra a lista de operadores e regras de sintaxe que podem ser aplicadas na definição de elementos filho -
Operador | Sintaxe | Descrição | Exemplo |
---|---|---|---|
+ | <! ELEMENT element-name (child1 +)> | Indica que o elemento filho pode ocorrer uma ou mais vezes dentro do elemento pai. | <! Endereço ELEMENT (nome +)> O nome do elemento filho pode ocorrer uma ou mais vezes dentro do endereço do nome do elemento . |
* | <! ELEMENT element-name (child1 *)> | Indica que o elemento filho pode ocorrer zero ou mais vezes dentro do elemento pai. | <! Endereço ELEMENT (nome *)> O nome do elemento filho pode ocorrer zero ou mais vezes dentro do endereço do nome do elemento . |
? | <! ELEMENT element-name (child1?)> | Indica que o elemento filho pode ocorrer zero ou uma vez dentro do elemento pai. | <! Endereço do ELEMENT (nome?)> O nome do elemento filho pode ocorrer zero ou uma vez dentro do endereço do nome do elemento . |
, | <! ELEMENT element-name (child1, child2)> | Ele fornece a sequência de elementos filhos separados por vírgula que devem ser incluídos no nome do elemento. | <! Endereço ELEMENT (nome, empresa)> Sequência do nome dos elementos filhos , empresa , que deve ocorrer na mesma ordem dentro do endereço do nome do elemento . |
| | <! ELEMENT element-name (child1 | child2)> | Ele permite fazer escolhas no elemento filho. | <! Endereço ELEMENT (nome | empresa)> Ele permite que você escolha um dos elementos filho, ou seja, nome ou empresa , que deve ocorrer dentro do endereço do nome do elemento . |
Regras
Precisamos seguir certas regras se houver mais de um conteúdo de elemento -
Sequences - Freqüentemente, os elementos nos documentos DTD devem aparecer em uma ordem distinta. Se for esse o caso, você define o conteúdo usando uma sequência.
A declaração indica que o elemento <address> deve ter exatamente três filhos - <name>, <company> e <phone> - e que eles devem aparecer nesta ordem. Por exemplo -
<!ELEMENT address (name,company,phone)>
Choices- Suponha que você precise permitir um ou outro elemento, mas não ambos. Nesses casos, você deve usar o caractere barra vertical (|). O pipe funciona como um OU exclusivo. Por exemplo -
<!ELEMENT address (mobile | landline)>
Conteúdo de elemento misto
Esta é a combinação de (#PCDATA) e elementos filhos. PCDATA significa dados de caracteres analisados, ou seja, texto que não é marcação. Nos modelos de conteúdo misto, o texto pode aparecer sozinho ou pode ser intercalado entre elementos. As regras para modelos de conteúdo misto são semelhantes ao conteúdo do elemento, conforme discutido na seção anterior.
Syntax
A seguir está uma sintaxe genérica para conteúdo de elemento misto -
<!ELEMENT elementname (#PCDATA|child1|child2)*>
ELEMENT é a tag de declaração do elemento.
elementname é o nome do elemento.
PCDATAé o texto que não é marcação. #PCDATA deve vir primeiro na declaração de conteúdo misto.
child1, child2 .. são os elementos e cada elemento deve ter sua própria definição dentro do DTD.
O operador (*) deve seguir a declaração de conteúdo misto se elementos filhos forem incluídos
As declarações dos elementos (#PCDATA) e filhos devem ser separadas pelo operador (|).
Example
A seguir está um exemplo simples que demonstra a declaração do elemento de conteúdo misto em um DTD.
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
<!DOCTYPE address [
<!ELEMENT address (#PCDATA|name)*>
<!ELEMENT name (#PCDATA)>
]>
<address>
Here's a bit of text mixed up with the child element.
<name>
Tanmay Patil
</name>
</address>
QUALQUER conteúdo do elemento
Você pode declarar um elemento usando a palavra-chave ANY no conteúdo. É mais frequentemente referido como elemento de categoria mista. ANY é útil quando você ainda não decidiu o conteúdo permitido do elemento.
Syntax
A seguir está a sintaxe para declarar elementos com QUALQUER conteúdo -
<!ELEMENT elementname ANY>
Aqui, a palavra-chave ANY indica que o texto (PCDATA) e / ou quaisquer elementos declarados no DTD podem ser usados dentro do conteúdo do elemento <elementname>. Eles podem ser usados em qualquer ordem qualquer número de vezes. No entanto, a palavra-chave ANY não permite incluir elementos que não estão declarados no DTD.
Example
A seguir está um exemplo simples que demonstra a declaração do elemento com QUALQUER conteúdo -
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
<!DOCTYPE address [
<!ELEMENT address ANY>
]>
<address>
Here's a bit of sample text
</address>
Neste capítulo, discutiremos sobre Atributos DTD. Atributo fornece mais informações sobre um elemento ou, mais precisamente, define uma propriedade de um elemento. Um atributo XML está sempre na forma de um par nome-valor. Um elemento pode ter qualquer número de atributos exclusivos.
A declaração de atributo é muito semelhante às declarações de elemento de muitas maneiras, exceto uma; em vez de declarar o conteúdo permitido para os elementos, você declara uma lista de atributos permitidos para cada elemento. Essas listas são chamadas de declaração ATTLIST.
Sintaxe
A sintaxe básica da declaração de atributos DTD é a seguinte -
<!ATTLIST element-name attribute-name attribute-type attribute-value>
Na sintaxe acima -
Os atributos DTD começam com <! ATTLIST palavra-chave se o elemento contiver o atributo.
element-name especifica o nome do elemento ao qual o atributo se aplica.
attribute-name especifica o nome do atributo que está incluído com o nome do elemento.
attribute-typedefine o tipo de atributos. Discutiremos mais sobre isso nas seções seguintes.
attribute-valueassume um valor fixo que os atributos devem definir. Discutiremos mais sobre isso nas seções seguintes.
Exemplo
Abaixo está um exemplo simples para declaração de atributo em DTD -
<?xml version = "1.0"?>
<!DOCTYPE address [
<!ELEMENT address ( name )>
<!ELEMENT name ( #PCDATA )>
<!ATTLIST name id CDATA #REQUIRED>
]>
<address>
<name id = "123">Tanmay Patil</name>
</address>
Vamos examinar o código acima -
Comece com a declaração XML com a seguinte instrução -
<?xml version = "1.0"?>
Imediatamente após o cabeçalho XML está a declaração do tipo de documento, comumente referido como DOCTYPE conforme mostrado abaixo -
O DOCTYPE informa ao analisador que um DTD está associado a este documento XML. A declaração DOCTYPE possui um ponto de exclamação (!) No início do nome do elemento.
<!DOCTYPE address [
A seguir está o corpo do DTD. Aqui, declaramos elemento e atributo -
<!ELEMENT address ( name )>
<!ELEMENT name ( #PCDATA )>
O id de atributo para o nome do elemento é definido conforme fornecido abaixo -
Aqui, o tipo de atributo é CDATA e seu valor é #REQUIRED .
<!ATTLIST name id CDATA #REQUIRED>
Regras de declaração de atributos
Todos os atributos usados em um documento XML devem ser declarados na Definição de Tipo de Documento (DTD) usando uma Declaração de Lista de Atributos
Os atributos podem aparecer apenas em tags iniciais ou vazias.
A palavra-chave ATTLIST deve estar em maiúsculas
Nenhum nome de atributo duplicado será permitido na lista de atributos de um determinado elemento.
Tipos de Atributo
Ao declarar atributos, você pode especificar como o processador deve tratar os dados que aparecem no valor. Podemos categorizar os tipos de atributos em três categorias principais -
Tipo de corda
Tipos tokenizados
Tipos enumerados
A tabela a seguir fornece um resumo dos diferentes tipos de atributos -
Sr. Não. | Tipo e descrição |
---|---|
1 | CDATA CDATA são dados de caractere (texto e não marcação). É um tipo de atributo de string . |
2 | ID É um identificador exclusivo do atributo. Não deve aparecer mais de uma vez. É um tipo de atributo tokenizado . |
3 | IDREF É usado para fazer referência a um ID de outro elemento. É usado para estabelecer conexões entre os elementos. É um tipo de atributo tokenizado . |
4 | IDREFS É usado para fazer referência a vários IDs. É um tipo de atributo tokenizado . |
5 | ENTITY Ele representa uma entidade externa no documento. É um tipo de atributo tokenizado . |
6 | ENTITIES Ele representa uma lista de entidades externas no documento. É um tipo de atributo tokenizado . |
7 | NMTOKEN É semelhante a CDATA e o valor do atributo consiste em um nome XML válido. É um tipo de atributo tokenizado . |
8 | NMTOKENS É semelhante a CDATA e o valor do atributo consiste em uma lista de nomes XML válidos. É um tipo de atributo tokenizado . |
9 | NOTATION Um elemento será referenciado a uma notação declarada no documento DTD. É um tipo de atributo enumerado . |
10 | Enumeration Permite definir uma lista específica de valores onde um dos valores deve corresponder. É um tipo de atributo enumerado . |
Declaração de valor de atributo
Em cada declaração de atributo, você deve especificar como o valor aparecerá no documento. Você pode especificar se um atributo -
pode ter um valor padrão
pode ter um valor fixo
É necessário
está implícito
Valores padrão
Ele contém o valor padrão. Os valores podem ser colocados entre aspas simples (') ou aspas duplas (").
Syntax
A seguir está a sintaxe de valor -
<!ATTLIST element-name attribute-name attribute-type "default-value">
onde valor-padrão é o valor do atributo definido.
Example
A seguir está um exemplo simples de declaração de atributo com valor padrão -
<?xml version = "1.0"?>
<!DOCTYPE address [
<!ELEMENT address ( name )>
<!ELEMENT name ( #PCDATA )>
<!ATTLIST name id CDATA "0">
]>
<address>
<name id = "123">
Tanmay Patil
</name>
</address>
Neste exemplo, temos o elemento de nome com id de atributo cujo valor padrão é 0 . O valor padrão foi colocado entre aspas duplas.
Valores FIXOS
A palavra-chave #FIXED seguida pelo valor fixo é usada quando você deseja especificar que o valor do atributo é constante e não pode ser alterado. Um uso comum de atributos fixos é especificar números de versão.
Syntax
A seguir está a sintaxe dos valores fixos -
<!ATTLIST element-name attribute-name attribute-type #FIXED "value" >
onde #FIXED é um valor de atributo definido.
Example
A seguir está um exemplo simples de declaração de atributo com valor FIXED -
<?xml version = "1.0"?>
<!DOCTYPE address [
<!ELEMENT address (company)*>
<!ELEMENT company (#PCDATA)>
<!ATTLIST company name NMTOKEN #FIXED "tutorialspoint">
]>
<address>
<company name = "tutorialspoint">we are a free online teaching faculty</company>
</address>
Neste exemplo, usamos a palavra-chave #FIXED onde indica que o valor "tutorialspoint" é o único valor para o nome do atributo do elemento <company>. Se tentarmos alterar o valor do atributo, ocorrerá um erro.
A seguir está um DTD inválido -
<?xml version = "1.0"?>
<!DOCTYPE address [
<!ELEMENT address (company)*>
<!ELEMENT company (#PCDATA)>
<!ATTLIST company name NMTOKEN #FIXED "tutorialspoint">
]>
<address>
<company name = "abc">we are a free online teaching faculty</company>
</address>
Valores REQUIRED
Sempre que você quiser especificar que um atributo é obrigatório, use a palavra-chave #REQUIRED.
Syntax
A seguir está a sintaxe de #REQUIRED -
<!ATTLIST element-name attribute-name attribute-type #REQUIRED>
onde #REQUIRED é um tipo de atributo definido.
Example
A seguir está um exemplo simples de declaração de atributo DTD com a palavra-chave #REQUIRED -
<?xml version = "1.0"?>
<!DOCTYPE address [
<!ELEMENT address ( name )>
<!ELEMENT name ( #PCDATA )>
<!ATTLIST name id CDATA #REQUIRED>
]>
<address>
<name id = "123">
Tanmay Patil
</name>
</address>
Neste exemplo temos usado palavra-chave #REQUIRED para especificar que o atributo id deve ser fornecido para o elemento de nome nome
Valores IMPLÍCITOS
Ao declarar atributos, você deve sempre especificar uma declaração de valor. Se o atributo que você está declarando não tem valor padrão, não tem valor fixo e não é obrigatório, você deve declarar que o atributo está implícito . A palavra-chave #IMPLIED é usada para especificar um atributo conforme implícito .
Syntax
A seguir está a sintaxe de #IMPLIED -
<!ATTLIST element-name attribute-name attribute-type #IMPLIED>
onde #IMPLIED é um tipo de atributo definido.
Example
A seguir está um exemplo simples de #IMPLIED
<?xml version = "1.0"?>
<!DOCTYPE address [
<!ELEMENT address ( name )>
<!ELEMENT name ( #PCDATA )>
<!ATTLIST name id CDATA #IMPLIED>
]>
<address>
<name />
</address>
Neste exemplo, usamos a palavra-chave #IMPLIED, pois não queremos especificar nenhum atributo a ser incluído no nome do elemento . É opcional.
Entidades são usadas para definir atalhos para caracteres especiais nos documentos XML. As entidades podem ser principalmente de quatro tipos -
Entidades integradas
Entidades de personagem
Entidades gerais
Entidades de parâmetro
Sintaxe de declaração de entidade
Em geral, as entidades podem ser declaradas internally ou externally. Vamos entender cada um deles e sua sintaxe da seguinte maneira -
Entidade Interna
Se uma entidade for declarada em um DTD, ela será chamada de entidade interna.
Syntax
A seguir está a sintaxe para declaração de entidade interna -
<!ENTITY entity_name "entity_value">
Na sintaxe acima -
entity_name é o nome da entidade seguido por seu valor entre aspas duplas ou aspas simples.
entity_value contém o valor do nome da entidade.
O valor da entidade da Entidade Interna é anulado pela adição do prefixo & ao nome da entidade, ou seja, & entity_name.
Example
A seguir está um exemplo simples de declaração de entidade interna -
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
<!DOCTYPE address [
<!ELEMENT address (#PCDATA)>
<!ENTITY name "Tanmay patil">
<!ENTITY company "TutorialsPoint">
<!ENTITY phone_no "(011) 123-4567">
]>
<address>
&name;
&company;
&phone_no;
</address>
No exemplo acima, os respectivos nomes de entidades name , company e phone_no são substituídos por seus valores no documento XML. Os valores da entidade são desreferenciados adicionando um prefixo & ao nome da entidade.
Salve este arquivo como sample.xmle abri-lo em qualquer navegador, você notará que os valores de entidade para nome , empresa , número_do_telefone são substituídos respectivamente.
Entidade Externa
Se uma entidade for declarada fora de um DTD, ela é chamada de entidade externa. Você pode se referir a uma entidade externa usando identificadores de sistema ou identificadores públicos.
Syntax
A seguir está a sintaxe para declaração de entidade externa -
<!ENTITY name SYSTEM "URI/URL">
Na sintaxe acima -
name é o nome da entidade.
SYSTEM é a palavra-chave.
URI/URL é o endereço da fonte externa entre aspas duplas ou simples.
Types
Você pode se referir a um DTD externo usando -
System Identifiers - Um identificador de sistema permite que você especifique a localização de um arquivo externo contendo declarações DTD.
Como você pode ver, ele contém a palavra-chave SYSTEM e uma referência de URI apontando para a localização do documento. A sintaxe é a seguinte -
<!DOCTYPE name SYSTEM "address.dtd" [...]>
Public Identifiers - Os identificadores públicos fornecem um mecanismo para localizar recursos DTD e são escritos conforme abaixo -
Como você pode ver, ele começa com a palavra-chave PUBLIC, seguida por um identificador especializado. Identificadores públicos são usados para identificar uma entrada em um catálogo. Os identificadores públicos podem seguir qualquer formato; entretanto, um formato comumente usado é chamado de identificadores públicos formais ou FPIs.
<!DOCTYPE name PUBLIC "-//Beginning XML//DTD Address Example//EN">
Example
Vamos entender a entidade externa com o seguinte exemplo -
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
<!DOCTYPE address SYSTEM "address.dtd">
<address>
<name>
Tanmay Patil
</name>
<company>
TutorialsPoint
</company>
<phone>
(011) 123-4567
</phone>
</address>
Abaixo está o conteúdo do arquivo DTD address.dtd -
<!ELEMENT address (name, company, phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
Entidades integradas
Todos os analisadores XML devem oferecer suporte a entidades integradas. Em geral, você pode usar essas referências de entidade em qualquer lugar. Você também pode usar texto normal no documento XML, como em conteúdos de elementos e valores de atributos.
Existem cinco entidades integradas que desempenham seu papel em XML bem formado, elas são -
E comercial: & amp;
Citação única: & apos;
Maior que: & gt;
Menor que: & lt;
Aspas duplas: & quot;
Exemplo
O exemplo a seguir demonstra a declaração de entidade integrada -
<?xml version = "1.0"?>
<note>
<description>I'm a technical writer & programmer</description>
<note>
Como você pode ver aqui, o & amp; o caractere é substituído por & sempre que o processador o encontra.
Entidades de personagem
Entidades de personagem são usadas para nomear algumas das entidades que são representações simbólicas de informações, ou seja, caracteres que são difíceis ou impossíveis de digitar podem ser substituídos por entidades de personagem.
Exemplo
O exemplo a seguir demonstra a declaração da entidade do personagem -
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
<!DOCTYPE author[
<!ELEMENT author (#PCDATA)>
<!ENTITY writer "Tanmay patil">
<!ENTITY copyright "©">
]>
<author>&writer;©right;</author>
Você notará aqui que usamos ©como valor para o caráter de copyright. Salve este arquivo como sample.xml e abra-o em seu navegador e você verá que o copyright foi substituído pelo caractere ©.
Entidades gerais
As entidades gerais devem ser declaradas no DTD antes que possam ser usadas em um documento XML. Em vez de representar apenas um único caractere, as entidades gerais podem representar caracteres, parágrafos e até mesmo documentos inteiros.
Sintaxe
Para declarar uma entidade geral, use uma declaração deste formulário geral em seu DTD -
<!ENTITY ename "text">
Exemplo
O exemplo a seguir demonstra a declaração geral da entidade -
<?xml version = "1.0"?>
<!DOCTYPE note [
<!ENTITY source-text "tutorialspoint">
]>
<note>
&source-text;
</note>
Sempre que um analisador XML encontra uma referência a uma entidade de texto-fonte , ele fornecerá o texto de substituição ao aplicativo no ponto da referência.
Entidades de parâmetro
O objetivo de uma entidade de parâmetro é permitir que você crie seções reutilizáveis de texto de substituição.
Sintaxe
A seguir está a sintaxe para declaração de entidade de parâmetro -
<!ENTITY % ename "entity_value">
entity_value é qualquer caractere que não seja '&', '%' ou '"'.
Exemplo
O exemplo a seguir demonstra a declaração da entidade do parâmetro. Suponha que você tenha declarações de elemento como abaixo -
<!ELEMENT residence (name, street, pincode, city, phone)>
<!ELEMENT apartment (name, street, pincode, city, phone)>
<!ELEMENT office (name, street, pincode, city, phone)>
<!ELEMENT shop (name, street, pincode, city, phone)>
Agora, suponha que você queira adicionar um país de elemento adicional , então você precisa adicioná-lo a todas as quatro declarações. Portanto, podemos ir para uma referência de entidade de parâmetro. Agora, usando a referência de entidade de parâmetro, o exemplo acima será -
<!ENTITY % area "name, street, pincode, city">
<!ENTITY % contact "phone">
As entidades de parâmetro são referenciadas da mesma forma que uma referência de entidade geral, apenas com um sinal de porcentagem em vez de um E comercial -
<!ELEMENT residence (%area;, %contact;)>
<!ELEMENT apartment (%area;, %contact;)>
<!ELEMENT office (%area;, %contact;)>
<!ELEMENT shop (%area;, %contact;)>
Quando o analisador lê essas declarações, ele substitui o texto de substituição da entidade pela referência da entidade.
Usamos DTD para descrever precisamente o documento XML. Os DTDs verificam a validade da estrutura e do vocabulário de um documento XML em relação às regras gramaticais da linguagem XML apropriada. Agora, para verificar a validade do DTD, os seguintes procedimentos podem ser usados -
Using XML DTD validation tools - Você pode usar alguns IDEs como XML Spy (não gratuito) e XMLStarlet (código aberto) para validar arquivos XML em documentos DTD.
Using XML DTD on-line validators- O W3C Markup Validation Service foi desenvolvido para validar documentos da web. Use o validador online para verificar a validação do seu XML DTD aqui .
Write your own XML validators with XML DTD validation API - Versões mais recentes do JDK (acima de 1.4) suportam API de validação XML DTD. Você pode escrever seu próprio código validador para verificar a validade da validação XML DTD.