DTD - 實體



實體用於在 XML 文件中定義特殊字元的快捷方式。實體主要可以分為四種類型:

  • 內建實體

  • 字元實體

  • 通用實體

  • 引數實體

實體宣告語法

一般來說,實體可以內部外部宣告。讓我們分別瞭解一下這些以及它們的語法:

內部實體

如果實體在 DTD 中宣告,則稱為內部實體。

語法

以下是內部實體宣告的語法:

<!ENTITY entity_name "entity_value">

在上述語法中:

  • entity_name 是實體的名稱,後跟雙引號或單引號內的值。

  • entity_value 儲存實體名稱的值。

  • 內部實體的實體值透過在實體名稱前新增字首 & 來取消引用,即 &entity_name。

示例

以下是內部實體宣告的一個簡單示例:

<?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>

在上面的示例中,相應的實體名稱namecompanyphone_no在 XML 文件中被其值替換。實體值透過在實體名稱前新增字首 & 來取消引用。

將此檔案儲存為sample.xml並在任何瀏覽器中開啟它,您會注意到namecompanyphone_no的實體值分別被替換了。

外部實體

如果實體在 DTD 外部宣告,則稱為外部實體。您可以透過使用系統識別符號或公共識別符號來引用外部實體。

語法

以下是外部實體宣告的語法:

<!ENTITY name SYSTEM "URI/URL">

在上述語法中:

  • name 是實體的名稱。

  • SYSTEM 是關鍵字。

  • URI/URL 是外部源的地址,用雙引號或單引號括起來。

型別

您可以透過以下方式引用外部 DTD:

  • 系統識別符號 - 系統識別符號使您能夠指定包含 DTD 宣告的外部檔案的位置。

    如您所見,它包含關鍵字 SYSTEM 和一個指向文件位置的 URI 引用。語法如下:

<!DOCTYPE name SYSTEM "address.dtd" [...]>
  • 公共識別符號 - 公共識別符號提供了一種查詢 DTD 資源的機制,並按如下方式編寫:

    如您所見,它以關鍵字 PUBLIC 開頭,後跟一個專門的識別符號。公共識別符號用於標識目錄中的條目。公共識別符號可以遵循任何格式;但是,一種常用的格式稱為正式公共識別符號或 FPI。

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

示例

讓我們透過以下示例瞭解外部實體:

<?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>

以下是 DTD 檔案address.dtd的內容:

<!ELEMENT address (name, company, phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>

內建實體

所有 XML 解析器都必須支援內建實體。通常,您可以在任何地方使用這些實體引用。您也可以在 XML 文件中使用普通文字,例如在元素內容和屬性值中。

有五個內建實體在格式良好的 XML 中發揮作用,它們是:

  • 和號:&amp;

  • 單引號:&apos;

  • 大於號:&gt;

  • 小於號:&lt;

  • 雙引號:&quot;

示例

以下示例演示了內建實體宣告:

<?xml version = "1.0"?>

<note>
   <description>I'm a technical writer & programmer</description>
<note>

如您所見,每當處理器遇到此字元時,&amp;字元將被&替換。

字元實體

字元實體用於命名一些實體,這些實體是資訊的符號表示,即難以或不可能鍵入的字元可以用字元實體替換。

示例

以下示例演示了字元實體宣告:

<?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>

您會注意到這裡我們使用了&#169;作為版權字元的值。將此檔案儲存為sample.xml並在瀏覽器中開啟它,您將看到版權被字元©替換。

通用實體

通用實體必須在 DTD 中宣告,然後才能在 XML 文件中使用。通用實體不僅可以表示單個字元,還可以表示字元、段落,甚至整個文件。

語法

要宣告一個通用實體,請在您的 DTD 中使用此通用形式的宣告:

<!ENTITY ename "text">

示例

以下示例演示了通用實體宣告:

<?xml version = "1.0"?>

<!DOCTYPE note [
   <!ENTITY source-text "tutorialspoint">
]>

<note>
   &source-text;
</note>

每當 XML 解析器遇到對source-text實體的引用時,它將在引用的位置嚮應用程式提供替換文字。

引數實體

引數實體的目的是使您能夠建立可重用的替換文字部分。

語法

以下是引數實體宣告的語法:

<!ENTITY % ename "entity_value">
  • entity_value 是任何不是 '&'、'%' 或 ' " ' 的字元。

示例

以下示例演示了引數實體宣告。假設您有以下元素宣告:

<!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)>

現在假設您想新增額外的元素country,那麼您需要將其新增到所有四個宣告中。因此,我們可以使用引數實體引用。現在使用引數實體引用,上面的示例將是:

<!ENTITY % area "name, street, pincode, city">
<!ENTITY % contact "phone">

引數實體的取消引用方式與通用實體引用相同,只是使用百分號而不是和號:

<!ELEMENT residence (%area;, %contact;)>
<!ELEMENT apartment (%area;, %contact;)>
<!ELEMENT office (%area;, %contact;)>
<!ELEMENT shop (%area;, %contact;)>

當解析器讀取這些宣告時,它會將實體的替換文字替換為實體引用。

廣告

© . All rights reserved.