DTD - Entidades

As entidades são usadas para definir atalhos para caracteres especiais nos documentos XML. As entidades podem ser principalmente de quatro tipos -

  • Entidades internas

  • Entidades de caráter

  • Entidades gerais

  • Entidades de parâmetro

Sintaxe da declaração de entidade

Em geral, as entidades podem ser declaradas interna ou externamente . Vamos entender cada um deles e sua sintaxe da seguinte maneira:

Entidade Interna

Se uma entidade é declarada dentro de uma DTD, é chamada como entidade interna.

Sintaxe

A seguir está a sintaxe da declaração interna da entidade -

<!ENTITY entity_name "entity_value">

Na sintaxe acima -

  • entity_name é o nome da entidade seguido pelo seu valor entre aspas duplas ou aspas simples.

  • entity_value mantém o valor para o nome da entidade.

  • O valor da entidade da Entidade interna é retirado da referência adicionando o prefixo & ao nome da entidade, ou seja, & entity_name.

Exemplo

A seguir, é apresentado 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 entidade, empresa e phone_no são substituídos por seus valores no documento XML. Os valores da entidade são des-referenciados adicionando o prefixo & ao nome da entidade.

Salve esse arquivo como sample.xml e abra-o em qualquer navegador; você perceberá que os valores da entidade para nome , empresa e telefone_no são substituídos respectivamente.

Entidade Externa

Se uma entidade é declarada fora de uma DTD, é chamada como entidade externa. Você pode se referir a uma entidade externa usando identificadores de sistema ou públicos.

Sintaxe

A seguir está a sintaxe da 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.

Tipos

Você pode se referir a uma DTD externa usando -

  • Identificadores do sistema - Um identificador do sistema permite especificar o local de um arquivo externo que contém declarações DTD.

    Como você pode ver, ele contém a palavra-chave SYSTEM e uma referência de URI apontando para o local do documento. A sintaxe é a seguinte -

<!DOCTYPE name SYSTEM "address.dtd" [...]>
  • Identificadores públicos - os identificadores públicos fornecem um mecanismo para localizar recursos de DTD e são escritos da seguinte forma:

    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. Identificadores públicos podem seguir qualquer formato; no entanto, um formato comumente usado é chamado de identificadores públicos formais ou FPIs.

<!DOCTYPE name PUBLIC "-//Beginning XML//DTD Address Example//EN">

Exemplo

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 internas

Todos os analisadores de XML devem suportar entidades internas. Em geral, você pode usar essas referências de entidade em qualquer lugar. Você também pode usar texto normal no documento XML, como no conteúdo do elemento e nos valores do atributo.

Existem cinco entidades internas que desempenham seu papel em XML bem formado, elas são:

  • e comercial: & amp;

  • Aspa simples: & apos;

  • Maior que: & gt;

  • Menos que: & lt;

  • Aspas duplas: & quot;

Exemplo

O exemplo a seguir demonstra a declaração da entidade interna -

<?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 encontrar isso.

Entidades de caráter

Entidades de caracteres são usadas para nomear algumas das entidades que são representações simbólicas de informações, ou seja, caracteres difíceis ou impossíveis de digitar podem ser substituídos por Entidades de caracteres.

Exemplo

O exemplo a seguir demonstra a declaração da entidade de caractere -

<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
<!DOCTYPE author[
   <!ELEMENT author (#PCDATA)>
   <!ENTITY writer "Tanmay patil">
   <!ENTITY copyright "&#169;">
]>
<author>&writer;&copyright;</author>

Você notará aqui que usamos o & # 169; como valor para o caractere de direitos autorais. Salve este arquivo como sample.xml e abra-o no seu navegador e você verá que os direitos autorais são substituídos pelo caractere ©.

Entidades gerais

As entidades gerais devem ser declaradas na DTD antes de poderem ser usadas em um documento XML. Em vez de representar apenas um caractere, as entidades gerais podem representar caracteres, parágrafos e até documentos inteiros.

Sintaxe

Para declarar uma entidade geral, use uma declaração deste formulário geral em sua 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 encontrar uma referência à entidade de texto de origem , ele fornecerá o texto de substituição para o 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 da declaração de entidade de parâmetro -

<!ENTITY % ename "entity_value">
  • entity_value é qualquer caractere que não seja um '&', '%' ou '"'.

Exemplo

O exemplo a seguir demonstra a declaração da entidade de 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 adicional e, em seguida, você deve 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 desreferenciadas da mesma maneira que uma referência geral de entidade, 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.