- DTD 有用資源
- DTD - 快速指南
- DTD - 有用資源
DTD - 屬性
本章將討論 DTD 屬性。屬性提供了關於元素的更多資訊,更準確地說,它定義了元素的一個屬性。XML 屬性始終採用名稱-值對的形式。一個元素可以擁有任意數量的唯一屬性。
屬性宣告在許多方面都非常類似於元素宣告,只有一個例外;您宣告的是每個元素允許的屬性列表,而不是宣告元素允許的內容。這些列表稱為 ATTLIST 宣告。
語法
DTD 屬性宣告的基本語法如下:
<!ATTLIST element-name attribute-name attribute-type attribute-value>
在上文的語法中:
如果元素包含屬性,則 DTD 屬性以 <!ATTLIST 關鍵字開頭。
元素名稱指定應用屬性的元素的名稱。
屬性名稱指定包含在元素名稱中的屬性的名稱。
屬性型別定義屬性的型別。我們將在以下部分詳細討論這一點。
屬性值採用屬性必須定義的固定值。我們將在以下部分詳細討論這一點。
示例
以下是 DTD 中屬性宣告的一個簡單示例:
<?xml version = "1.0"?> <!DOCTYPE address [ <!ELEMENT address ( name )> <!ELEMENT name ( #PCDATA )> <!ATTLIST name id CDATA #REQUIRED> ]> <address> <name id = "123">Tanmay Patil</name> </address>
讓我們來看一下上面的程式碼:
以包含以下語句的 XML 宣告開頭:
<?xml version = "1.0"?>
緊跟在 XML 頭之後的是文件型別宣告,通常稱為 DOCTYPE,如下所示:
DOCTYPE 告知解析器此 XML 文件與一個 DTD 關聯。DOCTYPE 宣告的元素名稱開頭有一個感嘆號 (!) 。
<!DOCTYPE address [
以下是 DTD 的主體。這裡我們聲明瞭元素和屬性:
<!ELEMENT address ( name )> <!ELEMENT name ( #PCDATA )>
元素 name 的屬性 id 定義如下:
這裡的屬性型別是 CDATA,其值為 #REQUIRED。
<!ATTLIST name id CDATA #REQUIRED>
屬性宣告規則
XML 文件中使用的所有屬性都必須使用屬性列表宣告在文件型別定義 (DTD) 中宣告。
屬性只能出現在開始標記或空標記中。
關鍵字 ATTLIST 必須大寫。
對於給定的元素,屬性列表中不允許出現重複的屬性名稱。
屬性型別
宣告屬性時,您可以指定處理器如何處理值中出現的資料。我們可以將屬性型別分為三大類:
字串型別
標記化型別
列舉型別
下表總結了不同的屬性型別:
| 序號 | 型別和描述 |
|---|---|
| 1 | CDATA CDATA 是字元資料(文字而不是標記)。它是一種 字串屬性型別。 |
| 2 | ID 它是屬性的唯一識別符號。它不應該出現多次。它是一種 標記化屬性型別。 |
| 3 | IDREF 它用於引用另一個元素的 ID。它用於建立元素之間的連線。它是一種 標記化屬性型別。 |
| 4 | IDREFS 它用於引用多個 ID。它是一種 標記化屬性型別。 |
| 5 | ENTITY 它表示文件中的外部實體。它是一種 標記化屬性型別。 |
| 6 | ENTITIES 它表示文件中外部實體的列表。它是一種 標記化屬性型別。 |
| 7 | NMTOKEN 它類似於 CDATA,屬性值由有效的 XML 名稱組成。它是一種 標記化屬性型別。 |
| 8 | NMTOKENS 它類似於 CDATA,屬性值由有效的 XML 名稱列表組成。它是一種 標記化屬性型別。 |
| 9 | NOTATION 元素將被引用到 DTD 文件中宣告的符號。它是一種 列舉屬性型別。 |
| 10 | 列舉 它允許定義一個特定值的列表,其中必須匹配其中一個值。它是一種 列舉屬性型別。 |
屬性值宣告
在每個屬性宣告中,您必須指定值在文件中將如何出現。您可以指定屬性:
可以具有預設值
可以具有固定值
是必需的
是隱含的
預設值
它包含預設值。值可以包含在單引號 (') 或雙引號 (") 中。
語法
以下是值的語法:
<!ATTLIST element-name attribute-name attribute-type "default-value">
其中 default-value 是定義的屬性值。
示例
以下是一個帶有預設值的屬性宣告的簡單示例:
<?xml version = "1.0"?>
<!DOCTYPE address [
<!ELEMENT address ( name )>
<!ELEMENT name ( #PCDATA )>
<!ATTLIST name id CDATA "0">
]>
<address>
<name id = "123">
Tanmay Patil
</name>
</address>
在這個例子中,我們有 name 元素,其屬性 id 的預設值為 0。預設值包含在雙引號中。
固定值
當您想指定屬性值是常量且不能更改時,使用 #FIXED 關鍵字後跟固定值。固定屬性的一個常見用途是指定版本號。
語法
以下是固定值的語法:
<!ATTLIST element-name attribute-name attribute-type #FIXED "value" >
其中 #FIXED 是定義的屬性值。
示例
以下是一個帶有固定值的屬性宣告的簡單示例:
<?xml version = "1.0"?> <!DOCTYPE address [ <!ELEMENT address (company)*> <!ELEMENT company (#PCDATA)> <!ATTLIST company name NMTOKEN #FIXED "tutorialspoint"> ]> <address> <company name = "tutorialspoint">we are a free online teaching faculty</company> </address>
在這個例子中,我們使用了 #FIXED 關鍵字,它表示 "tutorialspoint" 是元素 <company> 的屬性 name 的唯一值。如果我們嘗試更改屬性值,則會報錯。
以下是一個無效的 DTD:
<?xml version = "1.0"?> <!DOCTYPE address [ <!ELEMENT address (company)*> <!ELEMENT company (#PCDATA)> <!ATTLIST company name NMTOKEN #FIXED "tutorialspoint"> ]> <address> <company name = "abc">we are a free online teaching faculty</company> </address>
必需值
當您想指定屬性是必需時,使用 #REQUIRED 關鍵字。
語法
以下是 #REQUIRED 的語法:
<!ATTLIST element-name attribute-name attribute-type #REQUIRED>
其中 #REQUIRED 是定義的屬性型別。
示例
以下是一個帶有 #REQUIRED 關鍵字的 DTD 屬性宣告的簡單示例:
<?xml version = "1.0"?>
<!DOCTYPE address [
<!ELEMENT address ( name )>
<!ELEMENT name ( #PCDATA )>
<!ATTLIST name id CDATA #REQUIRED>
]>
<address>
<name id = "123">
Tanmay Patil
</name>
</address>
在這個例子中,我們使用了 #REQUIRED 關鍵字來指定必須為元素名稱 name 提供屬性 id。
隱含值
宣告屬性時,您必須始終指定一個值宣告。如果要宣告的屬性沒有預設值、沒有固定值且不是必需的,則必須將屬性宣告為 隱含的。關鍵字 #IMPLIED 用於將屬性宣告為 隱含的。
語法
以下是 #IMPLIED 的語法:
<!ATTLIST element-name attribute-name attribute-type #IMPLIED>
其中 #IMPLIED 是定義的屬性型別。
示例
以下是一個 #IMPLIED 的簡單示例
<?xml version = "1.0"?> <!DOCTYPE address [ <!ELEMENT address ( name )> <!ELEMENT name ( #PCDATA )> <!ATTLIST name id CDATA #IMPLIED> ]> <address> <name /> </address>
在這個例子中,我們使用了 #IMPLIED 關鍵字,因為我們不想指定任何要包含在元素 name 中的屬性。它是可選的。