DTD - Elementos

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 mistura 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. Em 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 comumente 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, quantas vezes quiser. No entanto, a palavra-chave ANY não permite incluir elementos que não sã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>