版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
第2章XML數(shù)據(jù)的底層結(jié)構(gòu)—DTD和XMLSchema2.1XML類型定義語言DTD教學內(nèi)容:2.1.1DTD的作用;2.1.2DTD元素;2.1.3DTD屬性;2.1.4DTD中的實體;2.1.5使用DTD.第2章XML數(shù)據(jù)的底層結(jié)構(gòu)—DTD和XMLSchema12.1.1DTD的作用XML文檔是一種元標記語言,即一種定義標記語言的語言。在XML中可以創(chuàng)建新的標記語言,這些新的標記語言(也叫標記集)要通過文檔類型定義(DocumentTypeDefinitions,DTD)來定義。DTD文檔是這些新的標記語言的法律性文檔。如果XML文檔的語法符合DTD的定義和規(guī)定,那么就稱為一個合法的XML文檔,否則就是非法的XML文檔。.2.1.1DTD的作用XML文檔是一種元2DTD定義了文檔的邏輯結(jié)構(gòu),規(guī)定了文檔中所使用的元素、實體、元素的屬性、元素與實體之間的關(guān)系。其作用主要表現(xiàn)在以下幾個方面:使用DTD可以提供一種統(tǒng)一的格式。XML的可擴展性為文檔的作者提供了很高的靈活性,可有時候需要的是統(tǒng)一,要求某一類文檔具有相同的結(jié)構(gòu)。使用DTD可以保證數(shù)據(jù)交流和共享的順利進行。DTD使用戶能夠不依賴具體的數(shù)據(jù)就知道文檔的邏輯結(jié)構(gòu)。在沒有XML文檔的時候,也可以根據(jù)DTD為XML文檔編寫樣式單,編寫處理程序,有效地提高工作效率。使用DTD可以驗證數(shù)據(jù)的有效性。DTD對文檔的邏輯結(jié)構(gòu)進行了約束,這種約束可以比較寬松,也可以十分嚴格??梢愿鶕?jù)DTD檢查數(shù)據(jù),以驗證其是否符合規(guī)定和要求,這可以保證數(shù)據(jù)的正確和有效。(課本p12例2.1).DTD定義了文檔的邏輯結(jié)構(gòu),規(guī)定了文檔中所使用的元素、實體、32.1.2DTD元素
DTD中描述的基本部件是元素和屬性,它們負責確定XML文檔的邏輯結(jié)構(gòu)。元素表示一個信息對象,而屬性表示這個對象的性質(zhì)。所有元素中有且只有一個根元素,其他的元素都是它的子元素,除根元素外,每個元素都被其他元素包含,一個元素可以有幾個不同類型的子元素。.2.1.2DTD元素DTD中描述的基本部件41、元素的基本類型元素的基本類型大致可分為兩種,一種稱為簡單型,另一種稱為復合型。簡單型具有文本數(shù)據(jù),即可析字符數(shù)據(jù),該類型也稱為上下文中的“#PCADTA”;復合型可以包含其他元素和文本數(shù)據(jù)。.1、元素的基本類型元素的基本類型大致可分為5(1)簡單型:
“#PCDATA”(ParsedCharacterData)表示標記的內(nèi)容是可解析文本,所謂的可解析文本就是非標記文本。用“#PCDATA”規(guī)范了的元素不能再包含子元素。例如Howdoyoudo是不包含標記的文本,而Howdoyou<list>do</list>就不是可解析的數(shù)據(jù)類型。另外DTD文檔中不同元素定義的次序沒有先后關(guān)系,但文檔的語法對大小寫敏感?!?PCDATA”的聲明格式:<!ELEMENTElement_Name(#PCDATA)>.(1)簡單型:.6(2)復合型:
復合型元素與簡單型元素相對,復合型元素可包含其他元素。.(2)復合型:復合型元素與簡單型元素相對,72、元素的聲明(1)元素聲明的基本語法元素的聲明格式:<!ELEMENTElement_NameElement_Defination>其中,Element_Name為聲明的元素名稱,Element_Defination為元素內(nèi)容格式的定義。合法的元素聲明語句例:<!ELEMENTbookinfo(title,author,publish,price)><!ELEMENTpublisher(#PCDATA)>.2、元素的聲明(1)元素聲明的基本語法.8(2)空元素的聲明
在第1章中已介紹了空標記的使用方法,那么在DTD中如何對與其對應的空元素進行聲明呢?其聲明格式:<!ELEMENTElement_NameEMPTY>例如下面的語句:<!ELEMENTmessageEMPTY>.(2)空元素的聲明
在第1章中已介紹了9(3)不限定元素內(nèi)容的聲明ANY是DTD中使用很頻繁的一個關(guān)鍵字,特別是對于文檔根元素的聲明。在定義一個DTD文檔時通常很難準確地確定一個元素是否具有子元素的情況,此時一般的做法是指定該元素的子元素為ANY型(表示可以是任意的元素),這樣在它之中可以包含任何數(shù)據(jù)、任何聲明的子元素及其數(shù)據(jù)和子元素的組合。ANY元素的聲明格式:<!ELEMENTElement_NameANY>.(3)不限定元素內(nèi)容的聲明.10(4)子元素列表的設定在XML中有一種針對復合元素的最為嚴格的設定方法,稱為子元素列表的設定。這種方式下,元素都擁有哪些子元素、每個子元素出現(xiàn)的次數(shù)和位置都有明確的規(guī)定,在具體文檔實現(xiàn)時,必須嚴格執(zhí)行。子元素列表的設定語法如下:<!ELEMENTElement_Name(Child_Element1,Child_Element2,…)>其中“(Child_Element1,Child_Element2,…)”部分為Element_Name所擁有的子元素列表。.(4)子元素列表的設定.11(5)可選擇的子元素有些時候,需要在兩個或多個互斥的元素中進行選擇。即多選一的情況,如一個人的性別可以是男或女,兩者中只能有一種情況。DTD有專門的語法來處理這種情況,其語法格式如下:<!ELEMENTElement_Name(Child_Element1|Child_Element2|……)>其中,“(Child_Element1|Child_Element2|…)”部分為選擇性元素組合,具體使用時必須要在這個列表中選擇其一。
(課本p16例2.3).(5)可選擇的子元素.12(6)元素出現(xiàn)次數(shù)的控制一個元素可能出現(xiàn)一次,也可能不出現(xiàn)。這時可通過在元素名后面加上一個“?”來實現(xiàn)?!??”:0或1次一個元素可能不出現(xiàn),也可能出現(xiàn)多次。這時可通過在元素名后面加上一個“*”來實現(xiàn)?!?”:任意次一個元素可能出現(xiàn)一次,也可能出現(xiàn)多次,但至少也要出現(xiàn)一次。這時可通過在元素名后面加上一個“+”來實現(xiàn)?!?”:≥1次(課本p17例2.4).(6)元素出現(xiàn)次數(shù)的控制(課本p17例2.4).13(7)混合型元素
還有另一種元素,其內(nèi)容既可以為字符數(shù)據(jù),也可以為子元素,這種元素稱為混合型元素?;旌闲驮氐穆暶鞲袷剑?/p>
<!ELEMENTElement_Name(#PCDATA|Child_Element1|Child_Element2,…)*>必須采用可選項,以#PCDATA開始,后面是混合內(nèi)容中可能出現(xiàn)的子元素,“*”必須放在右括號之后.(7)混合型元素還有另一種元素,其內(nèi)容既可以為142.1.3DTD屬性
簡單來講就是元素的附加特性,在DTD中聲明元素時,也必須對該元素的屬性進行聲明。
1、屬性的聲明在DTD中,屬性的聲明格式:<!ATTLISTElement_nameAttribute_nameTYPEDefault_value>其中,<!ATTLIST>為屬性聲明的關(guān)鍵字,Element_name為元素名,Attribute_name為屬性名,TYPE是屬性類型,Default_value為沒有設定屬性值時的默認值。.2.1.3DTD屬性簡單來講就是元素的附加特15在聲明屬性時有以下需要注意的事項:(對照課本p18-19例2.5分析)(1)、可以多次為一個元素聲明其中所包含的屬性。(2)、屬性的聲明在文檔中的次序沒有嚴格的要求,可位于與其相連的元素聲明之前或之后。(3)、所有元素的屬性,都要在各自所對應的標記中聲明。
.在聲明屬性時有以下需要注意的事項:(對照課本p18-19例162、屬性的類型
在屬性的聲明中TYPE部分為屬性的類型設定,DTD中屬性的類型有10種,下面將對這些數(shù)據(jù)類型進行逐一的介紹。(課本p20)(1)CDATA型CDATA型表明屬性值為不包含“<”和“"”的任意字符串,如果屬性值中需要包含“<”和“"”,則可使用特殊字符來代替。(2)Enumerated型如果屬性值并不是任意的字符串,而是在幾個可能的值中進行選擇。.2、屬性的類型.17(3)ID型當元素的某個屬性值是不能重復時,如書籍的ISBN屬性、個人的“身份證號”屬性等,要定義這樣的屬性則需使用屬性的ID類型。在一個XML文檔中,所有元素的ID類型屬性的屬性值必須是唯一的,不可重復,另外,一個元素不能有超過一個ID類型的屬性。(4)IDREF與IDREFS型(課本p20例2.6)IDREF為IdentifierReference的縮寫,IDREF與ID類型屬性的關(guān)系為子元素與父元素的關(guān)系,即IDREF類型屬性的值必須是其他元素的ID類型屬性的值,且該ID類型屬性的值必須在文檔的其他地方被設定過。IDREFS類型屬性的屬性值可有多個,每一個都必須是在文檔其他地方被設定了的ID類型屬性的值,而這多個屬性值之間用空格隔開。.(3)ID型.18(5)ENTITY與ENTITIES型ENTITY類型的屬性提供了把外部二進制形式的文件(如.jpeg、.mp3等)和外部不可解析實體鏈接到XML文檔的功能。因此其屬性值也必須為不可解析的鏈接外部實際數(shù)據(jù)的通用實體名。ENTITIES類型屬性的屬性值可由多個不可解析的外部實體名稱組成,各實體名稱之間使用空格隔開。(6)NMTOKEN與NMTOKENS型(課本p22例2.7)NMTOKEN類型的屬性限定屬性值是有效的XML名稱,這個屬性值可以由英文、數(shù)字、“.”、“_”、“-”、“:”等組成,這里有幾點需要注意。a、不能包括空格。b、以上字符中除“:”以外,其他字符都可以作為開頭字符。c、“:”可以出現(xiàn)在中間,但由于它是命名域的關(guān)鍵字符,所以一般不提倡使用。.(5)ENTITY與ENTITIES型.19(7)NOTATION型(課本p23例2.8)XML文檔中引入了外部不可解析的實體后,解析器無法解析這些二進制文件,這時,就可以使用NOTATION類型的屬性為這些二進制文件指定與其對應的應用軟件以對其進行處理。.(7)NOTATION型(課本p23例2.8).203、屬性的默認值屬性有4種不同類型的默認值,可在屬性聲明中的Default_value部分指定。(課本p24)①default:表示使用提供的默認值,default不是一個關(guān)鍵字,它代表一個預設的字符串。<!ATTLISTbookinfobookcategory("文藝"|"自然科學")"文藝">此例句表示當在XML文檔中省略了對bookinfo元素的bookcategory屬性值進行設定時,該屬性的默認值就是“文藝”。②#REQUIRED:表示屬性值必須指定。③#IMPLIED:表示元素的這個屬性可用可不用。④#FIXED:表示元素的這個屬性值是一個固定值,且必須是指定的值。
.3、屬性的默認值屬性有4種不同類型的默認212.1.4DTD中的實體1、實體的概念實體是包含了文檔片段的虛擬存儲單元,可用來存儲XML聲明、DTD、其他形式的文本及二進制數(shù)據(jù)等。簡單來講就是一段代碼或數(shù)據(jù)的代稱,這個代稱即為實體的名字。當需要在文檔中引用某段代碼或數(shù)據(jù)時,可以引用與這段代碼或數(shù)據(jù)相對應的實體名稱來代替實體的具體內(nèi)容。具有正確性檢查功能的XML處理器在提交文檔給最終應用程序之前或在顯示文檔以前,將先把所有不同的實體引用替換為與其對應的具體內(nèi)容,從而構(gòu)成一個結(jié)構(gòu)完整的文檔。.2.1.4DTD中的實體1、實體的概念.222、實體的分類(1)按照實體的具體內(nèi)容來分類,實體可分為可解析與不可解析兩類??山馕鰧嶓w的具體內(nèi)容為簡單的字符、數(shù)字、文本塊,而不可解析實體的具體內(nèi)容則為圖片、聲音等二進制文件。(2)按照邏輯存儲來分類,實體可分為內(nèi)部實體與外部實體兩類。內(nèi)部實體的內(nèi)容是在文檔內(nèi)部設定的;而外部實體則是一個外部獨立的物理存儲對象,如某個外部文件。(3)按照使用的范圍來分類,實體可分為一般實體與參數(shù)實體兩類。一般實體都用來構(gòu)成文檔的具體內(nèi)容,可出現(xiàn)在XML文檔中,也可出現(xiàn)在DTD中;而參數(shù)實體只能出現(xiàn)在DTD中,不能出現(xiàn)在XML文檔中。.2、實體的分類.23(1)、內(nèi)部一般實體
內(nèi)部一般實體就是在文檔實體內(nèi)部定義和使用的實體,其內(nèi)容通常是一段文本字符。這種實體要在DTD中通過DTD語句的定義,可以在XML文檔中使用,也可在DTD中使用。其定義的語法格式如下:
<!ENTITYEentity_name"Replacement">其中,<!ENTITY>為關(guān)鍵字,Eentity_name為實體名稱,Replacement為實體所代替的文本內(nèi)容。引用內(nèi)部一般實體的方法如下:&Eentity_name;課本p29例2.15.(1)、內(nèi)部一般實體課本p29例2.15.24當內(nèi)部一般實體在DTD中引用時,有以下幾方面需注意。①
不能在元素及屬性的聲明中引用內(nèi)部一般實體,如下面的語句即為非法的:<!ENTITYpcd(#PCDATA)><!ELEMENTtitle&pcd;>②
在語句中不能出現(xiàn)循環(huán),如下面的語句即為非法的:<!ENTITYthepub"北大&pub;"><!ENTITYpub"出版社&thepub;">
課本p31例.當內(nèi)部一般實體在DTD中引用時,有以下幾方面需注意。課本p325(2)、外部一般實體所謂外部一般實體就是在文檔實體以外定義的,要通過一個URL才能引用到的實體。外部一般實體為獨立的文件,可被多個文檔所引用。正因為每一個完整的XML文檔都是一個合法的實體,所以XML通過對外部一般實體的引用,可以在一個XML文檔中嵌入另一個XML文檔,或者將多個文檔組合成一個文檔。其定義的語法格式如下:<!ENTITYEentity_name"URL">其中,URL為引用的外部實體的URL地址。引用外部一般實體也與引用內(nèi)部一般實體的方法一樣:&Eentity_name;課本p32例2.17.(2)、外部一般實體課本p32例2.17.26在引用外部一般實體時,有以下幾方面需注意。(1)因為在一個文檔中需引用某些外部文件,所以該文檔聲明中的standalone屬性不再是默認值yes,而應該為no。(2)作為外部一般實體的文檔,若使用的是XML的默認字符集即UTF-8或UNICODE,則可以在文檔頭部不進行XML聲明,否則,必須有XML聲明,且聲明時,一定要說明encoding屬性。.在引用外部一般實體時,有以下幾方面需注意。.27(3)、內(nèi)部參數(shù)實體
內(nèi)部參數(shù)實體是指在獨立的外部DTD文檔的內(nèi)部定義和使用的實體,其內(nèi)容為僅能為DTD而非XML文檔內(nèi)容的書寫文本。這里提到參數(shù)實體與前面所講的一般實體是有區(qū)別的:(1)在引用形式上,一般實體的引用為“&Eentity_name;”,而參數(shù)實體的引用則為“%Eentity_name;”(2)在引用范圍上,一般實體可在XML文檔中引用,也可在DTD中引用,而參數(shù)實體只可在DTD中引用。定義內(nèi)部參數(shù)實體的語法格式如下:<!ENTITY%Eentity_name"Replacement">.(3)、內(nèi)部參數(shù)實體.28(4)、外部參數(shù)實體
外部參數(shù)實體是指在獨立的外部DTD文檔的外部定義和使用的實體,外部參數(shù)實體用于將多個獨立的DTD文檔組合成一個大的DTD文檔。定義外部參數(shù)實體的語法格式如下:<!ENTITY%Eentity_name"URL">.(4)、外部參數(shù)實體.292.1.5使用DTD引用DTD的方法有兩種:內(nèi)部DTD引用與外部DTD引用。
內(nèi)部DTD引用即在XML文檔中直接設定DTD;外部DTD引用則是在XML文檔中引用一個擴展名為.dtd的獨立文件。.2.1.5使用DTD引用DTD的方法有兩種:.301、內(nèi)部DTD
內(nèi)部DTD的定義語句和XML文檔在同一個文檔中,且通常放置在XML文檔的頭部。在定義內(nèi)部DTD時,定義內(nèi)部DTD的語句要全部放置在文檔類型聲明中,其語法格式:<!DOCTYPERoot_Element_Name[…]>其中,<!DOCTYPE>為關(guān)鍵字,Root_Element_Name為根元素名,[…]部分則為內(nèi)部DTD定義語句。.1、內(nèi)部DTD.312、外部DTD
外部DTD就是有關(guān)文檔定義的語句都被獨立出來放在一個外部文件中,對其進行獨立的管理。跟據(jù)其內(nèi)容的性質(zhì),可分為兩種,一種是私有文件,指未公開的、屬于某組織或個人私有的DTD文件;另一種是公開文件,是指由國際標準組織如ISO等或可發(fā)布技術(shù)建議的組織如W3C等,為某一領域所制定的公開的標準DTD。引用私有DTD文件的語法格式:<!DOCTYPERoot_Element_nameSYSTEM"URL">其中,URL為外部DTD文件的相對路徑或絕對路徑,該語句必須置于XML文檔的頭部,且在XML文檔處理指令中要將standalone屬性值設定為no。.2、外部DTD.323、混合DTD
所謂混合DTD,即為內(nèi)部DTD與外部DTD混合使用。在DTD使用的實際情況中,很少使用完全標準的DTD,往往是公司先為所有的開發(fā)小組提供一分公共的DTD作為外部DTD,然后各個成員在實際的使用過程中再進行擴展定義,這時的擴展定義常常是使用內(nèi)部DTD來實現(xiàn)的。.3、混合DTD.33..342.2XML模式Schema2.2.1Schema與DTD的區(qū)別和優(yōu)勢模式(Schema)所起的作用與DTD相同,也是由W3C開發(fā)的。與DTD相比,XML模式具有如下的幾個優(yōu)點:DTD是用一種與XML不同的語法編寫的,而XML模式使用的是一種類XML的語言。DTD中的所有聲明都是全局聲明,而XML模式則既有全局聲明也有局部聲明,可以視情況而定。DTD不能對一給定的元素或?qū)傩缘臄?shù)據(jù)類型進行定義,而XML模式具有一套完整的數(shù)據(jù)類型系統(tǒng),它允許對數(shù)據(jù)類型如整型,時間型或字符串型等進行詳細定義。.2.2XML模式Schema2.2.1Schema與DT352.2.2局部和全局定義在DTD中,每個元素都被聲明為全局的,所以每個元素必須有一個唯一的名字并且只能聲明一次。元素可被多個其他元素所引用,但在這些情況下,它們的定義必須完全相同。然而在XML模式中,上下文是非常重要的。在模式的頂層聲明的元素被認為是全局聲明。在定義一個復雜類型時,可以參考和使用這些全局定義的元素作為該類型的一個子部分,也可以同時定義一些新的局部元素,但作用域被限制在該復雜類型之內(nèi)。.2.2.2局部和全局定義.362.2.3Schema的基本結(jié)構(gòu)和使用<?xmlversion="1.0"?><xsd:schemaxmlns:xsd="/2000/10/XMLSchema"><xsd:annotation><xsd:documentation>Thisismyveryfirstschema.Itdoesnothaveanyelementsyet,butitwill.</xsd:documentation></xsd:annotation></xsd:schema>.2.2.3Schema的基本結(jié)構(gòu)和使用<?xmlve372.2.4簡單類型簡單類型的定義簡單類型的種類(見下圖).2.2.4簡單類型簡單類型的定義.38..39自定義的簡單類型有時可以對各種簡單類型進行適當?shù)男薷囊愿玫貪M足需要,形成自定義的簡單類型。定義過程分為兩個步驟:選擇一個合適的簡單類型作為基類型對此基類型添加一些限制條件,例如:指定其值的一個有限的范圍,指定其值的一個確定的集合,或者指定值的格式等。.自定義的簡單類型.40對元素自定義格式數(shù)值的嵌入和范圍的設定枚舉類型的定義列表類型的定義限制簡單類型的長度在模式中設定XML元素的值
2.2.5復雜類型復雜類型概述XML中有四種復雜類型的元素:第一種類型是“只含元素”類型,它只能含有子元素或?qū)傩?,而不能含有文本。第二種類型是“只含文本”類型,它只能含有文本和屬性,而不能含有子元素。.對元素自定義格式.41第三種類型是“空元素”類型,它可以有屬性,但不能含有子元素或文本。第四種類型是“混合內(nèi)容”類型,它可以包含元素,屬性和文本的組合?!爸缓亍钡脑囟x一個復雜的“只含元素”的元素是由一系列的簡單和/或其他復雜的元素構(gòu)成?!爸缓谋尽钡脑囟x
該類型有點類似于一個只含文本的簡單類型,但不同的是它也可以有屬性。.第三種類型是“空元素”類型,它可以有屬性,但不能含有子42
空元素的定義空元素不包含任何內(nèi)容,但可以有屬性?;旌蟽?nèi)容的元素定義XML模式中允許一個字段既包含文本有包含其他子字段的混合內(nèi)容元素。復雜類型的元素定義組的定義有時一組元素會在模式的多個地方出現(xiàn)。如果能給一元素賦予一個名稱,然后在需要時通過調(diào)用組名來引用這組元素,這是很方便的。屬性定義一個案例.空元素的定義.43
謝謝!.謝謝!.44第2章XML數(shù)據(jù)的底層結(jié)構(gòu)—DTD和XMLSchema2.1XML類型定義語言DTD教學內(nèi)容:2.1.1DTD的作用;2.1.2DTD元素;2.1.3DTD屬性;2.1.4DTD中的實體;2.1.5使用DTD.第2章XML數(shù)據(jù)的底層結(jié)構(gòu)—DTD和XMLSchema452.1.1DTD的作用XML文檔是一種元標記語言,即一種定義標記語言的語言。在XML中可以創(chuàng)建新的標記語言,這些新的標記語言(也叫標記集)要通過文檔類型定義(DocumentTypeDefinitions,DTD)來定義。DTD文檔是這些新的標記語言的法律性文檔。如果XML文檔的語法符合DTD的定義和規(guī)定,那么就稱為一個合法的XML文檔,否則就是非法的XML文檔。.2.1.1DTD的作用XML文檔是一種元46DTD定義了文檔的邏輯結(jié)構(gòu),規(guī)定了文檔中所使用的元素、實體、元素的屬性、元素與實體之間的關(guān)系。其作用主要表現(xiàn)在以下幾個方面:使用DTD可以提供一種統(tǒng)一的格式。XML的可擴展性為文檔的作者提供了很高的靈活性,可有時候需要的是統(tǒng)一,要求某一類文檔具有相同的結(jié)構(gòu)。使用DTD可以保證數(shù)據(jù)交流和共享的順利進行。DTD使用戶能夠不依賴具體的數(shù)據(jù)就知道文檔的邏輯結(jié)構(gòu)。在沒有XML文檔的時候,也可以根據(jù)DTD為XML文檔編寫樣式單,編寫處理程序,有效地提高工作效率。使用DTD可以驗證數(shù)據(jù)的有效性。DTD對文檔的邏輯結(jié)構(gòu)進行了約束,這種約束可以比較寬松,也可以十分嚴格??梢愿鶕?jù)DTD檢查數(shù)據(jù),以驗證其是否符合規(guī)定和要求,這可以保證數(shù)據(jù)的正確和有效。(課本p12例2.1).DTD定義了文檔的邏輯結(jié)構(gòu),規(guī)定了文檔中所使用的元素、實體、472.1.2DTD元素
DTD中描述的基本部件是元素和屬性,它們負責確定XML文檔的邏輯結(jié)構(gòu)。元素表示一個信息對象,而屬性表示這個對象的性質(zhì)。所有元素中有且只有一個根元素,其他的元素都是它的子元素,除根元素外,每個元素都被其他元素包含,一個元素可以有幾個不同類型的子元素。.2.1.2DTD元素DTD中描述的基本部件481、元素的基本類型元素的基本類型大致可分為兩種,一種稱為簡單型,另一種稱為復合型。簡單型具有文本數(shù)據(jù),即可析字符數(shù)據(jù),該類型也稱為上下文中的“#PCADTA”;復合型可以包含其他元素和文本數(shù)據(jù)。.1、元素的基本類型元素的基本類型大致可分為49(1)簡單型:
“#PCDATA”(ParsedCharacterData)表示標記的內(nèi)容是可解析文本,所謂的可解析文本就是非標記文本。用“#PCDATA”規(guī)范了的元素不能再包含子元素。例如Howdoyoudo是不包含標記的文本,而Howdoyou<list>do</list>就不是可解析的數(shù)據(jù)類型。另外DTD文檔中不同元素定義的次序沒有先后關(guān)系,但文檔的語法對大小寫敏感。“#PCDATA”的聲明格式:<!ELEMENTElement_Name(#PCDATA)>.(1)簡單型:.50(2)復合型:
復合型元素與簡單型元素相對,復合型元素可包含其他元素。.(2)復合型:復合型元素與簡單型元素相對,512、元素的聲明(1)元素聲明的基本語法元素的聲明格式:<!ELEMENTElement_NameElement_Defination>其中,Element_Name為聲明的元素名稱,Element_Defination為元素內(nèi)容格式的定義。合法的元素聲明語句例:<!ELEMENTbookinfo(title,author,publish,price)><!ELEMENTpublisher(#PCDATA)>.2、元素的聲明(1)元素聲明的基本語法.52(2)空元素的聲明
在第1章中已介紹了空標記的使用方法,那么在DTD中如何對與其對應的空元素進行聲明呢?其聲明格式:<!ELEMENTElement_NameEMPTY>例如下面的語句:<!ELEMENTmessageEMPTY>.(2)空元素的聲明
在第1章中已介紹了53(3)不限定元素內(nèi)容的聲明ANY是DTD中使用很頻繁的一個關(guān)鍵字,特別是對于文檔根元素的聲明。在定義一個DTD文檔時通常很難準確地確定一個元素是否具有子元素的情況,此時一般的做法是指定該元素的子元素為ANY型(表示可以是任意的元素),這樣在它之中可以包含任何數(shù)據(jù)、任何聲明的子元素及其數(shù)據(jù)和子元素的組合。ANY元素的聲明格式:<!ELEMENTElement_NameANY>.(3)不限定元素內(nèi)容的聲明.54(4)子元素列表的設定在XML中有一種針對復合元素的最為嚴格的設定方法,稱為子元素列表的設定。這種方式下,元素都擁有哪些子元素、每個子元素出現(xiàn)的次數(shù)和位置都有明確的規(guī)定,在具體文檔實現(xiàn)時,必須嚴格執(zhí)行。子元素列表的設定語法如下:<!ELEMENTElement_Name(Child_Element1,Child_Element2,…)>其中“(Child_Element1,Child_Element2,…)”部分為Element_Name所擁有的子元素列表。.(4)子元素列表的設定.55(5)可選擇的子元素有些時候,需要在兩個或多個互斥的元素中進行選擇。即多選一的情況,如一個人的性別可以是男或女,兩者中只能有一種情況。DTD有專門的語法來處理這種情況,其語法格式如下:<!ELEMENTElement_Name(Child_Element1|Child_Element2|……)>其中,“(Child_Element1|Child_Element2|…)”部分為選擇性元素組合,具體使用時必須要在這個列表中選擇其一。
(課本p16例2.3).(5)可選擇的子元素.56(6)元素出現(xiàn)次數(shù)的控制一個元素可能出現(xiàn)一次,也可能不出現(xiàn)。這時可通過在元素名后面加上一個“?”來實現(xiàn)。“?”:0或1次一個元素可能不出現(xiàn),也可能出現(xiàn)多次。這時可通過在元素名后面加上一個“*”來實現(xiàn)?!?”:任意次一個元素可能出現(xiàn)一次,也可能出現(xiàn)多次,但至少也要出現(xiàn)一次。這時可通過在元素名后面加上一個“+”來實現(xiàn)?!?”:≥1次(課本p17例2.4).(6)元素出現(xiàn)次數(shù)的控制(課本p17例2.4).57(7)混合型元素
還有另一種元素,其內(nèi)容既可以為字符數(shù)據(jù),也可以為子元素,這種元素稱為混合型元素?;旌闲驮氐穆暶鞲袷剑?/p>
<!ELEMENTElement_Name(#PCDATA|Child_Element1|Child_Element2,…)*>必須采用可選項,以#PCDATA開始,后面是混合內(nèi)容中可能出現(xiàn)的子元素,“*”必須放在右括號之后.(7)混合型元素還有另一種元素,其內(nèi)容既可以為582.1.3DTD屬性
簡單來講就是元素的附加特性,在DTD中聲明元素時,也必須對該元素的屬性進行聲明。
1、屬性的聲明在DTD中,屬性的聲明格式:<!ATTLISTElement_nameAttribute_nameTYPEDefault_value>其中,<!ATTLIST>為屬性聲明的關(guān)鍵字,Element_name為元素名,Attribute_name為屬性名,TYPE是屬性類型,Default_value為沒有設定屬性值時的默認值。.2.1.3DTD屬性簡單來講就是元素的附加特59在聲明屬性時有以下需要注意的事項:(對照課本p18-19例2.5分析)(1)、可以多次為一個元素聲明其中所包含的屬性。(2)、屬性的聲明在文檔中的次序沒有嚴格的要求,可位于與其相連的元素聲明之前或之后。(3)、所有元素的屬性,都要在各自所對應的標記中聲明。
.在聲明屬性時有以下需要注意的事項:(對照課本p18-19例602、屬性的類型
在屬性的聲明中TYPE部分為屬性的類型設定,DTD中屬性的類型有10種,下面將對這些數(shù)據(jù)類型進行逐一的介紹。(課本p20)(1)CDATA型CDATA型表明屬性值為不包含“<”和“"”的任意字符串,如果屬性值中需要包含“<”和“"”,則可使用特殊字符來代替。(2)Enumerated型如果屬性值并不是任意的字符串,而是在幾個可能的值中進行選擇。.2、屬性的類型.61(3)ID型當元素的某個屬性值是不能重復時,如書籍的ISBN屬性、個人的“身份證號”屬性等,要定義這樣的屬性則需使用屬性的ID類型。在一個XML文檔中,所有元素的ID類型屬性的屬性值必須是唯一的,不可重復,另外,一個元素不能有超過一個ID類型的屬性。(4)IDREF與IDREFS型(課本p20例2.6)IDREF為IdentifierReference的縮寫,IDREF與ID類型屬性的關(guān)系為子元素與父元素的關(guān)系,即IDREF類型屬性的值必須是其他元素的ID類型屬性的值,且該ID類型屬性的值必須在文檔的其他地方被設定過。IDREFS類型屬性的屬性值可有多個,每一個都必須是在文檔其他地方被設定了的ID類型屬性的值,而這多個屬性值之間用空格隔開。.(3)ID型.62(5)ENTITY與ENTITIES型ENTITY類型的屬性提供了把外部二進制形式的文件(如.jpeg、.mp3等)和外部不可解析實體鏈接到XML文檔的功能。因此其屬性值也必須為不可解析的鏈接外部實際數(shù)據(jù)的通用實體名。ENTITIES類型屬性的屬性值可由多個不可解析的外部實體名稱組成,各實體名稱之間使用空格隔開。(6)NMTOKEN與NMTOKENS型(課本p22例2.7)NMTOKEN類型的屬性限定屬性值是有效的XML名稱,這個屬性值可以由英文、數(shù)字、“.”、“_”、“-”、“:”等組成,這里有幾點需要注意。a、不能包括空格。b、以上字符中除“:”以外,其他字符都可以作為開頭字符。c、“:”可以出現(xiàn)在中間,但由于它是命名域的關(guān)鍵字符,所以一般不提倡使用。.(5)ENTITY與ENTITIES型.63(7)NOTATION型(課本p23例2.8)XML文檔中引入了外部不可解析的實體后,解析器無法解析這些二進制文件,這時,就可以使用NOTATION類型的屬性為這些二進制文件指定與其對應的應用軟件以對其進行處理。.(7)NOTATION型(課本p23例2.8).643、屬性的默認值屬性有4種不同類型的默認值,可在屬性聲明中的Default_value部分指定。(課本p24)①default:表示使用提供的默認值,default不是一個關(guān)鍵字,它代表一個預設的字符串。<!ATTLISTbookinfobookcategory("文藝"|"自然科學")"文藝">此例句表示當在XML文檔中省略了對bookinfo元素的bookcategory屬性值進行設定時,該屬性的默認值就是“文藝”。②#REQUIRED:表示屬性值必須指定。③#IMPLIED:表示元素的這個屬性可用可不用。④#FIXED:表示元素的這個屬性值是一個固定值,且必須是指定的值。
.3、屬性的默認值屬性有4種不同類型的默認652.1.4DTD中的實體1、實體的概念實體是包含了文檔片段的虛擬存儲單元,可用來存儲XML聲明、DTD、其他形式的文本及二進制數(shù)據(jù)等。簡單來講就是一段代碼或數(shù)據(jù)的代稱,這個代稱即為實體的名字。當需要在文檔中引用某段代碼或數(shù)據(jù)時,可以引用與這段代碼或數(shù)據(jù)相對應的實體名稱來代替實體的具體內(nèi)容。具有正確性檢查功能的XML處理器在提交文檔給最終應用程序之前或在顯示文檔以前,將先把所有不同的實體引用替換為與其對應的具體內(nèi)容,從而構(gòu)成一個結(jié)構(gòu)完整的文檔。.2.1.4DTD中的實體1、實體的概念.662、實體的分類(1)按照實體的具體內(nèi)容來分類,實體可分為可解析與不可解析兩類??山馕鰧嶓w的具體內(nèi)容為簡單的字符、數(shù)字、文本塊,而不可解析實體的具體內(nèi)容則為圖片、聲音等二進制文件。(2)按照邏輯存儲來分類,實體可分為內(nèi)部實體與外部實體兩類。內(nèi)部實體的內(nèi)容是在文檔內(nèi)部設定的;而外部實體則是一個外部獨立的物理存儲對象,如某個外部文件。(3)按照使用的范圍來分類,實體可分為一般實體與參數(shù)實體兩類。一般實體都用來構(gòu)成文檔的具體內(nèi)容,可出現(xiàn)在XML文檔中,也可出現(xiàn)在DTD中;而參數(shù)實體只能出現(xiàn)在DTD中,不能出現(xiàn)在XML文檔中。.2、實體的分類.67(1)、內(nèi)部一般實體
內(nèi)部一般實體就是在文檔實體內(nèi)部定義和使用的實體,其內(nèi)容通常是一段文本字符。這種實體要在DTD中通過DTD語句的定義,可以在XML文檔中使用,也可在DTD中使用。其定義的語法格式如下:
<!ENTITYEentity_name"Replacement">其中,<!ENTITY>為關(guān)鍵字,Eentity_name為實體名稱,Replacement為實體所代替的文本內(nèi)容。引用內(nèi)部一般實體的方法如下:&Eentity_name;課本p29例2.15.(1)、內(nèi)部一般實體課本p29例2.15.68當內(nèi)部一般實體在DTD中引用時,有以下幾方面需注意。①
不能在元素及屬性的聲明中引用內(nèi)部一般實體,如下面的語句即為非法的:<!ENTITYpcd(#PCDATA)><!ELEMENTtitle&pcd;>②
在語句中不能出現(xiàn)循環(huán),如下面的語句即為非法的:<!ENTITYthepub"北大&pub;"><!ENTITYpub"出版社&thepub;">
課本p31例.當內(nèi)部一般實體在DTD中引用時,有以下幾方面需注意。課本p369(2)、外部一般實體所謂外部一般實體就是在文檔實體以外定義的,要通過一個URL才能引用到的實體。外部一般實體為獨立的文件,可被多個文檔所引用。正因為每一個完整的XML文檔都是一個合法的實體,所以XML通過對外部一般實體的引用,可以在一個XML文檔中嵌入另一個XML文檔,或者將多個文檔組合成一個文檔。其定義的語法格式如下:<!ENTITYEentity_name"URL">其中,URL為引用的外部實體的URL地址。引用外部一般實體也與引用內(nèi)部一般實體的方法一樣:&Eentity_name;課本p32例2.17.(2)、外部一般實體課本p32例2.17.70在引用外部一般實體時,有以下幾方面需注意。(1)因為在一個文檔中需引用某些外部文件,所以該文檔聲明中的standalone屬性不再是默認值yes,而應該為no。(2)作為外部一般實體的文檔,若使用的是XML的默認字符集即UTF-8或UNICODE,則可以在文檔頭部不進行XML聲明,否則,必須有XML聲明,且聲明時,一定要說明encoding屬性。.在引用外部一般實體時,有以下幾方面需注意。.71(3)、內(nèi)部參數(shù)實體
內(nèi)部參數(shù)實體是指在獨立的外部DTD文檔的內(nèi)部定義和使用的實體,其內(nèi)容為僅能為DTD而非XML文檔內(nèi)容的書寫文本。這里提到參數(shù)實體與前面所講的一般實體是有區(qū)別的:(1)在引用形式上,一般實體的引用為“&Eentity_name;”,而參數(shù)實體的引用則為“%Eentity_name;”(2)在引用范圍上,一般實體可在XML文檔中引用,也可在DTD中引用,而參數(shù)實體只可在DTD中引用。定義內(nèi)部參數(shù)實體的語法格式如下:<!ENTITY%Eentity_name"Replacement">.(3)、內(nèi)部參數(shù)實體.72(4)、外部參數(shù)實體
外部參數(shù)實體是指在獨立的外部DTD文檔的外部定義和使用的實體,外部參數(shù)實體用于將多個獨立的DTD文檔組合成一個大的DTD文檔。定義外部參數(shù)實體的語法格式如下:<!ENTITY%Eentity_name"URL">.(4)、外部參數(shù)實體.732.1.5使用DTD引用DTD的方法有兩種:內(nèi)部DTD引用與外部DTD引用。
內(nèi)部DTD引用即在XML文檔中直接設定DTD;外部DTD引用則是在XML文檔中引用一個擴展名為.dtd的獨立文件。.2.1.5使用DTD引用DTD的方法有兩種:.741、內(nèi)部DTD
內(nèi)部DTD的定義語句和XML文檔在同一個文檔中,且通常放置在XML文檔的頭部。在定義內(nèi)部DTD時,定義內(nèi)部DTD的語句要全部放置在文檔類型聲明中,其語法格式:<!DOCTYPERoot_Element_Name[…]>其中,<!DOCTYPE>為關(guān)鍵字,Root_Element_Name為根元素名,[…]部分則為內(nèi)部DTD定義語句。.1、內(nèi)部DTD.752、外部DTD
外部DTD就是有關(guān)文檔定義的語句都被獨立出來放在一個外部文件中,對其進行獨立的管理。跟據(jù)其內(nèi)容的性質(zhì),可分為兩種,一種是私有文件,指未公開的、屬于某組織或個人私有的DTD文件;另一種是公開文件,是指由國際標準組織如ISO等或可發(fā)布技術(shù)建議的組織如W3C等,為某一領域所制定的公開的標準DTD。引用私有DTD文件的語法格式:<!DOCTYPERoot_Element_nameS
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專職司機2024勞動協(xié)議模板版
- 2025年廠區(qū)物業(yè)服務與設施更新改造合同4篇
- 2025年茶葉原料供應長期合作協(xié)議4篇
- 專業(yè)2024年注塑車間承包合同2篇
- 2025年度智能交通信號控制系統(tǒng)合同4篇
- 二零二五年度廠房租賃及環(huán)保設施升級合同3篇
- 2024鐵路危險品運輸協(xié)議模板版
- 專項采購附加合同(2024修訂版)版B版
- 二零二四塔吊操作人員勞務承包高空作業(yè)服務協(xié)議3篇
- 二零二五年度新型環(huán)保材料研發(fā)與市場拓展合同3篇
- 工程項目采購與供應鏈管理研究
- 2024年吉林高考語文試題及答案 (2) - 副本
- 拆除電纜線施工方案
- 搭竹架合同范本
- Neo4j介紹及實現(xiàn)原理
- 焊接材料-DIN-8555-標準
- 工程索賠真實案例范本
- 重癥醫(yī)學科運用PDCA循環(huán)降低ICU失禁性皮炎發(fā)生率品管圈QCC持續(xù)質(zhì)量改進成果匯報
- 個人股權(quán)證明書
- 醫(yī)院運送工作介紹
- 重癥患者的容量管理
評論
0/150
提交評論