一個有效的XML文檔,必須對元素的屬性進行聲明。使用ATTLIST宣告來完成,一個ATTLIST可以為一個元素型別宣告多個屬性。
3fd93b1cb74234a0d499895903c7e355
上例宣告image元素必須有一個src屬性,該屬性的值是字元資料。可用ATTLIST宣告為一個元素宣告多個屬性,如:
width CDATA #REQUIRED height CDATA #REQUIRED alt CDATA #IMPLIED > ;
上述聲明指出src、width、height屬性是必須的,alt屬性是可選的。 1.屬性類型
CDATA類型屬性值可包含任意文字字串。 DTD無法指定屬性為一個整數或一個日期,Schema能提供更強大的資料型別。
NMTOKEN類型屬性值是一個XML名稱記號。 XML名稱記號與XML名稱類似,但XML名稱記號允許所有的字符作為名稱的開始字符,而XML名稱的第一個字母必須是字母、表意字符和下劃線。因此10,.bashrc是合法的XML名稱標記,但不是合法的XML名稱。每個XML名稱都是一個XML名稱標記,然而XML名稱標記不全是XML名稱。如果屬性包含1990,2005之類的整數,則應該指定其類型為NMTOKEN。如:
<!ELEMENT person birthday NMTOKEN #REQUIRED>
NMTOKENS類型屬性包含一個或多個以空白分隔的XML名稱記號。如:
<person dates="02-01-2005 03-01-2005 05-01-2005">person</person>
對應的聲明應為:
<!ATTLIST person dates NMTOKENS #REQUIRED>
另一方面,對01/02/2005這樣的形式不能使用該聲明,因為其中的正斜杠不是合法的名稱字元。
列舉聲明,枚舉不用關鍵字。直接列舉所有的值,中間用垂直線分隔。如:
<!ATTLIST date month(January | February | March | April | May | June | July | August | September | October | November | December) #REQUIRED>
針對上述聲明,date元素的month屬性可選十二月份的中一個。
ID類型的屬性必須包含一個XML名稱,而且這個名稱在文件中是獨一無二的。 ID屬性可為元素指派一個唯一的識別碼。
<!ATTLIST name card_id ID #REQUIRED>
由於數字不是合法的XML名稱,所以ID編號不能以數字開頭,解決方法是在前面加底線或字母。
IDREF類型的屬性指向文件中某元素的ID類型的屬性。因此,它必須是一個XML名稱,它的作用是當簡單的包含關係不能滿足要求時在元素間建立多對多關係。如:
<project project_id="p1"> <goal>deploy linux</goal> <team_member person_card_id="c123"> </project> <person card_id="c123"> <name>linuxsir</name> <assignment project_project_id="p1"> </person>
project元素的project_id屬性和person元素的card_id屬性應該是ID類型。 team_member元素的person_card_id屬性和assignment元素的project_project_id屬性是IDREF型別。對應的宣告如下:
<!ATTLIST person card_id ID #REQUIRED> <!ATTLIST project project_id ID #REQUIRED> <!ATTLIST team_member person_card_id IDREF #REQUIRED> <!ATTLIST assignment project_project_id IDREF #REQUIRED>
IDREFS類型的屬性包含一個XML名稱清單。名稱間用空白間隔,且每個名稱都是文件中某個元素的ID。當某個元素需要引用多個其他元素時使用該元素。如:
<!ATTLIST person card_id ID #REQUIRED assignment IDREFS #REQUIRED> <!ATTLIST project project_id ID #REQUIRED team IDREFS #REQUIRED>
對應的文件可寫成:
<project project_id="p1" team="c123"> <gold>deploy linux</gold> </project> <person card_id="c123" assignment="p1"> <name>Linuxsir</name> </person>
#ENTITY類型的屬性包含在DTD的其它位置宣告的未析實體的名稱中。如movie元素可能有一個標識啟動時播放mpeg或rm檔案的實體屬性:
<!ATTLIST movie src ENTITY #REQUIRED>
如果DTD宣告了一個名為play的未析實體,則此movie元素可用於在XML文件中嵌入影片檔:
<movie src="play" />
ENTITIES類型的屬性包含在DTD的其它位置宣告的多個未析實體名稱,其間以空白隔開。
<!ATTLIST slide_show slides ENTITIES #REQUIRED>
如果DTD宣告了未析實體slide1、slide2、slide3、...,則可使用slide_show元素在XML文件中嵌入投影片。
<slide_show slides="slide1 slide2 slide3" />
NOTATION類型的屬性包含在文件的DTD中宣告的某個記號的名稱。此屬性類型較少用。理論上,可以使用該屬性使某些特殊元素與類型相關聯,下例聲明為不同的圖像類型定義了4個記法,然後規定每個image元素都必須從中選擇一種type屬性。
<!NOTATION gif SYSTEM "image/gif"> <!NOTATION tiff SYSTEM "image/tiff"> <!NOTATION jpeg SYSTEM "image/jpeg"> <!NOTATION png SYSTEM "image/png"> <!ATTLIST image type NOTATION (gif | tiff | jpeg | png) #REQUIRED>
每個image元素的type屬性的值可以為gif,tiff,jpeg和png四個值中的一個。此屬性比枚舉類型稍具優勢,因為記法的實際MIME媒體類型在理論上是可用的。由於斜杠在XML名稱中不是一個合法字符,所以枚舉類型不能指定image/png或image/jpeg作為允許值。
2.属性缺省值
每个ATTLIST声明除了要提供一种数据类型外,还要声明属性的缺省行为。
#IMPLIED,属性可选。
#REQUIRED,属性必须有。
#FIXED,属性是常量,不能更改。
<!ATTLIST person name CDATA #FIXED "linuxsir"
Literal,作为一个引用字符串的实际缺省值。
<!ATTLIST person name NMTOKEN "linuxsir"
如果没有显示指明person元素的name属性,则该值为linuxsir。
以上是XML入門教學-屬性聲明程式碼範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!