日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > php框架 > 框架設(shè)計 > XML文檔類型定義---DTD文檔

XML文檔類型定義---DTD文檔

來源:程序員人生   發(fā)布時間:2016-08-17 10:01:06 閱讀次數(shù):3611次

DTD的作用

XML文檔是1種元標記語言,即1種定義標記語言的語言。在XML中可以創(chuàng)建新的標記語言,這些新的標記語言(也叫標記集)要通過文檔類型定義(Document Type Definitions,DTD)來定義。DTD文檔是這些新的標記語言的法律性文檔。如果XML文檔的語法符,DTD的定義和規(guī)定,那末就稱為1個合法的XML文檔,否則就是非法的XML文檔。合法的XML文檔在實際利用中的地位很重要,由于只有合法的XML文檔才能被利用軟件有效地處理。
DTD定義了文檔的邏輯結(jié)構(gòu),規(guī)定了文檔中所使用的元素、實體、元素的屬性、元素與實體之間的關(guān)系。其作用主要表現(xiàn)在以下幾個方面。
(1) 使用DTD可以提供1種統(tǒng)1的格式。XML的可擴大性為文檔的作者提供了很高的靈活性,可有時候需要的是統(tǒng)1,要求某1類文檔具有相同的結(jié)構(gòu)。
(2) 使用DTD可以保證數(shù)據(jù)交換和同享的順利進行。
(3) DTD使用戶能夠不依賴具體的數(shù)據(jù)就知道文檔的邏輯結(jié)構(gòu)。在沒有XML文檔的時候,也能夠根據(jù)DTD為XML文檔編寫樣式單,編寫處理程序,這樣可以有效地提高工作效力。
(4) 使用DTD可以驗證數(shù)據(jù)的有效性。DTD對文檔的邏輯結(jié)構(gòu)進行了束縛,這類束縛可以比較寬松,也能夠10分嚴格。可以根據(jù)DTD檢查數(shù)據(jù),以驗證其是不是符合規(guī)定和要求,這可以保證數(shù)據(jù)的正確和有效。

DTD元素

DTD中描寫的基本部件是元素和屬性,它們負責肯定XML文檔的邏輯結(jié)構(gòu)。元素表示1個信息對象,而屬性表示這個對象的性質(zhì)。所有元素中有且只有1個根元素,其他的元素都是它的子元素,除根元素外,每一個元素都被其他元素包括,1個元素可以有幾個不同類型的子元素。

  1. -元素的基本類型 元素的基本類型大致可分為兩種,1種稱為簡單型,另外一種稱為復(fù)合型。簡單型具有文本數(shù)據(jù),便可析字符數(shù)據(jù),該類型也稱為上下文中的“#PCADTA”;復(fù)合型可以包括其他元素和文本數(shù)據(jù)。

    • 簡單型
      “#PCDATA”(Parsed Character Data)表示標記的內(nèi)容是可解析文本,所謂的可解析文本就是非標記文本。用“#PCDATA”規(guī)范了的元素不能再包括子元素。例如How do you do是不包括標記的文本,而How do you do就不是可解析的數(shù)據(jù)類型,由于其中包括有標記和。另外DTD文檔中不同元素定義的次序沒有前后關(guān)系,但文檔的語法對大小寫敏感。
      “#PCDATA”的聲明格式:
