DTD屬性
在本章中,我們將討論學習DTD屬性。 屬性提供了有關元素的更多信息,或者更確切地說,它定義了元素的屬性。 XML屬性始終採用名稱-值 對的形式。 元素可以具有任意數量的唯一屬性。
屬性聲明在很多方面與元素聲明非常相似; 可以爲每個元素聲明一個允許的屬性列表,而不是爲元素聲明允許的內容。 這些列表稱爲ATTLIST
聲明。
語法
DTD屬性聲明的基本語法如下 -
<!ATTLIST element-name attribute-name attribute-type attribute-value>
在上面的語法中 -
- 如果元素包含屬性,則DTD屬性以
<!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開始 -
<?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>
屬性聲明規則
- 必須使用屬性列表聲明在文檔類型定義(DTD)中聲明XML文檔中使用的所有屬性.
- 屬性可能只出現在開始或空標籤中。
- 關鍵字
ATTLIST
必須爲大寫 - 對於給定元素,屬性列表中不允許重複的屬性名稱。
1. 屬性類型
聲明屬性時,可以指定處理器應如何處理值中顯示的數據。可以將屬性類型分爲三個主要類別 -
- 字符串類型
- 標記類型
- 枚舉類型
下表提供了不同屬性類型的摘要 -
- 字符串類型
- 標記類型
- 枚舉類型
下表提供了不同屬性類型的說明 -
序號
類型
描述
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. 屬性值聲明
在每個屬性聲明中,必須指定值在文檔中的顯示方式。可以指定屬性爲 -
- 有一個默認值
- 有固定的值
- 是必需的
- 是隱含的
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
關鍵字,因爲我們不希望指定要包含在元素名稱中的任何屬性。 它是可選的。