Download presentation
Presentation is loading. Please wait.
1
第三章 XML DTD 設計 何謂DTD DTD基本語法 條件段 使用外部DTD
2
何謂DTD DTD(Document Type Definition;文件型別定義)是一種用來定義XML文件規格的語法,其中規範了文件中所有可用的元素、屬性、記法和各種實體,以及其間的相互關係。DTD能讓你的文件格式具有自我描述能利。
3
何謂DTD(續) DTD起源於SGML(1986)
XML起源於SGML,而XML的DTD更可說是直接來自SGML的DTD。由DTD所描述的語標語言,稱為一種application。其中最著名的,算是HTML。
4
何謂DTD(續) 為何需要DTD? 有時光是well-formed並不能確保資訊的正確性。因其內涵可能不正確。這就必須使用DTD加以規範。
5
何謂DTD(續) <library> <book>
<title> title1</title> <title> title2</title> </book>
6
何謂DTD(續) 使用DTD的好處: 提供資料格式一致化描述 驗證資料正確性 資料自動化處理 促進專業分工 提供更好的建構功能
7
DTD的基本語法 文件型別宣告 元素宣告 實體宣告 記法(notation)宣告
8
DTD的基本語法(續) 文件型別宣告(Document Type Declaration) <!DOCTYPE library [ …
]>
9
DTD的基本語法(續) 文件型別宣告的規則 一定要出現在文件實體之前 在一個XML文件中,只可出現一個DTD宣告
10
DTD的基本語法(續) 元素宣告 元素宣告的作用在宣告一個元素的名稱是什麼、可以有哪些子元素、元素的資料型態及組成方式等。同一個元素在DTD中只能定義一次。
11
DTD的基本語法(續) 元素宣告 <!ELEMENT Name contentspec> Contentspec說明: ANY
可包含任意子元素及字元資料 EMPTY 不可包含任何子元素及字元資料 (字元素列) 可包含列示的子元素 (#PCDATA) 內含解析字元資料 混合內容 可同時包含子元素及字元資料
12
DTD的基本語法(續) 元素宣告 使用ANY識別字:代表元表的內容可以是任何型態。可以下面步驟使well-formed的文件一直保特valied 將所有元素宣告成ANY 找出其中一元素,對其作精確的定義 重複步驟二,直到所有元素定義完成。
13
DTD的基本語法(續) 元素宣告 使用empty識別字:代表該元素不能包括任何資料。可以用來定義空元素。例如:
<!ELEMENT COVER EMPTY>
14
DTD的基本語法(續) 元素宣告 定義子元素: 可定義子元素出現順序 可選用元素組成方式 可指定子元素出現次數 (無)
子元素必出現一次,不多不少 ? 可出現一次或不出現 + 可出現一次或一次以上 * 無任何限制
15
DTD的基本語法(續) 元素宣告 定義子元素出現順序:順序字串可使用(,)分格的方式。例如:
<!ELEMENT html (head,body) >
16
DTD的基本語法(續) 元素宣告 選用元素組成方式:選擇性串列使用(|)符號。例如: <!ELEMENT book (cover ,
(author|editor) , publisher) >
17
DTD的基本語法(續) 元素宣告 屬性宣告:是在定義內部所能使用的屬性。
<!ATTLIST Name AttName AttType DefaultDecl > 其中ATTLIST識別字用來指名這個宣告是屬性宣告,其後依序接著該屬性所屬的元素名稱、屬性名稱、資料型態及預設值。
18
DTD的基本語法(續) 屬性資料型態宣告: CDATA、列舉型態、ID、 IDREF、IDREFS、ENTITY、
ENTITIES、NMTOKEN、NMTOKENS等
19
DTD的基本語法(續) 屬性資料型態宣告-CDATA:
PCDATA代表解析過的字元資料,裡面還可以包含標示資料;而CDATA字元資料,而裡面不能再包含標示資料。
20
DTD的基本語法(續) 屬性資料型態宣告-列舉型態:
DTD也支援列舉型態的資料型態宣告。例如HTML中的ALIGN屬性,其值只能是left、right或center其中之一。
21
DTD的基本語法(續) 屬性資料型態宣告-ID: ID可用來作為文件中的元素識別。因此所有ID的屬性值都必須不同。
22
DTD的基本語法(續) 屬性資料型態宣告-ID: 合法的ID屬性宣告文件 <!ATTLIST topic id ID
#REQUIRED >
23
DTD的基本語法(續) 屬性資料型態宣告-IDREF及IDREFS:
IDREF型態的屬性值必須等於文件中某個ID值。如此透過ID及IDREF,就能在XML元素中交互參考。 IDREFS是由多個IDREF屬產值組合而成。其中以空白相隔。
24
DTD的基本語法(續) 屬性資料型態宣告ENTITY及ENTITIES:
ENTITY屬性必須等於某個實體名稱。而ENTITIES則可以包含多個以空白相隔的實體名稱。使用ENTITY及ENTITIES可以參照在DTD中宣告的外部實體。
25
DTD的基本語法(續) 屬性資料型態宣告NMTOKEN及NMTOKENS
NMTOKEN代表Name token,此型態的屬性會與XML標籤名稱的命名規則相同。 使用的時機是,想以不同的名稱來命名同一個XML文件中的某個元素。
26
DTD的基本語法(續) 屬性預設值 直接設定屬產預設值 設定預設關鍵字
27
DTD的基本語法(續) 屬性預設值 <!ATTLIST NAME AttName AttType “value” >
直接設定屬性預設值 <!ATTLIST NAME AttName AttType “value” >
28
DTD的基本語法(續) 屬性預設值 設定預設值關鍵字 #required Implied Fixed “value”
29
DTD的基本語法(續) 實體宣告 實體宣告的分類: 內部實體 外部實體 參數實體
類似程式語言中的巨集功能,能夠讓我們以特定的某個名稱來代表一段資料內容。 實體宣告的分類: 內部實體 外部實體 參數實體
30
DTD的基本語法(續) 實體宣告 - 內部實體 內部實體的名稱所連結的對象是一段文字字串。可以使用&reftext;標示來參引該實體。
<!DOCTYPE hello [ <!ENTITY reftext “hello”> … ] <hello>&reftext;</hello>
31
DTD的基本語法(續) 實體宣告 – 外部實體
外部實體必須在實體宣告中加上SYSTEM識別字,它能讓你將實體名稱與外部的檔案內容連結起來,如此就可讓XML檔案參引到外部的檔案內容。 <!notation jpeg system “Joint Photographic Experts Group”> <!Entity win2000 system “c:\winnt\web\wallpaper\windows 2000.jpg” ndata jpeg>
32
DTD的基本語法(續) 實體宣告 – 參數實體 只能在文件型別宣告中使用,其宣告方式是在實體名稱之前加上%符號。
<!ENTITY & name “last_name,first_name”> <!ENTITY author (%name;)> <!ENTITY editor (%name;)> <!ENTITY interpreter (%name;)>
33
DTD的基本語法(續) 實體宣告 實體的注意事項: 不可形成遞迴 實體宣告需出現在參引實體之前 實體參引需加分號(;)
34
DTD的基本語法(續) Notation宣告
記法宣告可指明外部二進位檔案的資料型態。這個資料會傳遞給應用程式。其真正的用途則有應用程式自行決定。
35
DTD的基本語法(續) Notation宣告 用於指定外部檔案格式
<?NOTATION GIF87A SYSTEM “GIF”> <!NOTATION JPEG SYSTEM “Joint Photographic Experts Group”>
36
條件段 條件段只能使用文件型別宣告的外部子集中,它包含兩種宣告方式,即:IGNORE區段—用來排除一部分的DTD;以及INCLUDE區段—用來包含一部份的DTD。
37
條件段(續) XML 1.0規格書的說明 Conditional sections are another SGML invention that got into XML because the people on the committee who had experience writing DTDs claimed that life would just be impossible without them.
38
條件段(續) 條件段可以形成巢狀結構。例如INCLUDE區段中可以包含進IGNORE區段。
但在IGNORE中的INCLUDE區段還是會被IGNORE,不會包含到文件的最後的DTD宣告中。
39
條件段(續) <!--內部子集中使用實體參引--> <!ENTITY % draft ‘INCLUDE’>
<!ENTITY % final ‘IGNORE’> <!ENTITY % external SYSTEM “e2.dtd”> %external;
40
條件段(續) <!--外部子集中設計條件段--> <![%draft;[
<!ELEMENT book (……)> ]]> <![%final;[ <!ELEMENT book (xxxx)>
41
使用外部DTD 外部子集的宣告 使用公用的DTD 使用外部DTD的注意事項
42
使用外部DTD(續) 使用外部DTD的好處是可以更容易、更有效的被許多XML文件所共用。不僅節省設計文件的時間,也讓DTD的管理集中化,同步化。
43
使用外部DTD(續) 外部子集的宣告 <?xml version = “1.0” standalone = “no”?>
<!DOCTYPE ROOT_ELEMENT SYSTEM “EXTERNAL_DTD”> External_DTD可為: xxx.dtd ../xxx/yyy/zzz.dtd
44
使用外部DTD(續) 使用公用的DTD System關鍵字只用於個人或組織內部的DTD文件分享。如果要引用公認的DTD,就應該使用Public關鍵字來引用DTD 使用Public關鍵字,會有一個用來識別的名稱
45
使用外部DTD(續) 使用公用的DTD <!DOCTYPE ROOT_ELEMENT
PUBLIC “DTD_NAME” URL_OF_EX-DTD”> DTD_NAME的格式一般如下 “-//XML publishing//Library Type//EN”
46
使用外部DTD(續) 在使用Public關鍵字的情況下,“URL_OF_EXTERNAL_DTD”是可有可無的。可以透過URL_OF_EXTERNAL_DTD來找到DTD的定義。
47
使用外部DTD(續) 使用外部DTD的注意事項 一份文件不能有一個以上的<!DOCTYPE>,也只能引用一個外部子集。
利用獨立文件宣告來達到正確合法(valid)的XML文件,所謂的獨立文件宣告就是在XML的宣告處將 standalone的屬性值設為“yes”。
48
使用外部DTD(續) 使用外部DTD的注意事項 有時候變更DTD不見得會相容於以前的XML文件。
Similar presentations