DTD - Elementos
Em uma DTD, os elementos são declarados com uma declaração ELEMENT.
Declarando Elementos
Em um DTD, os elementos XML são declarados com a seguinte sintaxe:
<!ELEMENT element-name category>
or
<!ELEMENT element-name (element-content)>
Elementos vazios
Elementos vazios são declarados com a palavra-chave de categoria EMPTY:
<!ELEMENT element-name EMPTY>
Example:
<!ELEMENT br EMPTY>
XML example:
<br />
Elementos com Dados de Caracteres Analisados
Elementos com apenas dados de caracteres analisados são declarados com #PCDATA entre parênteses:
<!ELEMENT element-name (#PCDATA)>
Example:
<!ELEMENT from (#PCDATA)>
Elementos com qualquer conteúdo
Elementos declarados com a palavra-chave de categoria ANY, podem conter qualquer combinação de dados analisáveis:
<!ELEMENT element-name ANY>
Example:
<!ELEMENT note ANY>
Elementos com Filhos (sequências)
Elementos com um ou mais filhos são declarados com o nome dos elementos filhos entre parênteses:
<!ELEMENT element-name (child1)>
or
<!ELEMENT element-name (child1,child2,...)>
Example:
<!ELEMENT note (to,from,heading,body)>
Quando os filhos são declarados em uma sequência separada por vírgulas, os filhos devem aparecer na mesma sequência no documento. Em uma declaração completa, os filhos também devem ser declarados, e os filhos também podem ter filhos. A declaração completa do elemento "note" é:
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
Declarando apenas uma ocorrência de um elemento
<!ELEMENT element-name (child-name)>
Example:
<!ELEMENT note (message)>
O exemplo acima declara que o elemento filho "message" deve ocorrer uma vez, e apenas uma vez dentro do elemento "note".
Declarando o Mínimo de Uma Ocorrência de um Elemento
<!ELEMENT element-name (child-name+)>
Example:
<!ELEMENT note (message+)>
O sinal + no exemplo acima declara que o elemento filho "message" deve ocorrer uma ou mais vezes dentro do elemento "note".
Declarando zero ou mais ocorrências de um elemento
<!ELEMENT element-name (child-name*)>
Example:
<!ELEMENT note (message*)>
O sinal * no exemplo acima declara que o elemento filho "message" pode ocorrer zero ou mais vezes dentro do elemento "note".
Declarando Zero ou Uma Ocorrência de um Elemento
<!ELEMENT element-name (child-name?)>
Example:
<!ELEMENT note (message?)>
O ? sign no exemplo acima declara que o elemento filho "message" pode ocorrer zero ou uma vez dentro do elemento "note".
Declarando ou/ou Conteúdo
<!ELEMENT note (to,from,header,(message|body))>
O exemplo acima declara que o elemento "note" deve conter um elemento "to", um elemento "from", um elemento "header" e um elemento "message" ou "body".
Declarando conteúdo misto
<!ELEMENT note (#PCDATA|to|from|header|message)*>
O exemplo acima declara que o elemento "note" pode conter zero ou mais ocorrências de dados de caracteres analisados, elementos "to", "from", "header" ou "message".