版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第4章 XML文檔類型定義 返回主頁 上一章 下一章教學(xué)提示:XML的可擴(kuò)展性表現(xiàn)在我們可以自己定義標(biāo)記和標(biāo)記之間的嵌套關(guān)系,而DTD(Document Type Definitions)就是進(jìn)行這種定義的語言。它定義了文檔的邏輯結(jié)構(gòu),規(guī)定了文檔中所使用的元素、實體、元素的屬性、元素與實體之間的關(guān)系。根據(jù)DTD可檢查XML文檔中的數(shù)據(jù),以驗證其是否符合規(guī)定和要求,這可以保證XML文檔數(shù)據(jù)的正確性和有效性。本章介紹DTD的語法,包括元素、屬性和實體的語法,結(jié)合例子給出DTD的使用方法并給出綜合實例。教學(xué)目標(biāo):了解DTD的作用,熟悉元素、屬性、及實體的運(yùn)用,掌握引用DTD的方法
2、,能夠為特定的系統(tǒng)設(shè)計標(biāo)記語言。4.1 DTD的作用4.2 DTD元素4.3 DTD屬性4.4 DTD中的實體4.5使用DTD4.6綜合實例小結(jié)習(xí)題進(jìn)入DOS狀態(tài) 寫字版 繪圖板 進(jìn)入XMLwriter 進(jìn)入Editplus4.1 DTD的作用 本章開頭 下一節(jié)XML文檔是一種元標(biāo)記語言,即一種定義標(biāo)記語言的語言。在XML中可以創(chuàng)建新的標(biāo)記語言,這些新的標(biāo)記語言(也叫標(biāo)記集)要通過文檔類型定義(DTD, Document Type Definitions)來定義。DTD文檔是這些新的標(biāo)記語言的法律性文檔。如果XML文檔的語法合乎DTD的定義和規(guī)定,XM
3、L文檔就稱為一個合法的XML文檔,否則就是非法的XML文檔。合法的XML文檔在實際應(yīng)用中地位很重要,因為只有合法的XML文檔才能被應(yīng)用軟件有效地處理。DTD定義了文檔的邏輯結(jié)構(gòu),規(guī)定了文檔中所使用的元素、實體、元素的屬性、元素與實體之間的關(guān)系。其作用主要表現(xiàn)在以下幾個方面:1使用DTD可以提供一種統(tǒng)一的格式。XML的可擴(kuò)展性為文檔的作者提供了很高的靈活性,可我們有時候需要的是統(tǒng)一,我們要求某一類文檔具有相同的結(jié)構(gòu)。2使用DTD可以保證數(shù)據(jù)交流和共享的順利進(jìn)行。3DTD使我們能夠不依賴具體的數(shù)據(jù)就能知道文檔的邏輯結(jié)構(gòu)。在沒有XML文檔的時候,也可以根據(jù)DTD為XML文檔編寫樣式單,編寫處理程序,
4、這樣可以有效地提高工作效率。4使用DTD可以驗證數(shù)據(jù)的有效性。DTD對文檔的邏輯結(jié)構(gòu)進(jìn)行了約束,這種約束可以比較寬松,也可以十分嚴(yán)格??梢愿鶕?jù)DTD檢查數(shù)據(jù),以驗證其是否符合規(guī)定和要求,這可以保證數(shù)據(jù)的正確和有效。4.2 DTD元素 上一節(jié) 下一節(jié) 本章開頭DTD中描述的基本部件是元素和屬性,它們負(fù)責(zé)確定XML文檔的邏輯結(jié)構(gòu)。元素表示一個信息對象,而屬性表示這個對象的性質(zhì)。所有元素中有且只有一個根元素,其他的元素都是它的子元素,除根元素外,每個元素都被其他元素包含,一個元素可以有幾個不同類型的子元素。4.2.1元素的基本類型元素的基本類型大致可分為兩種,一種稱為簡單類型,另一種稱為復(fù)合類型。簡
5、單類型具有文本數(shù)據(jù),即可析字符數(shù)據(jù),該類型也稱為上下文中的#PCADTA;復(fù)合類型可以包含其他元素和文本數(shù)據(jù)。1.簡單型#PCDATA(Parsed character data)表示標(biāo)記的內(nèi)容是可解析文本,所謂的可解析文本就是非標(biāo)記文本。用#PCDATA規(guī)范了的元素不能再包含子元素。例如“How do you do”是不包含標(biāo)記的文本,而“How do you <list>do</list>”就不是可解析的數(shù)據(jù)類型,因為其中包含有標(biāo)記<list>和</list>。另外數(shù)據(jù)類型定義文檔中不同元素定義的次序沒有先后關(guān)系,但文檔的語法對大小寫敏感。#
6、PCDATA的聲明格式如下:<!ELEMENT Element_Name (#PCDATA )>【例4.1】#PCDATA的用法,code4_1.xml。<?xml version="1.0" encoding="gb2312" ?><!DOCTYPE bookinfo <!ELEMENT bookinfo (title,author,publisher,price)><!ELEMENT title (#PCDATA)><!ELEMENT author (#PCDATA)><!ELE
7、MENT publisher (#PCDATA)><!ELEMENT price (#PCDATA)>><bookinfo> <title>計算機(jī)導(dǎo)論</title> <author>丁躍潮等</author> <publisher>高等教育出版社&l
8、t;/publisher> <price>19.7</price></bookinfo>顯示結(jié)果如圖4.1。圖4.1 #PCDATA的用法2.復(fù)合型復(fù)合型元素與簡單型元素相對,復(fù)合型元素可包含其它元素。【例4.2】復(fù)合型元素的用法,code4_2.xml。<?xml version="1.0" encoding="gb2312" ?><!DOCTYPE bookinfo <!ELEMENT bookinfo
9、 (title,author,publish,price)><!ELEMENT title (#PCDATA)><!ELEMENT author (#PCDATA)><!ELEMENT publish (publisher,ISBN,pubdate)><!ELEMENT publisher (#PCDATA)><!ELEMENT ISBN (#PCDATA)><!ELEMENT pubdate (#PCDATA)><!ELEMENT price (#PCDATA)>><bookinfo>
10、 <title>計算機(jī)導(dǎo)論</title> <author>丁躍潮等</author> <publish> <publisher>高等教育出版社
11、</publisher> <ISBN>7-04-014768-8</ISBN> <pubdate>2004.6</pubdate> </publish>
12、160; <price>19.7</price></bookinfo>顯示結(jié)果如圖4.2。圖4.2 復(fù)合型元素的用法4.2.2元素的聲明1.元素聲明的基本語法元素聲明的語法如下:<!ELEMENT Element_Name Element_Defination>其中Element_Name為聲明的元素名稱,Element_Defination為元素的內(nèi)容格式的定義。合法的元素聲明語句如:<!ELEMENT bookinfo (title,author,publish,price)><
13、;!ELEMENT publisher (#PCDATA)>2.空元素的聲明在第3章中已介紹了空標(biāo)記的使用方法,那么在DTD中如何對與其對應(yīng)的空元素進(jìn)行聲明呢?其聲明語法如下:<!ELEMENT Element_Name EMPTY>例如下面語句:<!ELEMENT hr EMPTY>3.不限定元素的內(nèi)容的聲明ANY是DTD中使用很頻繁的一個關(guān)鍵字,特別是對于文檔根元素的聲明。我們在定義一個DTD文檔時通常很難準(zhǔn)確地確定一個標(biāo)記是否具有子標(biāo)記的情況,此時一般的做法是指定該標(biāo)記的子標(biāo)記為ANY型(表示可以是任意的標(biāo)記),這樣在它之中可以包含任何數(shù)據(jù)、任何聲明的子元素
14、及其數(shù)據(jù)和子元素的組合。ANY元素的聲明格式如下:<!ELEMENT Element_Name ANY>而在文檔剛開始定義時,我們并不明確將來的應(yīng)用領(lǐng)域要有多少個標(biāo)記,所以惟一的做法就是標(biāo)記為ANY類型,表示可以包含任何標(biāo)記和可解析數(shù)據(jù)。例如:<!ELEMENT person ANY>然后在文檔的實際開發(fā)過程中再逐步完善該標(biāo)記的子標(biāo)記的具體定義,將ANY關(guān)鍵字替換掉?!纠?.3】ANY的用法,code4_3.xml。<?xml version="1.0" encoding="gb2312" ?><!DOCTYPE
15、 bookinfo <!ELEMENT bookinfo ANY><!ELEMENT title (#PCDATA)><!ELEMENT author (#PCDATA)><!ELEMENT publisher (#PCDATA)><!ELEMENT price (#PCDATA)>><bookinfo> <title>計算機(jī)導(dǎo)論</title>
16、60; <author>丁躍潮等</author> <publisher>高等教育出版社</publisher> <price>19.7</price></bookinfo>顯示結(jié)果與圖4.1相同。文檔當(dāng)中能否有多個ANY型的標(biāo)記呢?這是完全可以的,因為ANY型的標(biāo)記不一定是根標(biāo)記?!纠?.4】包含多個ANY型標(biāo)記的XML文檔,cod
17、e4_4.xml。<?xml version="1.0" encoding="gb2312" ?><!DOCTYPE bookinfo <!ELEMENT bookinfo ANY><!ELEMENT title ANY><!ELEMENT author ANY><!ELEMENT publisher ANY><!ELEMENT price ANY>><bookinfo> &l
18、t;title>計算機(jī)導(dǎo)論</title> <author>丁躍潮等</author> <publisher>高等教育出版社</publisher> <price>19.7</price></bookinfo>ANY型的標(biāo)記在文檔中應(yīng)盡量少使用,
19、因為這與XML文檔的數(shù)據(jù)結(jié)構(gòu)性相違背。但多數(shù)情況之下在定義一個標(biāo)記的所有子標(biāo)記之前,總是首先以ANY代替,最后再以實際的子標(biāo)記替代ANY關(guān)鍵字,定義出具體的DTD文檔。4.子元素列表的設(shè)定在XML中有一種針對復(fù)合元素的最為嚴(yán)格的設(shè)定方法,稱為子元素列表的設(shè)定。這種方式下,元素都擁有哪些子元素、每個子元素出現(xiàn)的次數(shù)和位置都有明確的規(guī)定,在具體文檔實現(xiàn)時,必須嚴(yán)格執(zhí)行。子元素列表的設(shè)定語法如下:<!ELEMENT Element_Name(Child_Element1, Child_Element2,)>其中(Child_Element1, Child_Element2,)部分為Ele
20、ment_Name所擁有的子元素列表?!纠?.5】子元素列表的設(shè)定,code4_5.xml。<?xml version="1.0" encoding="gb2312" ?><!DOCTYPE bookinfo <!ELEMENT bookinfo (title,author,publish,price)><!ELEMENT title (#PCDATA)><!ELEMENT author (#PCDATA)><!ELEMENT publish (publisher,ISBN,pubdate)&g
21、t;<!ELEMENT publisher (#PCDATA)><!ELEMENT ISBN (#PCDATA)><!ELEMENT pubdate (#PCDATA)><!ELEMENT price (#PCDATA)>><bookinfo> <title>計算機(jī)導(dǎo)論</title> <author>丁躍潮等</auth
22、or> <publish> <publisher>高等教育出版社</publisher> <pubdate>2004.6</pubdate>
23、; <ISBN>7-04-014768-8</ISBN> </publish> <price>19.7</price></bookinfo>上面程序是一個不合法的文檔,原因在于,子標(biāo)記<pubdate></pubdate>與<ISBN>&l
24、t;/ISBN>的使用順序與DTD中定義的順序不一致。DTD中一個標(biāo)記后面的子標(biāo)記列表中,子標(biāo)記出現(xiàn)的次序代表了將來XML文檔中的子標(biāo)記出現(xiàn)次序,而且這種次序不能被違背。5.可選擇的子標(biāo)記有些時候,需要在兩個或多個互斥的元素中進(jìn)行選擇。即多選一的情況,如一個人的性別可以是男或女,兩者中只能有一種情況。DTD有專門的語法來處理這種情況,其語法如下:<!ELEMENT Element_Name(Child_Element1|Child_Element2|)>其中(Child_Element1|Child_Element2|)部分為選擇性元素組合,具體使用時必須要在這個列表中選擇其
25、一?!纠?.6】子元素列表的設(shè)定,code4_6.xml。<?xml version="1.0" encoding="gb2312" ?><!DOCTYPE bookinfo <!ELEMENT bookinfo (title,author,publish,price)><!ELEMENT title (#PCDATA)><!ELEMENT author (#PCDATA)><!ELEMENT publish (publisher|ISBN|pubdate)><!ELEMENT pu
26、blisher (#PCDATA)><!ELEMENT ISBN (#PCDATA)><!ELEMENT pubdate (#PCDATA)><!ELEMENT price (#PCDATA)>><bookinfo> <title>計算機(jī)導(dǎo)論</title> <author>丁躍潮等</author>
27、; <publish> <publisher>高等教育出版社</publisher> </publish> <price>19.7</price></bookin
28、fo>6.元素出現(xiàn)次數(shù)的控制在DTD中元素定義一個標(biāo)記的子標(biāo)記無非是解決該標(biāo)記可以包含什么標(biāo)記,各個子標(biāo)記的出現(xiàn)次序以及能夠出現(xiàn)的次數(shù)的問題。DTD可以在一定程度上控制出現(xiàn)的次數(shù)。太精確太復(fù)雜的控制是不必要的。如明確規(guī)定一個元素出現(xiàn)3次、4次,是容易作到的,使用上面介紹的子元素列表的設(shè)定方法即可實現(xiàn),但如果重復(fù)出現(xiàn)的次數(shù)較多時,這種方法就顯得十分笨拙,這時可用以下方法來對其進(jìn)行控制:(1)一個元素可能出現(xiàn)1次,也可能不出現(xiàn)。這時可通過在元素名后面加上一個“?”來實現(xiàn)。(2)一個元素可能不出現(xiàn),也可能出現(xiàn)多次。這時可通過在元素名后面加上一個“*”來實現(xiàn)。(3)一個元素可能出現(xiàn)1次,也可能出
29、現(xiàn)多次,但至少也要出現(xiàn)一次。這時可通過在元素名后面加上一個“+”來實現(xiàn)。7. 元素組在聲明復(fù)合型元素的時候,可以使用括號將其部分子元素組合在一起,成為一個“元素組”,該元素組在特性上與普通元素沒什么區(qū)別,可以對其應(yīng)用“?”、“*”、“+”等控制字符?!纠?.7】元素組的使用,code4_7.xml。<?xml version="1.0" encoding="gb2312" ?><!DOCTYPE bookinfo <!ELEMENT bookinfo (title,author,price)+)><!ELEM
30、ENT title (#PCDATA)><!ELEMENT author (#PCDATA)><!ELEMENT price (#PCDATA)>><bookinfo> <title>計算機(jī)導(dǎo)論</title> <author>丁躍潮等</author>
31、; <price>19.7</price> <title>三國演義</title> <author>羅貫中</author> <price>50.0</price></bookinfo>顯示結(jié)果如圖4.3。圖4.3 元素組的使用在實際應(yīng)用中
32、,使用分組可能不是一種最好的方案。這時我們也可以先將準(zhǔn)備分組的元素定義為一個復(fù)合元素,再在原來的元素中引用剛定義的復(fù)合元素,這樣文檔的結(jié)構(gòu)更清晰。【例4.8】較好的方案,code4_8.xml。<?xml version="1.0" encoding="gb2312"?><!DOCTYPE bookinfo <!ELEMENT maininfo (title, author, price)> <!ELEMENT bookinfo (booknum
33、b, maininfo+)> <!ELEMENT booknumb (#PCDATA)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT price (#PCDATA)>><bookinfo> <booknumb>2</booknumb>
34、160; <maininfo> <title>計算機(jī)導(dǎo)論</title> <author>丁躍潮等</author> <price>19.7</price> </maininfo>
35、 <maininfo> <title>三國演義</title> <author>羅貫中</author> <price>50.0</price> </maininfo></bookinf
36、o>顯示結(jié)果如圖4.4。圖4.4 較好的方案8.混合型元素還有另一種元素,其內(nèi)容既可以為字符數(shù)據(jù),也可以為子元素,這種元素稱為混合型元素?;旌闲驮芈暶鞲袷饺缦拢?lt;!ELEMENT Element_Name(#PCDATA|Child_Element1|Child_Element2,)>混合型元素的存在破壞了文檔的層次結(jié)構(gòu)化,不利于應(yīng)用軟件對XML文檔的處理,在XML文檔開發(fā)過程中,它可以作為一個不成熟的DTD文檔,一步一步地在XML文檔中添加標(biāo)記,邊添加邊測試其正確性,這時可將尚未處理的部分作為字符數(shù)據(jù)組織到一個混合型元素中,以使文檔通過測試。但在文檔最后完成時,要通過添加
37、新標(biāo)記的方法來清除這種非結(jié)構(gòu)化信息。4.3 DTD屬性 上一節(jié) 本章開頭什么是屬性,簡單的講就是元素的附加特性,在DTD中聲明元素時,也必須對該元素的屬性進(jìn)行聲明。4.3.1屬性的聲明在DTD中,屬性聲明的格式如下:<!ATTLIST Element_name Attribute_name TYPE Default_value>其中<!ATTLIST>為屬性聲明的關(guān)鍵字,Element_name為元素名,Attribute_name為屬性名,TYPE是屬性類型,Default_value為沒有設(shè)定屬性值時的默認(rèn)值?!纠?.9】屬性的聲明,code4_9.xml。<
38、?xml version="1.0" encoding="gb2312" ?><!DOCTYPE bookinfo <!ELEMENT bookinfo (title,author,publisher,price)><!ATTLIST bookinfo ISBN CDATA "7-04-014768-8"><!ELEMENT title (#PCDATA)><!ELEMENT author (#PCDATA)><!ELEMENT publisher (#PCDATA)&
39、gt;<!ELEMENT price (#PCDATA)>><bookinfo ISBN="7-04-014768-8"> <title>計算機(jī)導(dǎo)論</title> <author>丁躍潮等</author> <publisher>高等教
40、育出版社</publisher> <price>19.7</price></bookinfo>顯示結(jié)果如圖4.5。圖4.5 屬性的聲明在聲明屬性時有如下需注意的事項:1.可以多次為一個標(biāo)記聲明其中所包含的屬性。如在XML文檔中有下面語句:<bookinfo id="001" bookcategory="文藝" ></bookinfo>屬性聲明可以為:<!ATTLIST bookinfo id C
41、DATA "001"><!ATTLIST bookinfo bookcategory CDATA "文藝" ><!ELEMENT bookinfo (#PCDATA)>2.屬性的聲明在文檔中的次序沒有嚴(yán)格的要求,可位于與其相連的元素聲明之前或之后。如在XML文檔中有下面語句:<bookinfo id="001" bookcategory="文藝" ></bookinfo>屬性聲明可以為:<!ATTLIST bookinfo bookcategory CDA
42、TA "文藝" ><!ATTLIST bookinfo id CDATA "001"><!ELEMENT bookinfo (#PCDATA)>3.所有標(biāo)記的屬性,都要在各自所對應(yīng)的標(biāo)記中聲明。如在XML文檔中有下面語句:<bookinfo id="001" bookcategory="文藝" ></bookinfo><publish publisher="高等教育出版社" ISBN="7-04-014768-8"&
43、gt;</publish>屬性聲明可以為:<!ATTLIST bookinfo bookcategory CDATA "文藝" ><!ATTLIST bookinfo id CDATA "001"><!ELEMENT bookinfo (#PCDATA)><!ATTLIST publish publisher CDATA "高等教育出版社" ><!ATTLIST publish ISBN CDATA "7-04-014768-8"><!E
44、LEMENT publish (#PCDATA)>4.屬性有四種不同類型的缺省值,可在屬性聲明中的Default_value部分指定:· default:表示使用提供的缺省值,default不是一個關(guān)鍵字,它代表一個預(yù)設(shè)的字符串。 <!ATTLIST bookinfo bookcategory("文藝"|"自然科學(xué)")"文藝" >上例句表示當(dāng)在XML文檔中省略了對bookinfo元素的bookcategory屬性值進(jìn)行設(shè)定時,該屬性的缺省值就是“文藝”。· #REQUIRED:表示屬性值必須指定
45、· #IMPLIED:表示標(biāo)記的這個屬性可用可不用 · #FIXED:表示標(biāo)記的某個屬性值是一個固定值,且必須是指定的值。 4.3.2屬性的類型在屬性的聲明中TYPE部分為屬性的類型設(shè)定,DTD中屬性的類型有10種,下面將對這些數(shù)據(jù)類型進(jìn)行逐一的介紹。1.CDATA型CDATA型表明屬性值為不包含“<”和“"”的任意字符串,如果屬性值中需要包含“<”和“"”,則可使用特殊字符來代替。2. Enumerated型如果屬性值并不是任意的字符串,而是在幾個可能的值中進(jìn)行選擇,如書籍的“類別”屬性,其值可為“文藝”,或為“自然科學(xué)”,而不可
46、能為其他情況時,則可以將書籍的“類別”屬性設(shè)定為Enumerated型。3.ID型當(dāng)元素的某個屬性值是不能重復(fù)時,如書籍的“ISBN”屬性、個人的“身份證號”屬性等,要定義這樣的屬性則需使用屬性的ID類型。在一個XML文檔中,所有元素的ID類型屬性的屬性值必須是唯一的,不可重復(fù),另外,一個元素不能有超過一個ID類型的屬性。4.IDREF與IDREFS型IDREF為Identifier Reference的縮寫,IDREF與ID類型屬性的關(guān)系為子元素與父元素的關(guān)系,即IDREF類型屬性的值必須是其它元素的ID類型屬性的值,且該ID類型屬性的值必須在文檔的其他地方被設(shè)定過。IDREFS類型屬性的屬
47、性值可有多個,每一個都必須是在文檔其它地方被設(shè)定了的ID類型的屬性值,而這多個屬性值之間用空格來隔開?!纠?.10】IDREFS的使用,code4_10.xml。<?xml version="1.0" encoding="gb2312"?><!DOCTYPE school <!ELEMENT school (teacher, subject*)> <!ELEMENT teacher (#PCDATA)>
48、<!ELEMENT subject (#PCDATA)> <!ATTLIST teacher teach IDREFS #IMPLIED> <!ATTLIST subject number ID #REQUIRED> ><school> <teacher teach="c0001 c0002 c0003">
49、160; 丁瀟</teacher> <subject number="c0001"> PowerBuilder </subject> <subject number="c0002"> AutoCAD </subject>
50、160; <subject number="c0003"> XML </subject></school>顯示結(jié)果如圖4.6。圖4.6 IDREFS的使用5.ENTITY與ENTITIES型ENTITY類型的屬性提供了把外部二進(jìn)制形式的文件(如JPEG、MP3等)和外部不可解析實體鏈接到XML文檔的功能。因此其屬性值也必須為不可解析的鏈接外部實際數(shù)據(jù)的通用實體名。ENTITIES類型屬性的屬性值可由多個不可解析的外部實體名稱組成,各
51、實體名稱之間使用空格來分隔?!纠?.11】ENTITY與ENTITIES的使用,code4_11.xml。<?xml version="1.0" encoding="gb2312"?><!DOCTYPE customers <!ELEMENT customers (customer*)><!ELEMENT customer (username, password, picture)><!ELEMENT username (#PCDATA)><!ELEMENT password (#PCDATA)
52、><!ELEMENT picture EMPTY><!ATTLIST picture pic ENTITIES #REQUIRED><!ATTLIST customer ID ID #REQUIRED><!NOTATION jpeg SYSTEM "mspaint.exe"><!ENTITY pic1 SYSTEM "a.jpg" NDATA jpg><!ENTITY pic2 SYSTEM "b.jpg" NDATA jpg><!ENTITY pic
53、3 SYSTEM "c.jpg" NDATA jpg><!ENTITY pic4 SYSTEM "d.jpg" NDATA jpg>><customers> <customer ID="c0500103"> <username>cheaperget</username>
54、60; <password>12345678</password> <picture pic="pic1 pic2"/> </customer> <customer ID="c0500208"> <username>dreamingboy</
55、username> <password>22345678</password> <picture pic="pic3 pic4"/> </customer></customers>本例不是所有XML瀏覽器可以自動識別的通用格式,僅僅是某些瀏覽器和應(yīng)用程序可能采用的在文檔中嵌入非XML數(shù)據(jù)的方法而已。6.NMT
56、OKEN與NMTOKENS型NMTOKEN屬性類型限定屬性值是有效的XML名稱,這個屬性值可以是由英文、數(shù)字、“.”、 “_”、“-”、“:”等組成,這里有幾點需要注意。· 不能包括空格 · 以上字符中除“:”以外,其它字符都可以作為開頭字符 · “:”可以出現(xiàn)在中間,但由于它是命名域的關(guān)鍵字符,所以一般不提倡使用。 正因為NMTOKEN屬性類型對于字符的嚴(yán)格要求,使得它在一些常用編程語言中,都是合法的數(shù)據(jù),這就為這些編程語言對XML文檔數(shù)據(jù)的操作打下了良好的基礎(chǔ)。NMTOKENS屬性類型是與NMTOKEN屬性相近的形式。這種類型的屬性可以使如下情況合法屬性由若干
57、XML名稱組成,彼此間由空格分隔。通??蔀槭褂肗MTOKEN屬性相同的理由而使用NMTOKENS屬性,但僅僅在需要多個名字的時候。7.NOTATION型XML文檔中引入了外部不可解析實體后,解析器無法解析這些二進(jìn)制文件,這時,我們就可以使用NOTATION類型的屬性為這些二進(jìn)制文件指定與其對應(yīng)的應(yīng)用軟件以對其進(jìn)行處理?!纠?.12】NOTATION的使用,code4_12.xml。<?xml version="1.0" encoding="gb2312" ?><!DOCTYPE customers <!ELEMENT custom
58、ers (customer*)><!ELEMENT customer (username,password,picture)><!ELEMENT username (#PCDATA)><!ELEMENT password (#PCDATA)><!NOTATION mspaint SYSTEM "C:WINDOWSsystem32mspaint.exe"><!ELEMENT picture EMPTY><!ATTLIST picture pic ENTITIES #REQUIRED><!ATT
59、LIST picture procedure NOTATION (mspaint) #REQUIRED><!ATTLIST customer ID ID #REQUIRED><!ENTITY pic1 SYSTEM "a.jpg" NDATA mspaint><!ENTITY pic2 SYSTEM "b.jpg" NDATA mspaint><!ENTITY pic3 SYSTEM "c.jpg" NDATA mspaint><!ENTITY pic4 SYSTEM &qu
60、ot;d.jpg" NDATA mspaint>><customers><customer ID="c0500103" > <username>cheaperget</username> <password>12345678</password> <picture pic="pic1 pic2" procedure
61、="mspaint"/></customer><customer ID="c0500208" > <username>dreamingboy</username> <password>22345678</password> <picture pic="pic3 pic4" procedure="msp
62、aint"/></customer></customers>4.4 DTD中的實體 上一節(jié) 下一節(jié) 本章開頭在第3章中我們已接觸了預(yù)定義的實體,在DTD中,還存在自定義實體,定義后,依照一定的語法規(guī)則可在XML文檔或DTD中進(jìn)行引用。4.4.1實體的概念實體是包含了文檔片段的虛擬存儲單元,其可用來存儲XML聲明、DTD、其它形式文本、二進(jìn)制數(shù)據(jù)等。簡單的講就是一段代碼或數(shù)據(jù)的代稱,這個代稱即為實體的名字。當(dāng)我們需要在文檔中引用某段代碼或數(shù)據(jù)時,則可以引用與這段代碼或數(shù)據(jù)相對應(yīng)的實體名稱來代替實體的具體內(nèi)容。具有正確性檢查功能的XML處理器在提交文檔給最終
63、應(yīng)用程序之前,或在顯示文檔以前,將先把所有不同的實體引用替換為與其對應(yīng)的具體內(nèi)容,從而構(gòu)成一個結(jié)構(gòu)完整的文檔。4.4.2實體的分類按照實體的具體內(nèi)容來分類,實體可分為可解析與不可解析兩類??山馕鰧嶓w其具體內(nèi)容為簡單的字符、數(shù)字、文本塊;而不可解析實體其具體內(nèi)容則為圖片、聲音等二進(jìn)制文件。按照邏輯存儲來分類,實體可分為內(nèi)部實體與外部實體兩類。內(nèi)部實體,其內(nèi)容是在文檔內(nèi)部設(shè)定的;而外部實體,則是一個外部獨立的物理存儲對象,如某個外部文件。按照使用的范圍來分類,實體可分為一般實體與參數(shù)實體兩類。一般實體都是用來構(gòu)成文檔的具體內(nèi)容,可出現(xiàn)在XML文檔中,也可出現(xiàn)在DTD中;而參數(shù)實體只能出現(xiàn)在DTD中
64、,不能出現(xiàn)在XML文檔中。1.內(nèi)部一般實體內(nèi)部一般實體就是在文檔實體內(nèi)部定義和使用的實體,其內(nèi)容通常是一段文本字符。這種實體要在DTD中通過DTD語句定義,可以在XML文檔中使用,亦可在DTD中使用。其定義的基本語法為:<!ENTITY Eentity_name "Replacement" >其中<!ENTITY>為關(guān)鍵字,Eentity_name為實體名稱,Replacement為實體所代替的文本內(nèi)容。引用內(nèi)部一般實體的方法為:&Eentity_name;【例4.13】內(nèi)部一般實體的使用,code4_13.xml。&
65、lt;?xml version="1.0" encoding="gb2312"?><!DOCTYPE bookinfo <!ELEMENT bookinfo (title, author, publish, price)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT pub
66、lish (publisher, ISBN, pubdate)> <!ELEMENT publisher (#PCDATA)> <!ELEMENT ISBN (#PCDATA)> <!ELEMENT pubdate (#PCDATA)> <!ELEMENT price (#PCDATA)> <!ENTITY thepublisher "高等教育出版
67、社">><bookinfo> <title>計算機(jī)導(dǎo)論</title> <author>丁躍潮等</author> <publish> <publisher> &thepublisher; </publisher>
68、0; <ISBN>7-04-014768-8</ISBN> <pubdate>2004.6</pubdate> </publish> <price>19.7</price></bookinfo>顯示結(jié)果與本章第二節(jié)圖4.2相同。當(dāng)內(nèi)部一般實體在DTD中引用時,有以下幾方面需注意:· 不能在元素及屬性的聲明中引用內(nèi)部一般實體。
69、如下面的聲明就是非法的: <!ENTITY pcd (#PCDATA)><!ELEMENT title &pcd;>· 在語句中不能出現(xiàn)循環(huán)。如下面的語句即為非法的: <!ENTITY thepub "北大&pub;"><!ENTITY pub "出版社&thepub;">2.外部一般實體所謂外部一般實體就是在文檔實體以外定義的,要通過一個URL才能引用到的實體。外部實體為獨立的
70、文件,其可被多個文檔所引用。正因為每一個完整的XML文檔都是一個合法的實體,所以XML通過對外部實體的引用,可以在一個XML文檔中嵌入另一個XML文檔,或者將多個文檔組合成一個文檔。其定義的基本語法為:<!ENTITY Eentity_name "URL" >其中URL為引用的外部實體的URL地址。引用外部實體也與引用內(nèi)部一般實體的方法一樣:&Eentity_name;假如有一個XML文檔code4_14out.xml如下:<?xml version="1.0" encoding="gb2312
71、" ?><publish> <publisher>高等教育出版社</publisher><ISBN>7-04-014768-8</ISBN><pubdate>2004.6</pubdate></publish>我們可以通過下面的例子把它作為外部實體來引用?!纠?.14】外部一般實體的使用,code4_14.xml。<?xml version="1.0" encoding=&q
72、uot;gb2312" standalone="no"?><!DOCTYPE bookinfo <!ELEMENT bookinfo (title,author,publish,price)><!ELEMENT title (#PCDATA)><!ELEMENT author (#PCDATA)><!ELEMENT publish (publisher,ISBN,pubdate)><!ELEMENT publisher (#PCDATA)><!ELEMENT ISBN (#PCDATA)
73、><!ELEMENT pubdate (#PCDATA)><!ELEMENT price (#PCDATA)><!ENTITY pub SYSTEM "code4_14out.xml">><bookinfo> <title>計算機(jī)導(dǎo)論</title> <author>丁躍潮等</author>
74、; &pub; <price>19.7</price></bookinfo>顯示結(jié)果仍與本章第二節(jié)圖4.2相同。在引用外部一般實體時,有以下幾方面需注意:· 因為在一個文檔中需引用某些外部文件,所以該文檔聲明中的standalone屬性不再是默認(rèn)值“yes”,而應(yīng)該為“no”。 · 作為外部一般實體的文檔,如果使用的是XML的默認(rèn)字符集即UTF-8或UNICODE,則可以在文檔
75、頭部不進(jìn)行XML聲明,否則,必須有XML聲明,且聲明時,一定要說明ecoding屬性。 3.內(nèi)部參數(shù)實體內(nèi)部參數(shù)實體是指在獨立的外部DTD文檔的內(nèi)部定義和使用的實體,其內(nèi)容為僅能為DTD而非XML文檔內(nèi)容的書寫文本。這里提到參數(shù)實體,參數(shù)實體與前面所講的一般實體是有區(qū)別的:· 在引用形式上,一般實體的引用為“&Eentity_name;”,而參數(shù)實體的引用則為“%Eentity_name;” · 在引用范圍上,一般實體可在XML主本文檔中引用,也可在DTD中引用,而參數(shù)實體只可在DTD中引用 定義內(nèi)部參數(shù)實體的基本語法如下:<!ENTITY %
76、160; Eentity_name "Replacement" >【例4.15】內(nèi)部參數(shù)實體的使用,code4_15.dtd。<?xml version="1.0" encoding="gb2312" ?><!ELEMENT bookinfo (title,author,publish,price)><!ELEMENT title (#PCDATA)><!ELEMENT author (#PCDATA)><!ENTITY % pub "(publishe
77、r,ISBN,pubdate)"><!ELEMENT publish %pub;><!ELEMENT publisher (#PCDATA)><!ELEMENT ISBN (#PCDATA)><!ELEMENT pubdate (#PCDATA)><!ELEMENT price (#PCDATA)>4.外部參數(shù)實體外部參數(shù)實體是指在獨立的外部DTD文檔的外部定義和使用的實體,外部參數(shù)實體用于將多個獨立的DTD文檔組合成一個大的DTD文檔。定義外部參數(shù)實體的基本語法為:<!ENTITY %
78、Eentity_name "URL" >【例4.16】外部參數(shù)實體的使用,code4_16.xml。<?xml version="1.0" encoding="gb2312"?><!DOCTYPE bookinfo SYSTEM "code4_16_1.dtd"><bookinfo> <title>計算機(jī)導(dǎo)論</title>
79、0; <author>丁躍潮等</author> <publish> <publisher>高等教育出版社</publisher> <ISBN>7-04-014768-8</ISBN> <pubdate>2004.6&l
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國奧卡西平市場調(diào)查研究報告
- 2025至2031年中國白色限次使用工作服行業(yè)投資前景及策略咨詢研究報告
- 2025至2031年中國橫研機(jī)行業(yè)投資前景及策略咨詢研究報告
- 2025至2031年中國強(qiáng)力金型洗滌劑行業(yè)投資前景及策略咨詢研究報告
- 二零二五年度大型活動現(xiàn)場布置及道具制作委托合同范本3篇
- 二零二五年度股東協(xié)議書-股東對公司資產(chǎn)及權(quán)益轉(zhuǎn)讓及受讓及轉(zhuǎn)讓協(xié)議3篇
- 二零二五年度城市綜合體物業(yè)移交與增值服務(wù)協(xié)議3篇
- 二零二五年度電子招標(biāo)投標(biāo)平臺系統(tǒng)維護(hù)合同
- 二零二五年度道路施工土石方棄土清理與處置協(xié)議3篇
- 二零二五年度個人創(chuàng)業(yè)貸款還款合同范本4篇
- 勵志課件-如何做好本職工作
- 2024年山東省濟(jì)南市中考英語試題卷(含答案解析)
- 2024年社區(qū)警務(wù)規(guī)范考試題庫
- 2024年食用牛脂項目可行性研究報告
- 靜脈治療護(hù)理技術(shù)操作標(biāo)準(zhǔn)(2023版)解讀 2
- 2024年全國各地中考試題分類匯編(一):現(xiàn)代文閱讀含答案
- 2024-2030年中國戶外音箱行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
- GB/T 30306-2024家用和類似用途飲用水處理濾芯
- 家務(wù)分工與責(zé)任保證書
- 武強(qiáng)縣華浩數(shù)控設(shè)備科技有限公司年產(chǎn)9000把(只)提琴、吉他、薩克斯等樂器及80臺(套)數(shù)控雕刻設(shè)備項目環(huán)評報告
- 消防安全隱患等級
評論
0/150
提交評論