- DTD 有用資源
- DTD - 快速指南
- DTD - 有用資源
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>
在上面的示例中,相應的實體名稱name、company和phone_no在 XML 文件中被其值替換。實體值透過在實體名稱前新增字首 & 來取消引用。
將此檔案儲存為sample.xml並在任何瀏覽器中開啟它,您會注意到name、company、phone_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 中發揮作用,它們是:
和號:&
單引號:'
大於號:>
小於號:<
雙引號:"
示例
以下示例演示了內建實體宣告:
<?xml version = "1.0"?> <note> <description>I'm a technical writer & programmer</description> <note>
如您所見,每當處理器遇到此字元時,&字元將被&替換。
字元實體
字元實體用於命名一些實體,這些實體是資訊的符號表示,即難以或不可能鍵入的字元可以用字元實體替換。
示例
以下示例演示了字元實體宣告:
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?> <!DOCTYPE author[ <!ELEMENT author (#PCDATA)> <!ENTITY writer "Tanmay patil"> <!ENTITY copyright "©"> ]> <author>&writer;©right;</author>
您會注意到這裡我們使用了©作為版權字元的值。將此檔案儲存為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;)>
當解析器讀取這些宣告時,它會將實體的替換文字替換為實體引用。