DTD - Entidades

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 referenciados pela adição de 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; 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 "&#169;">
]>
<author>&writer;&copyright;</author>

Você notará aqui que usamos &#169;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 de 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 às 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 maneira 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.