<!ELEMENT Element_Name (#PCDATA )>

“#PCDATA”的用法,代碼以下所示。

?xml version="1.0" encoding="gb2312" ?> <!DOCTYPE bookinfo [ <!ELEMENT bookinfo (title,author,publisher,price)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT publisher (#PCDATA)> <!ELEMENT price (#PCDATA)> ]> <bookinfo> <title>計算機導(dǎo)論</title> <author>丁躍潮等</author> <publisher>高等教育出版社</publisher> <price>19.7</price> </bookinfo>
  • 復(fù)合型
    復(fù)合型元素與簡單型元素相對,復(fù)合型元素可包括其他元素。
    復(fù)合型元素的用法,代碼以下所示
<?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 publisher (#PCDATA)> <!ELEMENT ISBN (#PCDATA)> <!ELEMENT pubdate (#PCDATA)> <!ELEMENT price (#PCDATA)> ]> <bookinfo> <title>計算機導(dǎo)論</title> <author>丁躍潮等</author> <publish> <publisher>高等教育出版社</publisher> <ISBN>7-04-014768⑻</ISBN> <pubdate>2004.6</pubdate> </publish> <price>19.7</price> </bookinfo>

2.-元素的聲明
1. 元素聲明的基本語法
元素的聲明格式:

<ELEMENT Element_Name Element_Defination>

其中,Element_Name為聲明的元素名稱,Element_Defination為元素內(nèi)容格式的定義。
合法的元素聲明語句如:

<!ELEMENT bookinfo (title,author,publish,price)> <!ELEMENT publisher (#PCDATA)>
  1. 空元素的聲明
    在第3章中已介紹了空標記的使用方法,那末在DTD中如何對與其對應(yīng)的空元素進行聲明呢?其聲明格式:
<ELEMENT Element_Name EMPTY>

例以下面的語句:

<ELEMENT hr EMPTY>
  1. 不限定元素內(nèi)容的聲明
    ANY是DTD中使用很頻繁的1個關(guān)鍵字,特別是對文檔根元素的聲明。在定義1個DTD文檔時通常很難準確地肯定1個元素是不是具有子元素的情況,此時1般的做法是指定該元素的子元素為ANY型(表示可以是任意的元素),這樣在它當中可以包括任何數(shù)據(jù)、任何聲明的子元素及其數(shù)據(jù)和子元素的組合。
    ANY元素的聲明格式:
<!ELEMENT Element_Name ANY>

而在文檔剛開始定義時,其實不明確將來的利用領(lǐng)域中會有多少個元素,所以唯1的做法就是標記為ANY類型,表示可以包括任何元素和可解析數(shù)據(jù)。例如:

<!ELEMENT person ANY>

然后在文檔的實際開發(fā)進程中再逐漸完善該元素的子元素的具體定義,將ANY關(guān)鍵字替換掉。
【例4.3】 ANY的用法,代碼如源程序code4_3.xml所示。

<?xml version="1.0" encoding="gb2312" ?> <!DOCTYPE bookinfo [ <!ELEMENT bookinfo ANY> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT publisher (#PCDATA)> <!ELEMENT price (#PCDATA)> ]> <bookinfo> <title>計算機導(dǎo)論</title> <author>丁躍潮等</author> <publisher>高等教育出版社</publisher> <price>19.7</price> </bookinfo>

文檔中能有多個ANY型的元素嗎?這是完全可以的,由于ANY型的元素不1定是根元素。
包括多個ANY型元素的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> <title>計算機導(dǎo)論</title> <author>丁躍潮等</author> <publisher>高等教育出版社</publisher> <price>19.7</price> </bookinfo>

ANY型的元素在文檔中應(yīng)盡可能少使用,由于這與XML文檔的數(shù)據(jù)結(jié)構(gòu)性相背背。但多數(shù)情況之下在定義1個元素的所有子元素之前,總是首先以ANY代替,最后再以實際的子元素替換ANY關(guān)鍵字,定義出具體的DTD文檔。
4. 子元素列表的設(shè)定
在XML中有1種針對復(fù)合元素的最為嚴格的設(shè)定方法,稱為子元素列表的設(shè)定。這類方式下,元素都具有哪些子元素、每一個子元素出現(xiàn)的次數(shù)和位置都有明確的規(guī)定,在具體文檔實現(xiàn)時,必須嚴格履行。
子元素列表的設(shè)定語法以下:

<!ELEMENT Element_Name(Child_Element1, Child_Element2,…)>

其中“(Child_Element1, Child_Element2,…)”部份為Element_Name所具有的子元素列表。
【例4.5】 子元素列表的設(shè)定,代碼以下所示。

<?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 publisher (#PCDATA)> <!ELEMENT ISBN (#PCDATA)> <!ELEMENT pubdate (#PCDATA)> <!ELEMENT price (#PCDATA)> ]> <bookinfo> <title>計算機導(dǎo)論</title> <author>丁躍潮等</author> <publish> <publisher>高等教育出版社</publisher> <pubdate>2004.6</pubdate> <ISBN>7-04-014768⑻</ISBN> </publish> <price>19.7</price> </bookinfo>

上面程序是1個不合法的文檔,緣由在于,標記<pubdate></pubdate><ISBN></ISBN>的使用順序與DTD中定義的順序不1致。在1個標記后面的子標記列表中,子標記出現(xiàn)的次序代表了將來XML文檔中的子標記出現(xiàn)次序,而且這類次序不能被背背。
5. 可選擇的子元素
有些時候,需要在兩個或多個互斥的元素中進行選擇。即多選1的情況,如1個人的性別可以是男或女,二者中只能有1種情況。DTD有專門的語法來處理這類情況,其語法格式以下:

<!ELEMENT Element_Name(Child_Element1|Child_Element2|……)>

其中,“(Child_Element1|Child_Element2|…)”部份為選擇性元素組合,具體使用時必須要在這個列表當選擇其1。
【例4.6】 選擇性元素列表的設(shè)定,代碼以下所示。

<?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 publisher (#PCDATA)> <!ELEMENT ISBN (#PCDATA)> <!ELEMENT pubdate (#PCDATA)> <!ELEMENT price (#PCDATA)> ]> <bookinfo> <title>計算機導(dǎo)論</title> <author>丁躍潮等</author> <publish> <publisher>高等教育出版社</publisher> </publish> <price>19.7</price> </bookinfo>
  1. 元素出現(xiàn)次數(shù)的控制
    在DTD中定義1個元素的子元素不過是解決該元素可以包括甚么元素,各個子元素的出現(xiàn)次序和能夠出現(xiàn)的次數(shù)的問題。DTD可以在1定程度上控制出現(xiàn)的次數(shù)。太精確太復(fù)雜的控制是沒必要要的。如明確規(guī)定1個元素出現(xiàn)3次或4次,是容易使到的,使用上面介紹的子元素列表的設(shè)定方法便可實現(xiàn),但如果重復(fù)出現(xiàn)的次數(shù)較多時,這類方法就顯得10分笨拙,這時候可用以下方法來對其進行控制。
    (1) 1個元素可能出現(xiàn)1次,也可能不出現(xiàn)。這時候可通過在元素名后面加上1個“?”來實現(xiàn)。
    (2) 1個元素可能不出現(xiàn),也可能出現(xiàn)屢次。這時候可通過在元素名后面加上1個“*”來實現(xiàn)。
    (3) 1個元素可能出現(xiàn)1次,也可能出現(xiàn)屢次,但最少也要出現(xiàn)1次。這時候可通過在元素名后面加上1個“+”來實現(xiàn)。
  2. 元素組
    在聲明復(fù)合型元素的時候,可使用括號將其部份子元素組合在1起,成為1個元素組,該元素組在特性上與普通元素沒甚么區(qū)分,可以對其使用“?”、“*”、“+”等控制字符。
    【例4.7】 元素組的使用,代碼以下所示。
<?xml version="1.0" encoding="gb2312" ?> <!DOCTYPE bookinfo [ <!ELEMENT bookinfo ((title,author,price)+)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT price (#PCDATA)> ]> <bookinfo> <title>計算機導(dǎo)論</title> <author>丁躍潮等</author> <price>19.7</price> <title>3國演義</title> <author>羅貫中</author> <price>50.0</price> </bookinfo>

在實際利用中,使用元素組可能不是最好的方案。這時候也能夠先將準備分組的元素定義為1個復(fù)合元素,再在原來的元素中援用剛定義的復(fù)合元素,這樣文檔的結(jié)構(gòu)更清晰。

【例4.8】 較好的方案,代碼以下所示。

<?xml version="1.0" encoding="gb2312"?> <!DOCTYPE bookinfo [ <!ELEMENT maininfo (title, author, price)> <!ELEMENT bookinfo (booknumb, maininfo+)> <!ELEMENT booknumb (#PCDATA)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT price (#PCDATA)> ]> <bookinfo> <booknumb>2</booknumb> <maininfo> <title>計算機導(dǎo)論</title> <author>丁躍潮等</author> <price>19.7</price> </maininfo> <maininfo> <title>3國演義</title> <author>羅貫中</author> <price>50.0</price> </maininfo> </bookinfo>
  1. 混合型元素
    還有另外一種元素,其內(nèi)容既可以為字符數(shù)據(jù),也能夠為子元素,這類元素稱為混合型元素。混合型元素的聲明格式:
<!ELEMENT Element_Name(#PCDATA|Child_Element1|Child_Element2,…)>

混合型元素的存在破壞了文檔的層次結(jié)構(gòu)化,不利于利用軟件對XML文檔的處理,在XML文檔開發(fā)進程中,它可以作為1個不成熟的DTD文檔,1步1步地在XML文檔中添加元素,邊添加邊測試其正確性,這時候可將還沒有處理的部份作為字符數(shù)據(jù)組織到1個混合型元素中,以便使文檔通過測試。但在文檔最后完成時,要通過添加新元素的方法來清除這類非結(jié)構(gòu)化信息。

DTD屬性

4.3.1 屬性的聲明
在DTD中,屬性的聲明格式:

<!ATTLIST Element_name Attribute_name TYPE Default_value>

其中,<!ATTLIST>為屬性聲明的關(guān)鍵字,Element_name為元素名,Attribute_name為屬性名,TYPE是屬性類型,Default_value為沒有設(shè)定屬性值時的默許值。
【例4.9】 屬性的聲明,代碼以下所示。

<?xml version="1.0" encoding="gb2312" ?> <!DOCTYPE bookinfo [ <!ELEMENT bookinfo (title,author,publisher,price)> <!ATTLIST bookinfo ISBN CDATA "7-04-014768⑻"> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT publisher (#PCDATA)> <!ELEMENT price (#PCDATA)> ]> <bookinfo ISBN="7-04-014768⑻"> <title>計算機導(dǎo)論</title> <author>丁躍潮等</author> <publisher>高等教育出版社</publisher> <price>19.7</price> </bookinfo>

圖4.5 屬性的聲明
在聲明屬性時有以下需要注意的事項。
(1) 可以屢次為1個元素聲明其中所包括的屬性。如在XML文檔中有以下語句:

<bookinfo id="001" bookcategory="文藝" > </bookinfo>

屬性聲明可以為

<!ATTLIST bookinfo id CDATA "001"> <!ATTLIST bookinfo bookcategory CDATA "文藝" > <!ELEMENT bookinfo (#PCDATA)>

(2) 屬性的聲明在文檔中的次序沒有嚴格的要求,可位于與其相連的元素聲明之前或以后。如在XML文檔中有以下語句:

<bookinfo id="001" bookcategory="文藝" > </bookinfo>

屬性聲明可以為

<!ATTLIST bookinfo bookcategory CDATA "文藝" > <!ATTLIST bookinfo id CDATA "001"> <!ELEMENT bookinfo (#PCDATA)>

(3) 所有元素的屬性,都要在各自所對應(yīng)的標記中聲明。如在XML文檔中有以下語句:

<bookinfo id="001" bookcategory="文藝" > </bookinfo> <publish publisher="高等教育出版社" ISBN="7-04-014768⑻"> </publish>

屬性聲明可以為

<!ATTLIST bookinfo bookcategory CDATA "文藝" > <!ATTLIST bookinfo id CDATA "001"> <!ELEMENT bookinfo (#PCDATA)> <!ATTLIST publish publisher CDATA "高等教育出版社" > <!ATTLIST publish ISBN CDATA "7-04-014768⑻"> <!ELEMENT publish (#PCDATA)>

(4) 屬性有4種不同類型的默許值,可在屬性聲明中的Default_value部份指定。
① default:表示使用提供的默許值,default不是1個關(guān)鍵字,它代表1個預(yù)設(shè)的字符串。

<!ATTLIST bookinfo bookcategory("文藝"|"自然科學")"文藝" >

此例句表示當在XML文檔中省略了對bookinfo元素的bookcategory屬性值進行設(shè)定時,該屬性的默許值就是“文藝”。
② #REQUIRED:表示屬性值必須指定。
③ #IMPLIED:表示元素的這個屬性可用可不用。
④ #FIXED:表示元素的這個屬性值是1個固定值,且必須是指定的值。
4.3.2 屬性的類型
在屬性的聲明中TYPE部份為屬性的類型設(shè)定,DTD中屬性的類型有10種,下面將對這些數(shù)據(jù)類型進行逐1的介紹。
1. CDATA型
CDATA型表明屬性值為不包括“<”和“””的任意字符串,如果屬性值中需要包括“<”和“””,則可以使用特殊字符來代替。
2. Enumerated型
如果屬性值其實不是任意的字符串,而是在幾個可能的值中進行選擇,如書籍的“種別”屬性,其值可為“文藝”,也可為“自然科學”,而不可能為其他情況時,則可以將書籍的“種別”屬性設(shè)定為Enumerated型。
3. ID型
當元素的某個屬性值是不能重復(fù)時,如書籍的ISBN屬性、個人的“身份證號”屬性等,要定義這樣的屬性則需使用屬性的ID類型。在1個XML文檔中,所有元素的ID類型屬性的屬性值必須是唯1的,不可重復(fù),另外,1個元素不能有超過1個ID類型的屬性。
4. IDREF與IDREFS型
IDREF為Identifier Reference的縮寫,IDREF與ID類型屬性的關(guān)系為子元素與父元素的關(guān)系,即IDREF類型屬性的值必須是其他元素的ID類型屬性的值,且該ID類型屬性的值必須在文檔的其他地方被設(shè)定過。IDREFS類型屬性的屬性值可有多個,每個都必須是在文檔其他地方被設(shè)定了的ID類型屬性的值,而這多個屬性值之間用空格隔開。
【例4.10】 IDREFS的使用,代碼以下所示。

<?xml version="1.0" encoding="gb2312"?> <!DOCTYPE school [ <!ELEMENT school (teacher, subject*)> <!ELEMENT teacher (#PCDATA)> <!ELEMENT subject (#PCDATA)> <!ATTLIST teacher teach IDREFS #IMPLIED > <!ATTLIST subject number ID #REQUIRED > ]> <school> <teacher teach="c0001 c0002 c0003"> 丁瀟 </teacher> <subject number="c0001"> PowerBuilder </subject> <subject number="c0002"> AutoCAD </subject> <subject number="c0003"> XML </subject> </school>
  1. ENTITY與ENTITIES型
    ENTITY類型的屬性提供了把外部2進制情勢的文件(如.jpeg、.mp3等)和外部不可解析實體鏈接到XML文檔的功能。因此其屬性值也必須為不可解析的鏈接外部實際數(shù)據(jù)的通用實體名。ENTITIES類型屬性的屬性值可由多個不可解析的外部實體名稱組成,各實體名稱之間使用空格隔開。
    【例4.11】 ENTITY與ENTITIES的使用,代碼以下所示。
<?xml version="1.0" encoding="gb2312"?> <!DOCTYPE customers [ <!ELEMENT customers (customer*)> <!ELEMENT customer (username, password, picture)> <!ELEMENT username (#PCDATA)> <!ELEMENT password (#PCDATA)> <!ELEMENT picture EMPTY> <!ATTLIST picture pic ENTITIES #REQUIRED > <!ATTLIST customer ID #REQUIRED > <!ENTITY pic1 SYSTEM "a.jpg"> <!ENTITY pic2 SYSTEM "b.jpg"> <!ENTITY pic3 SYSTEM "c.jpg"> <!ENTITY pic4 SYSTEM "d.jpg"> ]> <customers> <customer ID="c0500103"> <username>cheaperget</username> <password>12345678</password> <picture pic="pic1 pic2"/> </customer> <customer ID="c0500208"> <username>dreamingboy</username> <password>22345678</password> <picture pic="pic3 pic4"/> </customer> </customers>

本例不是所有XML閱讀器都可以自動辨認的通用格式,僅僅某些閱讀器和利用程序可能采取的在文檔中嵌入非XML數(shù)據(jù)的方法而已。
6. NMTOKEN與NMTOKENS型
NMTOKEN類型的屬性限定屬性值是有效的XML名稱,這個屬性值可以由英文、數(shù)字、“.”、 “_”、“-”、“:”等組成,這里有幾點需要注意。
(1) 不能包括空格。
(2) 以上字符中除“:”之外,其他字符都可以作為開頭字符。
(3) “:”可以出現(xiàn)在中間,但由于它是命名域的關(guān)鍵字符,所以1般不提倡使用。
正由于NMTOKEN類型的屬性對字符的嚴格要求,使得它在1些經(jīng)常使用編程語言中,都是合法的數(shù)據(jù),這就為這些編程語言對XML文檔數(shù)據(jù)的操作打下了良好的基礎(chǔ)。
NMTOKENS類型的屬性具有與NMTOKEN屬性相近的情勢。這類類型的屬性可使以下情況合法——屬性由若干XML名稱組成,彼其間由空格隔開。通常可為使用NMTOKEN屬性相同的理由而使用NMTOKENS屬性,但僅僅在需要多個名字的時候。
7. NOTATION型
XML文檔中引入了外部不可解析的實體后,解析器沒法解析這些2進制文件,這時候,就能夠使用NOTATION類型的屬性為這些2進制文件指定與其對應(yīng)的利用軟件以對其進行處理。
【例4.12】 NOTATION的使用,代碼以下所示。

<?xml version="1.0" encoding="gb2312" ?> <!DOCTYPE customers [ <!ELEMENT customers (customer*)> <!ELEMENT customer (username,password,picture)> <!ELEMENT username (#PCDATA)> <!ELEMENT password (#PCDATA)> <!NOTATION mspaint SYSTEM "C:\WINDOWS\system32\mspaint.exe"> <!ELEMENT picture EMPTY> <!ATTLIST picture pic ENTITIES #REQUIRED> <!ATTLIST picture procedure NOTATION #REQUIRED> <!ATTLIST customer ID ID #REQUIRED> <!ENTITY pic1 SYSTEM "a.jpg"> <!ENTITY pic2 SYSTEM "b.jpg"> <!ENTITY pic3 SYSTEM "c.jpg"> <!ENTITY pic4 SYSTEM "d.jpg"> ]> <customers> <customer ID="c0500103" > <username>cheaperget</username> <password>12345678</password> <picture pic="pic1 pic2" procedure="mspaint"/> </customer> <customer ID="c0500208" > <username>dreamingboy</username> <password>22345678</password> <picture pic="pic3 pic4" procedure="mspaint"/> </customer> </customers>

DTD中的實體

4.4.1 實體的概念
實體是包括了文檔片斷的虛擬存儲單元,可用來存儲XML聲明、DTD、其他情勢的文本及2進制數(shù)據(jù)等。簡單來說就是1段代碼或數(shù)據(jù)的代稱,這個代稱即為實體的名字。當需要在文檔中援用某段代碼或數(shù)據(jù)時,可以援用與這段代碼或數(shù)據(jù)相對應(yīng)的實體名稱來代替實體的具體內(nèi)容。具有正確性檢查功能的XML處理器在提交文檔給終究利用程序之前或在顯示文檔之前,將先把所有不同的實體援用替換為與其對應(yīng)的具體內(nèi)容,從而構(gòu)成1個結(jié)構(gòu)完全的文檔。
4.4.2 實體的分類
依照實體的具體內(nèi)容來分類,實體可分為可解析與不可解析兩類。可解析實體的具體內(nèi)容為簡單的字符、數(shù)字、文本塊,而不可解析實體的具體內(nèi)容則為圖片、聲音等2進制文件。
依照邏輯存儲來分類,實體可分為內(nèi)部實體與外部實體兩類。內(nèi)部實體的內(nèi)容是在文檔內(nèi)部設(shè)定的;而外部實體則是1個外部獨立的物理存儲對象,如某個外部文件。
依照使用的范圍來分類,實體可分為1般實體與參數(shù)實體兩類。1般實體都用來構(gòu)成文檔的具體內(nèi)容,可出現(xiàn)在XML文檔中,也可出現(xiàn)在DTD中;而參數(shù)實體只能出現(xiàn)在DTD中,不能出現(xiàn)在XML文檔中。
1. 內(nèi)部1般實體
內(nèi)部1般實體就是在文檔實體內(nèi)部定義和使用的實體,其內(nèi)容通常是1段文本字符。這類實體要在DTD中通過DTD語句的定義,可以在XML文檔中使用,也可在DTD中使用。其定義的語法格式以下:

<!ENTITY Eentity_name "Replacement" >

其中,<!ENTITY>為關(guān)鍵字,Eentity_name為實體名稱,Replacement為實體所代替的文本內(nèi)容。援用內(nèi)部1般實體的方法以下:

&Eentity_name;

【例4.13】 內(nèi)部1般實體的使用,代碼以下所示。

<?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 publisher (#PCDATA)> <!ELEMENT ISBN (#PCDATA)> <!ELEMENT pubdate (#PCDATA)> <!ELEMENT price (#PCDATA)> <!ENTITY thepublisher "高等教育出版社"> ]> <bookinfo> <title>計算機導(dǎo)論</title> <author>丁躍潮等</author> <publish> <publisher> &thepublisher; </publisher> <ISBN>7-04-014768⑻</ISBN> <pubdate>2004.6</pubdate> </publish> <price>19.7</price> </bookinfo>

其顯示結(jié)果與4.2節(jié)的圖4.2相同。
當內(nèi)部1般實體在DTD中援用時,有以下幾方面需注意。
(1) 不能在元素及屬性的聲明中援用內(nèi)部1般實體,以下面的語句即為非法的:

<!ENTITY pcd (#PCDATA)> <!ELEMENT title &pcd;>

(2) 在語句中不能出現(xiàn)循環(huán),以下面的語句即為非法的:

<!ENTITY thepub "北京大學&pub;"> <!ENTITY pub "出版社&thepub;">
  1. 外部1般實體
    所謂外部1般實體就是在文檔實體之外定義的,要通過1個URL才能援用到的實體。外部1般實體為獨立的文件,可被多個文檔所援用。正由于每個完全的XML文檔都是1個合法的實體,所以XML通過對外部1般實體的援用,可以在1個XML文檔中嵌入另外一個XML文檔,或?qū)⒍鄠€文檔組合成1個文檔。其定義的語法格式以下:
<!ENTITY Eentity_name "URL" >

其中,URL為援用的外部實體的URL地址。援用外部1般實體也與援用內(nèi)部1般實體的方法1樣:

&Eentity_name;

假設(shè)有1個XML文檔code4_14out.xml以下:

<?xml version="1.0" encoding="gb2312" ?> <publish> <publisher>高等教育出版社</publisher> <ISBN>7-04-014768⑻</ISBN> <pubdate>2004.6</pubdate> </publish>

可以通過下面的例子把它作為外部實體來援用。
【例4.14】 外部1般實體的使用,代碼以下所示。

<?xml version="1.0" encoding="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)> <!ELEMENT pubdate (#PCDATA)> <!ELEMENT price (#PCDATA)> <!ENTITY pub SYSTEM "code4_14out.xml"> ]> <bookinfo> <title>計算機導(dǎo)論</title> <author>丁躍潮等</author> &pub; <price>19.7</price> </bookinfo>

其顯示結(jié)果仍與4.2節(jié)的圖4.2相同。
在援用外部1般實體時,有以下幾方面需注意。
(1) 由于在1個文檔中需援用某些外部文件,所以該文檔聲明中的standalone屬性不再是默許值yes,而應(yīng)當為no。
(2) 作為外部1般實體的文檔,若使用的是XML的默許字符集即UTF⑻或UNICODE,則可以在文檔頭部不進行XML聲明,否則,必須有XML聲明,且聲明時,1定要說明ecoding屬性。
3. 內(nèi)部參數(shù)實體
內(nèi)部參數(shù)實體是指在獨立的外部DTD文檔的內(nèi)部定義和使用的實體,其內(nèi)容為僅能為DTD而非XML文檔內(nèi)容的書寫文本。這里提到參數(shù)實體與前面所講的1般實體是有區(qū)分的:
(1) 在援用情勢上,1般實體的援用為“&Eentity_name;”,而參數(shù)實體的援用則為“%Eentity_name;”
(2) 在援用范圍上,1般實體可在XML文檔中援用,也可在DTD中援用,而參數(shù)實體只可在DTD中援用。
定義內(nèi)部參數(shù)實體的語法格式以下:

<!ENTITY % Eentity_name "Replacement" >

【例4.15】 內(nèi)部參數(shù)實體的使用,代碼以下所示。

<?xml version="1.0" encoding="gb2312" ?> <!ELEMENT bookinfo (title,author,publish,price)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ENTITY % pub "(publisher,ISBN,pubdate)"> <!ELEMENT publish %pub;> <!ELEMENT publisher (#PCDATA)> <!ELEMENT ISBN (#PCDATA)> <!ELEMENT pubdate (#PCDATA)> <!ELEMENT price (#PCDATA)>
  1. 外部參數(shù)實體
    外部參數(shù)實體是指在獨立的外部DTD文檔的外部定義和使用的實體,外部參數(shù)實體用于將多個獨立的DTD文檔組合成1個大的DTD文檔。定義外部參數(shù)實體的語法格式以下:
<!ENTITY % Eentity_name "URL" >

【例4.16】 外部參數(shù)實體的使用,代碼以下所示。

<?xml version="1.0" encoding="gb2312"?> <!DOCTYPE bookinfo SYSTEM "code4_16_1.dtd"> <bookinfo> <title>計算機導(dǎo)論</title> <author>丁躍潮等</author> <publish> <publisher>高等教育出版社</publisher> <ISBN>7-04-014768⑻</ISBN> <pubdate>2004.6</pubdate> </publish> <price>19.7</price> </bookinfo>

程序code4_16_1.dtd為

<?xml version="1.0" encoding="gb2312"?> <!ELEMENT bookinfo (title,author,publish,price)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ENTITY % pub SYSTEM "code4_16_2.dtd"> %pub; <!ELEMENT price (#PCDATA)>

程序code4_16_2.dtd為

<?xml version="1.0" encoding="gb2312" ?> <!ELEMENT publish (publisher,ISBN,pubdate)> <!ELEMENT publisher (#PCDATA)> <!ELEMENT ISBN (#PCDATA)> <!ELEMENT pubdate (#PCDATA)>

使用DTD

4.5.1 內(nèi)部DTD
內(nèi)部DTD的定義語句和XML文檔在同1個文檔中,且通常放置在XML文檔的頭部。在定義內(nèi)部DTD時,定義內(nèi)部DTD的語句要全部放置在文檔類型聲明中,其語法格式:

<!DOCTYPE Root_Element_Name [ … ]>

其中,為關(guān)鍵字,Root_Element_Name為根元素名,[…]部份則為內(nèi)部DTD定義語句。如例4.1,即是1個包括內(nèi)部DTD的XML文檔。
4.5.2 外部DTD
外部DTD就是有關(guān)文檔定義的語句都被獨立出來放在1個外部文件中,對其進行獨立的管理。跟據(jù)其內(nèi)容的性質(zhì),可分為兩種,1種是私有文件,指未公然的、屬于某組織或個人私有的DTD文件;另外一種是公然文件,是指由國際標準組織如ISO等或可發(fā)布技術(shù)建議的組織如W3C等,為某1領(lǐng)域所制定的公然的標準DTD。
援用私有DTD文件的語法格式:

<!DOCTYPE Root_Element_name SYSTEM "URL">

其中,URL為外部DTD文件的相對路徑或絕對路徑,該語句必須置于XML文檔的頭部,且在XML文檔處理指令中要將standalone屬性值設(shè)定為no。如例4.14。
援用公然DTD文件的語法格式:

<!DOCTYPE Root_Element_name PUBLIC "Public_Dtd_name" " Public_Dtd_URL">

其中,PUBLIC為公然DTD文件的關(guān)鍵字。Public_Dtd_name為公然DTD文件的文件名,這個文件名由4個部份組成:第1部份為DTD的發(fā)布者,若是ISO發(fā)布,則第1部份為ISO;若是非ISO的標準組織發(fā)布,則為“+”;若是非標準組織發(fā)布,則為“-”。第2部份為所有者的名字。第3部份為表明這個DTD文件的主要內(nèi)容或種別的扼要文本。第4部份為所使用的語言,該語言標志必須是ISO639所定義過的標準標志。這4部份之間用“//”隔開。Public_Dtd_URL為公然DTD文件的相對路徑或絕對路徑。
4.5.3 混合DTD
所謂混合DTD,即為內(nèi)部DTD與外部DTD混合使用。在DTD使用的實際情況中, 很少使用完全標準的DTD,常常是公司先為所有的開發(fā)小組提供1分公共的DTD作為外部DTD,然后各個成員在實際的使用進程中再進行擴大定義,這時候的擴大定義常常是使用內(nèi)部DTD來實現(xiàn)的。
【例4.17】 混合DTD的使用,代碼以下所示。

<?xml version="1.0" encoding="gb2312"?> <!DOCTYPE bookinfo SYSTEM "code4_16_2.dtd"[ <!ELEMENT bookinfo (title,author,publish,price)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT price (#PCDATA)> ]> <bookinfo> <title>計算機導(dǎo)論</title> <author>丁躍潮等</author> <publish> <publisher>高等教育出版社</publisher> <ISBN>7-04-014768⑻</ISBN> <pubdate>2004.6</pubdate> </publish> <price>19.7</price> </bookinfo>

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 国产超级av在线 | 久久1区 | 爱爱免费观看视频 | 国产精品99久久久久久宅男 | 国产日韩欧美 | 26uuu色噜噜精品一区二区 | 国产一级片毛片 | 国产伦精品一区 | 国产精品高清在线观看 | 激情欧美一区 | 婷婷激情综合 | 成人一区二区三区 | 91精品国产自产91精品 | av在线资源网 | 亚洲色图 偷拍自拍 | 中文字幕成人网 | 成人免费一区二区三区视频网站 | 成人免费av | 一区二区三区av在线 | 欧美日本国产在线 | 日韩成人在线电影 | 蜜桃视频一区二区三区在线观看 | 成人一区视频 | 久久99深爱久久99精品 | 欧美九九| 精品啪啪 | 欧美精品一级二级三级 | 国产一区二区三区在线免费观看 | 不卡二区| 国产在线视频一区二区 | 精品久久久久久久久久久院品网 | 天堂俺去俺来也www久久婷婷 | 亚洲乱码视频 | 欧美精品一区二区三区四区 | 日韩欧美一区二区三区 | 亚洲精品乱码久久久久久蜜桃动漫 | 国产成人福利 | 91精品成人 | 亚洲黄色片子 | 中文字幕av第一页 | 九九九九九国产 |