DTD實體


實體是用於定義XML文件中特殊字元的快捷方式。 實體主要有四種型別 -

  • 內建實體
  • 字元實體
  • 常規實體
  • 引數實體

1. 實體宣告語法

通常,實體可以在內部或外部宣告。 讓我們了解以下各項及其語法如下 -

1.1. 內部實體
如果在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 "Max su">
   <!ENTITY company "Yiibai">
   <!ENTITY phone_no "(086) 123-4567890">
]>

<address>
   &name;
   &company;
   &phone_no;
</address>

在上面的範例中,各個實體名稱 - namecompanyphone_no由它們在XML文件中的值替換。 通過向實體名稱新增字首&來取消參照實體值。

將此檔案另存為sample.xml,並在瀏覽器中開啟它,注意可以看到:namecompanyphone_no的實體值都被替換。

1.2. 外部實體

如果在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>
      Max Su
   </name>

   <company>
      Yiibai Yiibai
   </company>

   <phone>
      (086) 123-4567890
   </phone>
</address>

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

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

2. 內建實體

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

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

  • &符號:&amp;
  • 單引號:&apos;
  • 大於號:&gt;
  • 小於號:&lt;
  • 雙引號:&quot;

範例

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

<?xml version = "1.0"?>

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

在這裡看到&amp; 只要處理器遇到此問題,就會用&替換字元。

3. 字元實體

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

範例

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

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

注意到使用?作為版權特徵的值。 將此檔案另存為sample.xml並在瀏覽器中開啟它,將看到版權被字元?替換。

4. 常規實體

需要先在DTD中宣告常規實體,然後才能在XML文件中使用它們。 常規實體可以表示字元,段落甚至整個文件,而不是僅表示單個字元。

語法

要宣告常規實體,請在DTD中使用此一般形式的宣告 -

<!ENTITY ename "text">

範例

以下範例演示了常規實體宣告 -

<?xml version = "1.0"?>

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

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

每當XML解析器遇到對源文字實體的參照時,它在參照時將替換文字提供給應用程式。

5. 引數實體

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

語法

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

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

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