XML入門教程:屬性聲明-XML/XSLT
互聯(lián)網(wǎng) 發(fā)布時(shí)間:2009-04-02 20:58:50 作者:佚名
我要評(píng)論

一個(gè)有效的XML文檔,必須對(duì)元素的屬性進(jìn)行聲明。使用ATTLIST聲明來完成,一個(gè)ATTLIST可以為一個(gè)元素類型聲明多個(gè)屬性。
一個(gè)有效的XML文檔,必須對(duì)元素的屬性進(jìn)行聲明。使用ATTLIST聲明來完成,一個(gè)ATTLIST可以為一個(gè)元素類型
一個(gè)有效的XML文檔,必須對(duì)元素的屬性進(jìn)行聲明。使用ATTLIST聲明來完成,一個(gè)ATTLIST可以為一個(gè)元素類型聲明多個(gè)屬性。
一個(gè)有效的XML文檔,必須對(duì)元素的屬性進(jìn)行聲明。使用ATTLIST聲明來完成,一個(gè)ATTLIST可以為一個(gè)元素類型聲明多個(gè)屬性。
<!ATTLIST image src CDATA #REQUIRED>
上例聲明image元素必須有一個(gè)src屬性,該屬性的值是字符數(shù)據(jù)??捎肁TTLIST聲明為一個(gè)元素聲明多個(gè)屬性,如:
<!ATTLIST image src CDATA #REQUIRED width CDATA #REQUIRED height CDATA #REQUIRED alt CDATA #IMPLIED >
上述聲明指出src、width、height屬性是必須的,alt屬性是可選的。
本文由腳本之家(http://www.dbjr.com.cn)整理發(fā)布!轉(zhuǎn)載請(qǐng)注明出處,謝謝!
1.屬性類型
CDATA類型屬性值可包含任意文本字符串。DTD不能指定屬性為一個(gè)整數(shù)或一個(gè)日期,Schema能提供更為強(qiáng)大的數(shù)據(jù)類型。
NMTOKEN類型屬性值是一個(gè)XML名稱記號(hào)。XML名稱記號(hào)與XML名稱類似,但XML名稱記號(hào)允許所有的字符作為名稱的開始字符,而XML名稱的第一個(gè)字母必須是字母、表意字符和下劃線。因此10,.bashrc是合法的XML名稱標(biāo)記,但不是合法的XML名稱。每個(gè)XML名稱都是一個(gè)XML名稱標(biāo)記,然而XML名稱標(biāo)記不全是XML名稱。如果屬性包含1990,2005之類的整數(shù),則應(yīng)該指定其類型為NMTOKEN。如:
<!ELEMENT person birthday NMTOKEN #REQUIRED>
NMTOKENS類型屬性包含一個(gè)或多個(gè)用空白分隔的XML名稱記號(hào)。如:
<person dates="02-01-2005 03-01-2005 05-01-2005">person</person>
對(duì)應(yīng)的聲明應(yīng)為:
<!ATTLIST person dates NMTOKENS #REQUIRED>
另一方面,對(duì)01/02/2005這樣的形式不能使用該聲明,因?yàn)槠渲械恼备懿皇呛戏ǖ拿Q字符。
枚舉聲明,枚舉不用關(guān)鍵字。直接列舉所有的值,中間用豎線分隔。如:
<!ATTLIST date month(January | February | March | April | May | June | July | August | September | October | November | December) #REQUIRED>
針對(duì)上述聲明,date元素的month屬性可選十二個(gè)月份的中一個(gè)。
ID類型的屬性必須包含一個(gè)XML名稱,而且該名稱在文檔中是獨(dú)一無二的。ID屬性可為元素分配一個(gè)唯一的標(biāo)識(shí)符。
<!ATTLIST name card_id ID #REQUIRED>
由于數(shù)字不是合法的XML名稱,所以ID編號(hào)不能以數(shù)字開頭,解決辦法是在前面加下劃線或字母。
IDREF類型的屬性指向文檔中某元素的ID類型的屬性。因此,它必須是一個(gè)XML名稱,它的作用是當(dāng)簡(jiǎn)單的包含關(guān)系不能滿足要求時(shí)在元素間建立多對(duì)多關(guān)系。如:
<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屬性應(yīng)該是ID類型。team_member元素的person_card_id屬性和assignment元素的project_project_id屬性是IDREF類型。對(duì)應(yīng)的聲明如下:
<!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類型的屬性包含一個(gè)XML名稱列表。名稱間用空白間隔,且每個(gè)名稱都是文檔中某個(gè)元素的ID。當(dāng)某個(gè)元素需要引用多個(gè)其他元素時(shí)使用該元素。如:
<!ATTLIST person card_id ID #REQUIRED
assignment IDREFS #REQUIRED>
<!ATTLIST project project_id ID #REQUIRED
team IDREFS #REQUIRED>
對(duì)應(yīng)的文檔可寫成:
<project project_id="p1" team="c123">
<gold>deploy linux</gold>
</project>
<person card_id="c123" assignment="p1">
<name>Linuxsir</name>
</person>
ENTITY類型的屬性包含在DTD的其它位置聲明的未析實(shí)體的名稱中。如movie元素可能有一個(gè)標(biāo)識(shí)激活時(shí)播放mpeg或rm文件的實(shí)體屬性:
<!ATTLIST movie src ENTITY #REQUIRED>
如果DTD聲明了一個(gè)名為play的未析實(shí)體,則此movie元素可用于在XML文檔中嵌入視頻文件:
<movie src="play" />
ENTITIES類型的屬性包含在DTD的其它位置聲明的多個(gè)未析實(shí)體名稱,其間用空白隔開。
<!ATTLIST slide_show slides ENTITIES #REQUIRED>
如果DTD聲明了未析實(shí)體slide1、slide2、slide3、...,則可使用slide_show元素在XML文檔中嵌入幻燈片。
<slide_show slides="slide1 slide2 slide3" />
NOTATION類型的屬性包含在文檔的DTD中聲明的某個(gè)記法的名稱。該屬性類型較少用。理論上,可以使用該屬性使某些特殊元素與類型相關(guān)聯(lián),下例聲明為不同的圖像類型定義了4個(gè)記法,然后規(guī)定每個(gè)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>
每個(gè)image元素的type屬性的值可以為gif,tiff,jpeg和png四個(gè)值中的一個(gè)。該屬性比枚舉類型稍具優(yōu)勢(shì),因?yàn)橛浄ǖ膶?shí)際MIME媒體類型在理論上是可用的。由于斜杠在XML名稱中不是一個(gè)合法字符,所以枚舉類型不能指定image/png或image/jpeg作為允許值。
2.屬性缺省值
每個(gè)ATTLIST聲明除了要提供一種數(shù)據(jù)類型外,還要聲明屬性的缺省行為。
本文由腳本之家(http://www.dbjr.com.cn)整理發(fā)布!轉(zhuǎn)載請(qǐng)注明出處,謝謝!
#IMPLIED,屬性可選。
#REQUIRED,屬性必須有。
#FIXED,屬性是常量,不能更改。
<!ATTLIST person name CDATA #FIXED "linuxsir"
Literal,作為一個(gè)引用字符串的實(shí)際缺省值。
<!ATTLIST person name NMTOKEN "linuxsir"
如果沒有顯示指明person元素的name屬性,則該值為linuxsir。
CDATA類型屬性值可包含任意文本字符串。DTD不能指定屬性為一個(gè)整數(shù)或一個(gè)日期,Schema能提供更為強(qiáng)大的數(shù)據(jù)類型。
NMTOKEN類型屬性值是一個(gè)XML名稱記號(hào)。XML名稱記號(hào)與XML名稱類似,但XML名稱記號(hào)允許所有的字符作為名稱的開始字符,而XML名稱的第一個(gè)字母必須是字母、表意字符和下劃線。因此10,.bashrc是合法的XML名稱標(biāo)記,但不是合法的XML名稱。每個(gè)XML名稱都是一個(gè)XML名稱標(biāo)記,然而XML名稱標(biāo)記不全是XML名稱。如果屬性包含1990,2005之類的整數(shù),則應(yīng)該指定其類型為NMTOKEN。如:
<!ELEMENT person birthday NMTOKEN #REQUIRED>
NMTOKENS類型屬性包含一個(gè)或多個(gè)用空白分隔的XML名稱記號(hào)。如:
<person dates="02-01-2005 03-01-2005 05-01-2005">person</person>
對(duì)應(yīng)的聲明應(yīng)為:
<!ATTLIST person dates NMTOKENS #REQUIRED>
另一方面,對(duì)01/02/2005這樣的形式不能使用該聲明,因?yàn)槠渲械恼备懿皇呛戏ǖ拿Q字符。
枚舉聲明,枚舉不用關(guān)鍵字。直接列舉所有的值,中間用豎線分隔。如:
<!ATTLIST date month(January | February | March | April | May | June | July | August | September | October | November | December) #REQUIRED>
針對(duì)上述聲明,date元素的month屬性可選十二個(gè)月份的中一個(gè)。
ID類型的屬性必須包含一個(gè)XML名稱,而且該名稱在文檔中是獨(dú)一無二的。ID屬性可為元素分配一個(gè)唯一的標(biāo)識(shí)符。
<!ATTLIST name card_id ID #REQUIRED>
由于數(shù)字不是合法的XML名稱,所以ID編號(hào)不能以數(shù)字開頭,解決辦法是在前面加下劃線或字母。
IDREF類型的屬性指向文檔中某元素的ID類型的屬性。因此,它必須是一個(gè)XML名稱,它的作用是當(dāng)簡(jiǎn)單的包含關(guān)系不能滿足要求時(shí)在元素間建立多對(duì)多關(guān)系。如:
<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屬性應(yīng)該是ID類型。team_member元素的person_card_id屬性和assignment元素的project_project_id屬性是IDREF類型。對(duì)應(yīng)的聲明如下:
<!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類型的屬性包含一個(gè)XML名稱列表。名稱間用空白間隔,且每個(gè)名稱都是文檔中某個(gè)元素的ID。當(dāng)某個(gè)元素需要引用多個(gè)其他元素時(shí)使用該元素。如:
<!ATTLIST person card_id ID #REQUIRED assignment IDREFS #REQUIRED> <!ATTLIST project project_id ID #REQUIRED team IDREFS #REQUIRED>
對(duì)應(yīng)的文檔可寫成:
<project project_id="p1" team="c123"> <gold>deploy linux</gold> </project> <person card_id="c123" assignment="p1"> <name>Linuxsir</name> </person>
ENTITY類型的屬性包含在DTD的其它位置聲明的未析實(shí)體的名稱中。如movie元素可能有一個(gè)標(biāo)識(shí)激活時(shí)播放mpeg或rm文件的實(shí)體屬性:
<!ATTLIST movie src ENTITY #REQUIRED>
如果DTD聲明了一個(gè)名為play的未析實(shí)體,則此movie元素可用于在XML文檔中嵌入視頻文件:
<movie src="play" />
ENTITIES類型的屬性包含在DTD的其它位置聲明的多個(gè)未析實(shí)體名稱,其間用空白隔開。
<!ATTLIST slide_show slides ENTITIES #REQUIRED>
如果DTD聲明了未析實(shí)體slide1、slide2、slide3、...,則可使用slide_show元素在XML文檔中嵌入幻燈片。
<slide_show slides="slide1 slide2 slide3" />
NOTATION類型的屬性包含在文檔的DTD中聲明的某個(gè)記法的名稱。該屬性類型較少用。理論上,可以使用該屬性使某些特殊元素與類型相關(guān)聯(lián),下例聲明為不同的圖像類型定義了4個(gè)記法,然后規(guī)定每個(gè)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>
每個(gè)image元素的type屬性的值可以為gif,tiff,jpeg和png四個(gè)值中的一個(gè)。該屬性比枚舉類型稍具優(yōu)勢(shì),因?yàn)橛浄ǖ膶?shí)際MIME媒體類型在理論上是可用的。由于斜杠在XML名稱中不是一個(gè)合法字符,所以枚舉類型不能指定image/png或image/jpeg作為允許值。
2.屬性缺省值
每個(gè)ATTLIST聲明除了要提供一種數(shù)據(jù)類型外,還要聲明屬性的缺省行為。
本文由腳本之家(http://www.dbjr.com.cn)整理發(fā)布!轉(zhuǎn)載請(qǐng)注明出處,謝謝!
#IMPLIED,屬性可選。
#REQUIRED,屬性必須有。
#FIXED,屬性是常量,不能更改。
<!ATTLIST person name CDATA #FIXED "linuxsir"
Literal,作為一個(gè)引用字符串的實(shí)際缺省值。
<!ATTLIST person name NMTOKEN "linuxsir"
如果沒有顯示指明person元素的name屬性,則該值為linuxsir。
#IMPLIED,屬性可選。
#REQUIRED,屬性必須有。
#FIXED,屬性是常量,不能更改。
<!ATTLIST person name CDATA #FIXED "linuxsir"
Literal,作為一個(gè)引用字符串的實(shí)際缺省值。
<!ATTLIST person name NMTOKEN "linuxsir"
如果沒有顯示指明person元素的name屬性,則該值為linuxsir。
相關(guān)文章
MIME類型中application/xml與text/xml的區(qū)別介紹
這篇文章介紹了MIME類型中application/xml與text/xml的區(qū)別,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-12-28- XML中擁有Schema特性,能夠比DTD更加強(qiáng)大地引入元素結(jié)構(gòu),下面我們就來詳解XML中的模式Schema的概念及作用和用法,需要的朋友可以參考下2021-11-30
- 這篇文章主要介紹了XML基本概念入門學(xué)習(xí)指南,包括其與HTML的關(guān)系以及元素和特殊標(biāo)簽等,需要的朋友可以參考下2016-06-24
- XML標(biāo)簽的自定義功能非常強(qiáng)大,比如本文將要講解的DTD(Document Type Definition)就帶給人們一種面向?qū)ο蟀愕母杏X,well,下面就來看一下XML中的DTD文件類型定義完全解析2016-06-24
- 這篇文章主要介紹了XML文件的閱讀與編輯,最常用的工具當(dāng)然還是瀏覽器中的控制臺(tái)與源代碼查看,需要的朋友可以參考下2016-02-16
- 這篇文章主要介紹了XML的命名空間,包括命名空間的聲明等XML入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-02-16
解析XML中的樹形結(jié)構(gòu)與DOM文檔對(duì)象模型
這篇文章主要介紹了XML中的樹形結(jié)構(gòu)與DOM文檔對(duì)象模型,文中舉了JavaScript解析DOM對(duì)象的例子,需要的朋友可以參考下2016-02-15- 這篇文章主要介紹了詳解XML編程中的模式定義XSD,講解了如何在XML文檔中聲明模式及定義類型等內(nèi)容,需要的朋友可以參考下2016-02-15
- 這篇文章主要介紹了XML中的DTD文檔類型定義,是XML入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-02-15
- 這篇文章主要介紹了XML代碼編寫的編碼與驗(yàn)證問題,與HTML類似,XML文件的編碼也能在序言部分被指定,需要的朋友可以參考下2016-02-15