在本章中,我們將討論學習DTD屬性。 屬性提供了有關元素的更多資訊,或者更確切地說,它定義了元素的屬性。 XML屬性始終採用名稱-值 對的形式。 元素可以具有任意數量的唯一屬性。
屬性宣告在很多方面與元素宣告非常相似; 可以為每個元素宣告一個允許的屬性列表,而不是為元素宣告允許的內容。 這些列表稱為ATTLIST
宣告。
語法
DTD屬性宣告的基本語法如下 -
<!ATTLIST element-name attribute-name attribute-type attribute-value>
在上面的語法中 -
<!ATTLIST
關鍵字開頭。element-name
指定屬性適用元素的名稱。attribute-name
指定element-name
包含的屬性的名稱。attribute-type
定義屬性的型別,將在以下部分中對此進行更多討論。attribute-value
採用屬性必須定義的固定值。將在以下部分中對此進行更多討論。範例
下面是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 version = "1.0"?>
緊跟XML頭之後是文件型別宣告,通常稱為DOCTYPE
,DOCTYPE
通知解析器DTD與此XML文件相關聯。 DOCTYPE
宣告在元素名稱的開頭有一個感嘆號(!
)。如下所示 -
<!DOCTYPE address [
以下是DTD的主體,這裡宣告了元素和屬性 -
<!ELEMENT address ( name )>
<!ELEMENT name ( #PCDATA )>
id
,它的屬性型別是CDATA
,它的值為#REQUIRED
。<!ATTLIST name id CDATA #REQUIRED>
屬性宣告規則
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 | Enumeration |
它允許定義其中一個值必須匹配的特定值列表。 它是列舉屬性型別。 |
在每個屬性宣告中,必須指定值在文件中的顯示方式。可以指定屬性為 -
2.1. 預設值
它包含預設值。 值可以用單引號(‘)或雙引號(「)括起來。
語法
以下是指定值的語法 -
<!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
。預設值包含在雙引號中。
2.2. 固定值
如果要指定屬性值是常數且無法更改,則使用#FIXED
關鍵字後跟固定值。 固定屬性的常見用途是指定版本號。
語法
以下是固定值的語法 -
<!ATTLIST element-name attribute-name attribute-type #FIXED "value" >
其中#FIXED
是定義的屬性值。
範例
以下是具有FIXED
值的屬性宣告的範例 -
<?xml version = "1.0"?>
<!DOCTYPE address [
<!ELEMENT address (company)*>
<!ELEMENT company (#PCDATA)>
<!ATTLIST company name NMTOKEN #FIXED "hiyizhi">
]>
<address>
<company name = "hiyizhi">we are a free online teaching faculty</company>
</address>
在這個例子中,使用了關鍵字#FIXED
,它表示"hiyizhi"
值是元素<company>
的屬性名稱的唯一值。 如果嘗試更改屬性值,則會出錯。
以下是無效的DTD -
<?xml version = "1.0"?>
<!DOCTYPE address [
<!ELEMENT address (company)*>
<!ELEMENT company (#PCDATA)>
<!ATTLIST company name NMTOKEN #FIXED "hiyizhi">
]>
<address>
<company name = "abc">we are a free online teaching faculty</company>
</address>
2.3. 必需值
只要想要指定需要屬性,可使用#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">
Max Su
</name>
</address>
在此範例中,使用#REQUIRED
關鍵字指定必須為name
元素提供屬性id
2.4. 隱含值
宣告屬性時,必須始終指定值宣告。 如果宣告的屬性沒有預設值,沒有固定值,並且不是必需的,那麼必須宣告該屬性是隱含的。 關鍵字#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
關鍵字,因為我們不希望指定要包含在元素名稱中的任何屬性。 它是可選的。