XML知識點滴(7)
(引用文章,版權歸作者,如需删除請聯系我)
屬性清單聲明
n 在元素開始标簽的名稱和“>”符号之間可以插入屬性清單(Attribute list)。
n 屬性可以為空,不包含任何内容(如:屬性名稱=””),但等号和引号不能省略。
n 除了可以使用空格将屬性值隔開,也可以使用換行符或制表符。
n 屬性在屬性清單中出現的順序對于XML分析器而言是不重要的。在設計XML應用程式的時候,程式代碼最好不要依賴于屬性的出現順序。
n 在屬性清單中,不允許出現完全相同名稱的屬性。
n 屬性用于将名字-值對與元素進行關聯。屬性說明隻能在開始标簽和空元素标簽中出現。屬性清單聲明詳細說明了與給定元素類型相關聯的每一個屬性的名字,資料類型和預設值(如果有的話)。
n 屬性清單聲明的文法如下:
<!ATTLIST 元素名 屬性名 屬性類型 預設聲明>
元素名是屬性所屬的元素名字,屬性是屬性的命名,屬性類型則用來指定該屬性是屬于 哪種類型,共有十種類型,預設聲明用于說明在元素中該屬性是否必須出現,如果不是必須出現,那麼當該屬性沒有出現時,XML處理器應該如何處理。
n 預設聲明可以有四種預設設定。#REQUIRED、#IMPLIED、#FIXED 預設值、隻有預設值。
n #REQUIRED
關鍵字REQUIRED說明必須為元素提供該屬性。
n #IMPLIED
關鍵字IMPLIED說明元素可以包含該屬性,也可以不包含該屬性。
n #FIXED 預設值
關鍵字FIXED 預設值,說明一個固定的屬性預設值,文檔的編寫者不能修改該屬性的 值。如果元素中不包含這個屬性,XML處理器将以聲明的預設值向應用程式報告該屬性。
n 隻有預設值
與FIXED 預設值一樣,如果元素不包含該屬性,XML處理器将以聲明的預設值向應 用程式報告該屬性。不同的是,這種聲明方式屬性的值是可以改變的。
屬性類型
n 在屬性清單聲明時,總共有十種屬性類型可以選擇,分别是:CDATA、Enumerate、ID、IDREF、IDREFS、ENTIT、ENTITIES、NMTOKEN、NMTOKENS、NOTATION。
n CDATA
這是最常用的一種屬性類型,表明屬性值為字元資料,與元素内容說明中的#PCDATA相同。如果屬性值需要出現小于号(<)和雙引号(”),可以通過預定義實體引用或字元引用的方式插入小于号、大于号和雙引号。如果包含的和号(&)不是字元或實體引用的起始定界符,也必須使用預定義實體引用或者字元引用的方式插入。
n 枚舉類型
在聲明屬性時,可以限制屬性的取值隻能從一個清單中選者,這類屬性屬于枚舉類型。枚舉類型的屬性有時候很有用的,例如:person元素有一個sex屬性,我們希望這個屬性取值隻能是male或female,在聲明屬性時,将這兩個值放到圓括号中,并用豎線(|)分隔,如下所示:
<!ATTLIST person sex (male|female) #REQUIRED>
清單中的可選屬性值,不用加雙引号(”)或單引号(’),但是在給屬性指派時,需要帶上雙引号或單引号。另外要注意的是,在給屬性指派時,不僅必須使用枚舉類型聲明中的可選值,而且還要注意屬性的大小寫,Male、MALE、Female、FEMALE等都是無效的。
n ID、IDREF、IDREFS
1) 一個ID類型的屬性值唯一辨別XML文檔中的一個元素。
2) 一個ID類型的屬性值必須遵守XML名稱定義的規則,以字母、下劃線開頭,名稱中可以包含字母、數字、下劃線以及其他在XML标準中允許的字元,名稱中不能帶有空格。
3) 一個元素隻能有一個ID類型的屬性,ID類型的屬性必須設定為#IMPLIED或者#REQUIRED,因為ID類型屬性的每一個取值都是用來辨別一個特定元素,為ID類型的屬性提供預設值,特别是固定的預設值是毫無意義的。
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE company[
<!ELEMENT company (employee*)>
<!ELEMENT employee (name)>
<!ELEMENT name (#PCDATA)>
<!ATTLIST employee sn ID #REQUIRED>
]>
<company>
<employee sn="E-200402100001">
<name>張三</name>
</employee>
<employee sn="E-200402100006">
<name>李四</name>
</employee>
</company>
n IDREF類型的屬性值為同一文檔中的另一個元素的ID類型的屬性值,而這另一個元素的ID類型的屬性值必須是已經存在的。
n 利用ID和IDREF這兩種類型的屬性,我們可以在兩個對象之間建立一種關聯關系。
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE company[
<!ELEMENT company (employee*)>
<!ELEMENT employee (name)>
<!ELEMENT name (#PCDATA)>
<!ATTLIST employee sn ID #REQUIRED>
<!ATTLIST employee manager IDREF #IMPLIED>
]>
<company>
<employee sn="E-200402100001">
<name>張三</name>
</employee>
<employee sn="E-200402100006" manager=" E-200402100001">
<name>李四</name>
</employee>
<employee sn="E-200402100002" manager=" E-200402100001">
<name>王五</name>
</employee>
</company>
n 如果一個屬性需要引用文檔中多個ID屬性的屬性值,那麼可以把它聲明為具有IDREFS類型。IDREFS類型的屬性值是一系列以空格分隔的ID類型的屬性值,而且必須與文檔中已有的ID類型屬性值相比對。
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE library[
<!ELEMENT