版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
《XML基礎(chǔ)教程(第2版)》第3章有效的XML文件
本章主要內(nèi)容第3章有效的XML文件規(guī)范的XML文件和有效的XML文件
XML的核心是使用標記組織數(shù)據(jù)之結(jié)構(gòu),以便讓信息的交互更加方便。
規(guī)范性僅僅是XML語言的基本語法,沒有對XML文件怎樣組織數(shù)據(jù)進行具體的限制。在某些系統(tǒng)中,如果不對XML怎樣組織數(shù)據(jù)進行合理的約束,那么對同一問題編寫的XML文件,在數(shù)據(jù)組織結(jié)構(gòu)上就可能有很大的不同。
例子1例子1time1.xml<?xmlversion="1.0"encoding="UTF-8"?><商店營業(yè)時間><商店><商店名稱>國貿(mào)大廈</商店名稱>
<營業(yè)時間>08:30至18:30</營業(yè)時間></商店><商店><商店名稱>華聯(lián)商場</商店名稱>
<營業(yè)時間>07:30至22:30</營業(yè)時間></商店></商店營業(yè)時間><?xmlversion="1.0"encoding="UTF-8"?><商店營業(yè)時間><商店><商店名稱>國貿(mào)大廈</商店名稱><開門時間>08:30</開門時間><關(guān)門時間>18:30</關(guān)門時間></商店><商店><商店名稱>華聯(lián)商場</商店名稱><開門時間>07:30</開門時間><關(guān)門時間>22:30</關(guān)門時間></商店></商店營業(yè)時間>例子1time2.xml§3.1有效XML文件的定義對XML組織數(shù)據(jù)進行約束的主要原因有兩個,一是讓XML的數(shù)據(jù)組織的更加合理,符合系統(tǒng)的要求,二是便于維護XML中的數(shù)據(jù),從而提高整個系統(tǒng)的可維護性。
對XML的數(shù)據(jù)結(jié)構(gòu)進行限制有兩種方式:使用文檔類型定義(DocumentTypeDefinition,DTD)和XMLSchema模式。一個規(guī)范的XML文件如果和某個DTD文件相關(guān)聯(lián),并遵守該DTD文件規(guī)定的約束條件,就稱之為有效的XML文件。
§3.1.1初識DTD
DTD文件也是有著特殊結(jié)構(gòu)的文件,簡單地說,DTD文件是由元素所構(gòu)成的文本文件。在DTD文件中,用關(guān)鍵字ELEMENT來定義一個元素,格式如下:
<!ELEMENT標記名稱標記的約束條件>需要一個刻畫商店營業(yè)時間的XML文件,但數(shù)據(jù)之結(jié)構(gòu)必須符合下列要求。Page28◆根標記的名稱是“商店營業(yè)時間”?!舾鶚擞浛梢杂腥舾蓚€名稱為“商店”的子標記。◆名稱為“商店”標記順序地包含有名稱為“商店名稱”、“開門時間”和“關(guān)門時間”的子標記?!裘Q為“商店名稱”的標記包含的內(nèi)容只能是文本數(shù)據(jù),不能包含有子標記◆名稱為“開門時間”的標記包含的內(nèi)容只能是文本數(shù)據(jù),不能包含有子標記?!裘Q為“關(guān)門時間”的標記包含的內(nèi)容只能是文本數(shù)據(jù),不能包含有子標記。DTD通過其中的元素來限制XML文件中的標記
◆
<!ELEMENT商店營業(yè)時間(商店*)>◆
<!ELEMENT商店(商店名稱,開門時間,關(guān)門時間)>◆
<!ELEMENT商店名稱(#PCDATA)>◆<!ELEMENT開門時間(#PCDATA)>◆<!ELEMENT關(guān)門時間(#PCDATA)>§3.1.2DTD文件的保存
DTD文件需使用文本編輯器編寫、保存。
DTD文件的擴展名必須是“.dtd”,保存時所選擇的編碼必須和其關(guān)聯(lián)的XML文件一致,比如,DTD所要約束的XML文件的編碼為UTF-8,那么DTD文件也必須按著UTF-8編碼保存。
limitShop.dtdlimitShop.dtd<!ELEMENT商店營業(yè)時間(商店*)><!ELEMENT商店(商店名稱,開門時間,關(guān)門時間)><!ELEMENT商店名稱(#PCDATA)><!ELEMENT開門時間(#PCDATA)><!ELEMENT關(guān)門時間(#PCDATA)>
§3.1.3XML文件與DTD文件相關(guān)聯(lián)
一個XML文件只有和某個DTD文件相關(guān)聯(lián),才會受到該DTD文件的約束。
在XML文件中使用“文檔類型聲明”與一個DTD文件相關(guān)聯(lián)。有兩種形式的關(guān)聯(lián):SYSTEM和PUBLIC。1.SYSTEM格式
使用SYSTEM文檔類型聲明的格式:
<DOCTYPE根標記的名稱SYSTEM"DTD文件的URI">
例
<!DOCTYPE商店營業(yè)時間SYSTEM"limitShop.dtd">
和名字是“l(fā)imitShop.dtd”的DTD文件相關(guān)聯(lián)2.
PUBLIC格式
使用PUBLIC文檔類型聲明的格式:
<!DOCTYPE根標記的名稱PUBLIC"正式公用標識符""DTD文件的URI">
例<!DOCTYPE商店營業(yè)時間PUBLIC"-//ISO123456/Daxian/ForXML/EN""limitshop.dtd">和名字是“l(fā)imitShop.dtd”的DTD文件相關(guān)聯(lián)3.
DTD文件的位置
SYSTEM或PUBLIC格式的文檔類型聲明中提到的:"DTD文件的URI"必須是一個有效的資源,◆如果URI是一個文件的名字,該DTD文件必須和當前XML文件在同一目錄中◆如果URI是一個URL,該URL必須是可以訪問的。例子2example3_2.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPE手機用戶表SYSTEM"limitShop.dtd"><商店營業(yè)時間><商店><商店名稱>西單商場</商店名稱><開門時間>06:30</開門時間><關(guān)門時間>23:00</關(guān)門時間></商店><商店><商店名稱>海淀商廈</商店名稱><開門時間>07:30</開門時間><關(guān)門時間>18:30</關(guān)門時間></商店></商店營業(yè)時間>limitShop.dtd<!ELEMENT商店營業(yè)時間(商店*)><!ELEMENT商店(商店名稱,開門時間,關(guān)門時間)><!ELEMENT商店名稱(#PCDATA)><!ELEMENT開門時間(#PCDATA)><!ELEMENT關(guān)門時間(#PCDATA)>
§3.2如何檢查有效性當用瀏覽器打開一個有效的XML文件時,瀏覽器的XML解析器僅僅檢查XML文件是否是規(guī)范的、檢查XML所關(guān)聯(lián)的DTD文件是否有語法錯誤,并不檢查XML文件是否遵守該DTD規(guī)定的約束條件。我們可以使用DOM解析器來檢查一個XML文件是否是有效的。簡要的說明如下:首先獲取一個DocumentBuilderFactory對象factory:
DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();factory設(shè)置是否檢查XML文件的有效性:
factory.setValidating(true);factory對象調(diào)用方法newDocumentBuilder()返回DOM解析器:
DocumentBuilderdomParser=factory.newDocumentBuilder();解析器domParser調(diào)用
publicDocumentparse(Filef)throwsSAXException,IOException方法解析XML文件。例子3TestValidate.java
DTD文件使用元素(ELEMENT)來約束XML文件中的標記,在DTD文件中使用ELEMENT定義一個元素,格式為:
<!ELEMENT標記名稱標記的約束條件>例如:<!ELEMENT學生(學號,姓名)>特別需要強調(diào)以下兩點:
DTD文件中的元素的作用與其在DTD文件中的書寫位置無關(guān)。
DTD文件中不允許使用多個元素約束同一個標記?!?.3
DTD中的元素
§3.3.1約束標記只包含有文本數(shù)據(jù)
如果準備約束一個標記沒有子標記,也就是說只能有文本數(shù)據(jù),那么“標記的約束條件”是用小括號括起的#PCDATA,格式如下:
<!ELEMENT標記名稱(#PCDATA)>例如,對于
<!ELEMENT姓名(#PCDATA)>下列3個名稱是“姓名”的標記都是符合約束條件的標記:<姓名>張三</姓名><姓名></姓名><姓名/>而<姓名>李逵<sex>男</sex></姓名>是不符合約束條件的標記§3.3.2約束標記的子標記_1元素的格式
若要約束XML文件中某個標記可以有怎樣的子標記,那么DTD中元素<!ELEMENT標記名稱
標記的約束條件
>聲明的“標記的約束條件”是用小括號括起的子標記列表,格式為
<!ELEMENT標記名稱(子標記列表)>注:“子標記列表”中用逗號分隔列出的若干個標記是有先后順序的“開學時間”標記是不符合約束的標記
×<開學時間>清華大學<year>2010</year><month>09</month><day>01</day></開學時間>“開學時間”標記是符合約束的標記
√<開學時間><year>2010</year><month>09</month><day>01</day></開學時間>“開學時間”標記是不符合約束的標記
×<month>09</month><year>2010<year><day>01</day>§3.3.2約束標記的子標記_2模式限定符的使用
1元素格式<!ELEMENT標記名稱(子標記列表)>中的“子標記列表”的每個標記的后面可以尾加模式限定符號來限定該子標記出現(xiàn)的次數(shù)。不尾加限定符號的子標記必須出現(xiàn)且只能出現(xiàn)一次。限定符號有:+:尾加該限定符號的子標記必須出現(xiàn)一次或多次。*:尾加該限定符號的子標記可出現(xiàn)零次或多次。?:尾加該限定符號的子標記可出現(xiàn)零次或一次。例如:<!ELEMENT庫存商品(商品名稱+,管理員?)>2“子標記列表”中的子標記也可以是幾個標記的“或運算”,而且“或運算”必須用小括號擴起,例如,元素:<!ELEMENT應(yīng)聘者(姓名,(本科|碩士|博士),性別)><!ELEMENT學生(姓名,(獎勵|處分)*,性別)>
例子4example3_4.xmlfourDTD.dtd<!ELEMENT應(yīng)聘信息(應(yīng)聘者*)><!ELEMENT應(yīng)聘者(姓名,(本科|碩士|博士),(獎勵|處分)*,(性別))><!ELEMENT姓名(#PCDATA)><!ELEMENT本科(#PCDATA)><!ELEMENT碩士(#PCDATA)><!ELEMENT博士(#PCDATA)><!ELEMENT獎勵(#PCDATA)><!ELEMENT處分(#PCDATA)><!ELEMENT性別(#PCDATA)>§3.3.3約束標記的混合內(nèi)容
一個標記的內(nèi)容可以有兩部分構(gòu)成文本數(shù)據(jù)和標記,其中的標記稱做該標記的子標記.上面我們已經(jīng)知道怎樣使用DTD約束標記的子標記,比如<!ELEMENT開學時間(year,month.day)>約束“開學時間”恰好包含有3個子標記year、month和day,不可以包含有能顯示的文本數(shù)據(jù)。如果允許標記的內(nèi)容即可以有可顯示的文本數(shù)據(jù),也可以有子標記,那么在DTD文件中,元素的“標記的約束條件”是關(guān)鍵字“#PCDATA”和若干個子標記的“或運算”,而且該“或運算”必須用小括號括起并尾加一個“*”號,格式如下:
<!ELEMENT標記名稱(#PCDATA|子標記1|子標記2…|子標記m)*>注:幾種常見的錯誤寫法,及錯誤的原因見page37例子5example3_5.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPE學生列表PUBLIC"-//ISO88//school//ForXML/Ch""fiveDTD.dtd"><學生列表><姓名>張三<出生日期>1993-12-12</出生日期><性別>男</性別></姓名><姓名>孫翠花<出生日期>1992-01-31</出生日期><性別>女</性別></姓名></學生列表><!ELEMENT學生列表(姓名*)><!ELEMENT姓名(#PCDATA|出生日期|性別)*><!ELEMENT出生日期(#PCDATA)><!ELEMENT性別(#PCDATA)>fiveDTD.dtd§3.3.4EMPTY和ANY
如果準備約束一個標記是空標記,或者是只含有空字符的非空標記,元素的“標記的約束條件”可以是關(guān)鍵字“EMPTY”;如果不準備對一個標記有任何約束,元素的“標記的約束條件”可以是關(guān)鍵字“ANY”。對于元素:<!ELEMENTspeakEMPTY>下列2個標記都是符合約束條件的標記:<speak/><speak></speak>對于元素:<!ELEMENThelloANY>下列2標記是符合約束條件的標記:<hello>howareyou</hello><hello><english>howareyou</english><chinese>你好</chinese></hello>§3.4DTD的完整性
(1)不允許無窮嵌套如果一個DTD元素約束某個標記可以出現(xiàn)某個子標記,那么對該子標記進行約束的DTD元素就不能約束該標記的子標記是它的父標記。DTD文件中同時出現(xiàn)下列兩個元素是不允許的。<!ELEMENT學生(姓名,性別)><!ELEMENT姓名(學生,拼音)>(2)XML文件中的每個標記都必須在DTD中有相應(yīng)元素進行約束。
nocomplete.dtd是不完整的
×
<!ELEMENT商店營業(yè)時間(商店*)><!ELEMENT商店(商店名稱,開門時間,關(guān)門時間)><!ELEMENT商店名稱(#PCDATA)>§3.5
DTD中的屬性約束列表
XML文件中的標記可以附帶屬性,標記附帶屬性的目的是為該標記添加附加信息。標記的屬性是一個“名-值”對,即屬性必須由名字和值組成。屬性必須在非空標記的開始標簽或空標記中聲明,用“=”為屬性指定一個值。例如,下列名字為“長方體”的空標記有三個屬性:
<長方體length="1000"width="300"height="600"/>§3.5.1ATTLIST屬性約束列表_1
DTD文件中可以使用元素約束XML文件中的標記。同樣,可以通過在DTD文件中定義屬性約束列表來約束XML文件中的標記的屬性。
DTD使用關(guān)鍵字ATTLIST定義一個屬性約束列表來約束XML文件中標記的屬性,在DTD中定義屬性約束列表的格式為:<!ATTLIST標記名稱屬性名稱屬性類型默認值情況屬性名稱屬性類型默認值情況…….>ATTLIST屬性約束列表1<!ATTLIST教室
widthCDATA"0"lengthCDATA"0">ATTLIST屬性約束列表2<!ATTLIST姓名性別CDATA"男"><!ELEMENT教學樓(教室*)><!ELEMENT教室(號碼,用途)><!ELEMENT號碼(#PCDATA)><!ELEMENT用途(#PCDATA)><!ATTLIST教室widthCDATA"8m"><!ATTLIST教室lengthCDATA"15m">例子6example3_6.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPE教學樓SYSTEM"sixDTD.dtd"><教學樓><教室><號碼>A101</號碼><用途>自習室</用途></教室><教室width="10m"length="16m"><號碼>A606</號碼><用途>語音室</用途></教室></教學樓>sixDTD.dtd圖3.4使用ATTLIST屬性約束列表約束屬性§3.5.1ATTLIST屬性約束列表_2
1.屬性名稱屬性名稱可以由字母、數(shù)字、下劃線(“_”)、點(“.”)或連字符(“-”)組成,但必須以字母或下劃線開頭,屬性的名稱區(qū)分大小寫。2.屬性類型屬性值一定是一個字符串,那么屬性類型就決定了屬性可以用怎樣的字符串作為它的值。注:屬性值中都不能含有含有左尖括號“<”、右尖括號“>”、與符號“&”、單引號“'”和雙引號“"”,如果想使用這些字符,可以使用實體引用。要特別注意的是,屬性值區(qū)分大小寫。3.默認值情況
ATTLIST定義的屬性約束列表是為了約束XML文件中標記的屬性,ATTLIST屬性約束列表:<!ATTLIST標記名稱屬性名稱屬性類型默認值情況>中的“默認值情況”是對標記的屬性進行約束的細節(jié)條件?!?.5.2屬性的默認值
ATTLIST屬性約束列表<!ATTLIST標記名稱屬性名稱屬性類型默認值情況>其中的“默認值情況”含有約束的細節(jié)條件。“默認值情況”可以是下列三種情形:●“默認值情況”是字符串,例如:<!ATTLIST桌子colorCDATA"red">
“默認值情況”是字符串"red"?!瘛澳J值情況”是#IMPLIED或#REQUIRE,例如:<!ATTLIST汽車車牌CDATA#REQUIRED>
“默認值情況”是#REQUIRED。●“默認值情況”是#FIXED"字符串"。例如:<!ATTLIST火警電話號碼CDATA#FIXED"119">
“默認值情況”是#FIXED"119"。“默認值情況”對標記的屬性給予約束的意義如表3.1。表3.1默認值情況的約束意義
§3.5.2屬性的默認值_1“默認值情況”是字符串
“默認值情況”是字符串,例如:<!ATTLIST桌子colorCDATA"red">
“默認值情況”是字符串"red"?!粼诰帉慩ML中時,可以顯示地為被約束的標記附加該屬性,并且可以重新指定該屬性的值。◆編寫XML文件時,也允許被約束的標記不顯示地附加該屬性,在這種情況下,解析器認為該標記有這個屬性,并且默認值為ATTLIST屬性約束列表中“默認值情況”給定的字符串。<!ELEMENT商品列表(商品*)><!ELEMENT商品(名稱,價格)><!ELEMENT名稱(#PCDATA)><!ELEMENT價格(#PCDATA)><!ATTLIST商品類別CDATA"食品">例子7example3_7.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPE商品列表SYSTEM"sevenDTD.dtd"><商品列表><商品類別="家電"><名稱>電視機</名稱><價格>2678元/臺</價格></商品><商品><!--沒有顯示地附加“類別”屬性--><名稱>東北大米</名稱><價格>5.9元/千克</價格></商品></商品列表>sevenDTD.dtd§3.5.2屬性的默認值_2默認值情況”是#IMPLIED
在ATTLIST屬性約束列表中可以設(shè)置屬性的“默認值情況”是#IMPLIED。例如:<!ATTLIST桌子color#IMPLIED>這時,該屬性就沒有默認值,而且被約束的標記可以不附加該屬性。當認為一個屬性對于標記可有可無、且沒有默認值時,就可以將屬性的“默認值情況”設(shè)置為#IMPLIED?!?.5.2屬性的默認值_3#REQUIRED
在ATTLIST屬性約束列表中可以設(shè)置屬性的“默認值情況”是#REQUIRED,例如:<!ATTLIST桌子length#REQUIRED桌子width#REQUIRED桌子height#REQUIRED>這時,該屬性沒有默認值,被約束的標記必須要附加該屬性并給出屬性的值。當不想為某個屬性設(shè)置默認值,但要求標記必須附加該屬性時,就可以將屬性的“默認值情況”設(shè)置為#REQUIRED?!?.5.2屬性的默認值_4#FIXED
ATTLIST屬性約束列表中可以設(shè)置屬性的“默認值情況”是:
#FIXED"字符串"例如:
<!ATTLIST報警電話號碼CDATA#FIXED"110">
這時,該屬性的默認值就是關(guān)鍵字#FIXED后面指定的那個字符串。在編寫XML文件時,即使被約束的標記不顯示地附加該屬性,解析器也認為該標記有這個屬性,而且屬性值是#FIXED后面指定的那個字符串。但是,在編寫XML文件時,如果被約束的標記顯示地附加該屬性,那么不可以改變屬性的值,即該屬性的值必須是#FIXED后面指定的那個字符串。當準備約束標記的某個屬性的值是固定不變的一個值,就可以將屬性的“默認值情況”設(shè)置為:#FIXED"字符串"
<!ELEMENT教學樓(教室*,休息室*)><!ELEMENT教室(#PCDATA)><!ELEMENT休息室(#PCDATA)><!ATTLIST教室號碼CDATA#REQUIRED><!ATTLIST休息室號碼CDATA#IMPLIED>例子8example3_8.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPE教學樓SYSTEM"eightDTD.dtd"><教學樓><教室號碼="2109">物理系專用</教室><教室號碼="5509">英語系專用</教室><休息室號碼="T5">老師課間休息專用</休息室><休息室>學生課間休息專用</休息室></教學樓>eightDTD.dtd圖3.6默認值情況為#REQUIRED和#IMPLIED<!ELEMENT重要電話薄(報警電話,火警電話,急救電話)><!ELEMENT報警電話(#PCDATA)><!ELEMENT火警電話(#PCDATA)><!ELEMENT急救電話(#PCDATA)><!ATTLIST報警電話號碼CDATA#FIXED"110"><!ATTLIST火警電話號碼CDATA#FIXED"119"><!ATTLIST急救電話號碼CDATA#FIXED"120">例子9example3_9.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPE重要電話薄
SYSTEM"ten.dtd"><重要電話薄><報警電話
號碼="110">不要亂打報警電話。</報警電話><火警電話>一旦發(fā)生火災(zāi),請及時撥打火警電話。</火警電話><急救電話>救死扶傷</急救電話></重要電話薄>
nineDTD.dtd圖3.7默認值情況為#FIXED圖3.8使用解析器檢查出的錯誤§3.5.3屬性類型
屬性類型決定了屬性可以用怎樣的字符串作為屬性的值。屬性的常用類型有:
CDATA、Enumerated、NMTOKEN、NMTOKENS、ID、IDREF、IDREFS?!?.5.3屬性類型_1CDATA類型
1.CDATA類型對于CDATA(CharacterData)類型的屬性,該屬性的值可以是任何一個字符串,但是,字符串中不能含有含有左尖括號、右尖括號、與符號、單引號和雙引號,如果想使用這些字符,可以使用實體引用。例題3-10page47<!ELEMENT通訊錄(姓名*)><!ELEMENT姓名(#PCDATA)><!ATTLIST姓名電話CDATA#REQUIREDemailCDATA#REQUIRED
住址CDATA#IMPLIED>例子10example3_10.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPE通訊錄SYSTEM"tenDTD.dtd"><通訊錄><姓名電話="12345678"email="zhangfei@">張飛</姓名><姓名電話="98765432"email="likui@"住址="大連老鱉灣">李逵</姓名></通訊錄>tenDTD.dtd§3.5.3屬性類型_2.Enumerated類型
2.Enumerated類型如果屬性的類型是Enumerated類型,那么該屬性只可以是枚舉值。在ATTLIST屬性約束列表中使用Enumerated類型的格式如下:
<!ATTLIST標記名稱屬性名稱(屬性值1|屬性值2|…|屬性值n)默認值情況>
例題3-11page48<!ELEMENT道路(路燈*)><!ELEMENT路燈(編號,位置)><!ELEMENT編號(#PCDATA)><!ELEMENT位置(#PCDATA)><!ATTLIST路燈狀態(tài)(亮|滅)#REQUIRED>例子11example3_11.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPE道路SYSTEM"elevenDTD.dtd"><道路><路燈狀態(tài)="亮"><編號>10010</編號><位置>中山路</位置></路燈><路燈狀態(tài)="滅"><編號>20011</編號><位置>長江路</位置></路燈></道路>
elevenDTD.dtd§3.5.3屬性類型_3.NMTOKEN類型
3.NMTOKEN類型
如果屬性的類型是NMTOKEN類型的屬性,屬性值可以由字母、數(shù)字、下劃線(“_”)、點(“.”)或連字符(“-”)組成,屬性值中不能含有空格字符(屬性值也可以用數(shù)字、點或連字符開頭)。例題3-11page49!ELEMENT作家名單(姓名*)><!ELEMENT姓名(#PCDATA)><!ATTLIST姓名筆名NMTOKEN#IMPLIED>例子12example3_12.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPE作家名單SYSTEM"twelveDTD.dtd"><作家名單><姓名筆名="仙山">張三</姓名><姓名筆名="桃李">李陶</姓名></作家名單>twelveDTD.dtd§3.5.3屬性類型_4.NMTOKENS類型
4.NMTOKENS類型
對于NMTOKEN類型的屬性,其屬性值中不能含有空格。如果需要某個屬性的屬性值含有空格,而且被空格分隔開的子字符串符合NMTOKEN類型屬性的屬性值之規(guī)定,那么就可以將屬性的類型取為NMTOKENS類型.例題3-14page50<!ELEMENT圖書列表(圖書*)><!ELEMENT圖書(名稱,出版社)><!ELEMENT名稱(#PCDATA)><!ELEMENT出版社(#PCDATA)><!ATTLIST圖書關(guān)鍵字NMTOKENS#REQUIRED>例子13example3_13.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPE圖書列表SYSTEM"thirteenDTD.dtd"><圖書列表><圖書關(guān)鍵字="XML可擴展語言解析器"><名稱>XM基礎(chǔ)教程</名稱><出版社>清華大學出版社</出版社></圖書><圖書關(guān)鍵字="Java類對象線程"><名稱>Java程序設(shè)計</名稱><出版社>清華大學出版社</出版社></圖書></圖書列表>thirteenDTD.dtd§3.5.3屬性類型_5.ID類型
5.ID類型如果希望某個屬性的屬性值具有專用性,即不允許其它類型相同的屬性再取這個屬性值,那么就可以將屬性的類型取為ID類型。注意①ID類型的屬性值可以由字母、數(shù)字、下劃線(“_”)、點(“.”)或連字符(“-”)組成,但必須以字母或下劃線開頭。②需要特別注意的是ID類型屬性的“默認值情況”只能是“#REQUIRED”和“IMPLIED”
例題3-14page51“默認值情況”是錯誤的×<!ATTLIST汪想地址IDFIXED"北京市"><!ATTLIST辛望地址ID"清華大學">默認值情況”是正確的√<!ATTLIST汪想地址ID#REQUIRED><!ATTLIST辛望地址ID#IMPLIED"><!ELEMENT城市交通(公交電車,公交汽車)><!ELEMENT公交汽車(名稱*)><!ELEMENT公交電車(名稱*)><!ELEMENT名稱(#PCDATA)><!ATTLIST名稱車牌號ID#REQUIRED>例子14example3_14.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPE城市交通SYSTEM"fourteenDTD.dtd"><城市交通><公交電車><名稱車牌號="遼B555">101無軌電車</名稱><名稱車牌號="遼B888">201有軌電車</名稱></公交電車><公交汽車><名稱車牌號="遼B666">801快車</名稱><名稱車牌號="遼B777">631普通</名稱></公交汽車></城市交通>fourteenDTD.dtd圖3.11使用解析器檢查出的錯誤§3.5.3屬性類型_6.IDREF類型
6.IDREF類型
如果準備通過標記的屬性值來判斷標記之間的聯(lián)系,就可以在標記中使用IDREF(IdentifierReference)類型的屬性。IDREF類型屬性的屬性值只能取某個標記中ID類型屬性的屬性值。例題3-15page52<!ELEMENT簡歷列表(專科,本科,碩士,博士,姓名*)><!ELEMENT??艵MPTY><!ELEMENT本科EMPTY><!ELEMENT碩士EMPTY><!ELEMENT博士EMPTY><!ELEMENT姓名(#PCDATA)><!ATTLIST專科numberCodeID#REQUIRED><!ATTLIST本科numberCodeID#REQUIRED><!ATTLIST碩士numberCodeID#REQUIRED><!ATTLIST博士numberCodeID#REQUIRED><!ATTLIST姓名學歷IDREF#REQUIRED>例子15example3_15.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPE簡歷列表SYSTEM"fifteenDTD.dtd"><簡歷列表><??苙umberCode="A101"/><本科numberCode="B102"/><碩士numberCode="C201"/><博士numberCode="D202"/><姓名學歷="A101">張三</姓名><姓名學歷="D202">李四</姓名><姓名學歷="B102">趙五</姓名><姓名學歷="C201">孫六</姓名></簡歷列表>fifteenDTD.dtd
§
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 遼寧醫(yī)藥職業(yè)學院《Java+語言程序設(shè)計實驗》2023-2024學年第一學期期末試卷
- 蘭州工業(yè)學院《行為醫(yī)學》2023-2024學年第一學期期末試卷
- 江西建設(shè)職業(yè)技術(shù)學院《土地測量與評價》2023-2024學年第一學期期末試卷
- 吉林職業(yè)技術(shù)學院《外國音樂史Ⅰ》2023-2024學年第一學期期末試卷
- 湖南電子科技職業(yè)學院《物流流程再造》2023-2024學年第一學期期末試卷
- 黑龍江司法警官職業(yè)學院《生物信息學》2023-2024學年第一學期期末試卷
- 重慶應(yīng)用技術(shù)職業(yè)學院《集成電路版圖設(shè)計》2023-2024學年第一學期期末試卷
- 重慶建筑工程職業(yè)學院《外語教育研究方法》2023-2024學年第一學期期末試卷
- 中央戲劇學院《計算機網(wǎng)絡(luò)基礎(chǔ)》2023-2024學年第一學期期末試卷
- 中國石油大學(北京)《數(shù)據(jù)庫技術(shù)及應(yīng)用實踐》2023-2024學年第一學期期末試卷
- 數(shù)字廣告數(shù)據(jù)要素流通保障技術(shù)研究報告(2023年)
- JJF(蘇) 283-2024 暫態(tài)地電壓法局部放電檢測儀校準規(guī)范
- 某27層高層住宅樓施工組織設(shè)計方案
- 2025年中考語文備考之名著導(dǎo)讀:《水滸傳》主要人物梳理
- 小學科學學情分析報告總結(jié)
- 健康中國產(chǎn)業(yè)園規(guī)劃方案
- (2024年)二年級上冊音樂
- 2024屆高考英語一輪復(fù)習讀后續(xù)寫脫險類續(xù)寫講義
- ISO13485內(nèi)部審核檢查表+內(nèi)審記錄
- 2024年《藥物臨床試驗質(zhì)量管理規(guī)范》(GCP)網(wǎng)絡(luò)培訓(xùn)題庫
- 新華健康體檢報告查詢
評論
0/150
提交評論