第三章 xml dtd 設計

48
第第第 XML DTD 第第 • 第第 DTD • DTD 第第第第 • 第第第 • 第第第第 DTD

Upload: ghada

Post on 04-Feb-2016

116 views

Category:

Documents


0 download

DESCRIPTION

第三章 XML DTD 設計. 何謂 DTD DTD 基本語法 條件段 使用外部 DTD. 何謂 DTD. DTD(Document Type Definition; 文件型別定義 ) 是一種用來定義 XML 文件規格的語法,其中規範了文件中所有可用的元素、屬性、記法和各種實體,以及其間的相互關係。 DTD 能讓你的文件格式具有自我描述能利。. 何謂 DTD( 續 ). DTD 起源於 SGML(1986) - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第三章  XML DTD  設計

第三章 XML DTD 設計

•何謂 DTD• DTD 基本語法•條件段•使用外部 DTD

Page 2: 第三章  XML DTD  設計

何謂 DTD• DTD(Document Type Definition; 文件型

別定義 )是一種用來定義 XML 文件規格的語法,其中規範了文件中所有可用的元素、屬性、記法和各種實體,以及其間的相互關係。 DTD 能讓你的文件格式具有自我描述能利。

Page 3: 第三章  XML DTD  設計

何謂 DTD( 續 )• DTD 起源於 SGML(1986)

– XML 起源於 SGML ,而 XML 的 DTD 更可說是直接來自 SGML 的 DTD 。由 DTD 所描述的語標語言,稱為一種 application 。其中最著名的,算是HTML 。

Page 4: 第三章  XML DTD  設計

何謂 DTD( 續 )• 為何需要 DTD ?

– 有時光是 well-formed 並不能確保資訊的正確性。因其內涵可能不正確。這就必須使用 DTD 加以規範。

– 下例為 well-formed 可能造成的錯誤:

Page 5: 第三章  XML DTD  設計

何謂 DTD( 續 )<library>

<book><title> title1</title><title> title2</title>

</book><library>

Page 6: 第三章  XML DTD  設計

何謂 DTD( 續 )• 使用 DTD 的好處:1. 提供資料格式一致化描述2. 驗證資料正確性3. 資料自動化處理4. 促進專業分工5. 提供更好的建構功能

Page 7: 第三章  XML DTD  設計

DTD 的基本語法• 文件型別宣告• 元素宣告• 實體宣告• 記法 (notation) 宣告

Page 8: 第三章  XML DTD  設計

DTD 的基本語法 (續 )

• 文件型別宣告 (Document Type Declaration)

<!DOCTYPE library [ … …]>

Page 9: 第三章  XML DTD  設計

DTD 的基本語法 (續 )

• 文件型別宣告的規則1. 一定要出現在文件實體之前2. 在一個 XML 文件中,只可出現一個 DTD

宣告3. XML 中所有元素都需在 DTD 中定義4. DTD 註解方式和 XML 其他地方相同5. DTD 可內部宣告,亦可外部宣告

Page 10: 第三章  XML DTD  設計

DTD 的基本語法 (續 )

• 元素宣告– 元素宣告的作用在宣告一個元素的名

稱是什麼、可以有哪些子元素、元素的資料型態及組成方式等。同一個元素在 DTD 中只能定義一次。

Page 11: 第三章  XML DTD  設計

DTD 的基本語法 (續 )• 元素宣告<!ELEMENT Name contentspec>Contentspec 說明:

ANY 可包含任意子元素及字元資料EMPTY 不可包含任何子元素及字元資料(字元素列 )

可包含列示的子元素

(#PCDATA) 內含解析字元資料混合內容 可同時包含子元素及字元資料

Page 12: 第三章  XML DTD  設計

DTD 的基本語法 (續 )

• 元素宣告– 使用 ANY 識別字:代表元表的內容可以是

任何型態。可以下面步驟使 well-formed的文件一直保特 valied1.將所有元素宣告成 ANY2.找出其中一元素,對其作精確的定義3.重複步驟二,直到所有元素定義完成。

Page 13: 第三章  XML DTD  設計

DTD 的基本語法 (續 )• 元素宣告

– 使用 empty 識別字:代表該元素不能包括任何資料。可以用來定義空元素。例如:

– <!ELEMENT COVER EMPTY>

Page 14: 第三章  XML DTD  設計

DTD 的基本語法 (續 )• 元素宣告定義子元素:1. 可定義子元素出現順序2. 可選用元素組成方式3. 可指定子元素出現次數

( 無)

子元素必出現一次,不多不少

? 可出現一次或不出現+ 可出現一次或一次以上* 無任何限制

Page 15: 第三章  XML DTD  設計

DTD 的基本語法 (續 )

• 元素宣告定義子元素出現順序:順序字串可使用(,) 分格的方式。例如:<!ELEMENT html (head,body) >

Page 16: 第三章  XML DTD  設計

DTD 的基本語法 (續 )

• 元素宣告選用元素組成方式:選擇性串列使用(|)符號。例如:<!ELEMENT book

(cover ,(author|editor) , publisher)

>

Page 17: 第三章  XML DTD  設計

DTD 的基本語法 (續 )

• 元素宣告屬性宣告:是在定義內部所能使用的屬性。<!ATTLIST

Name AttName AttType DefaultDecl

>• 其中 ATTLIST 識別字用來指名這個宣告是屬

性宣告,其後依序接著該屬性所屬的元素名稱、屬性名稱、資料型態及預設值。

Page 18: 第三章  XML DTD  設計

DTD 的基本語法 (續 )

• 屬性資料型態宣告:CDATA 、列舉型態、 ID 、IDREF、 IDREFS 、 ENTITY 、ENTITIES 、 NMTOKEN 、 NMTOKENS

Page 19: 第三章  XML DTD  設計

DTD 的基本語法 (續 )

• 屬性資料型態宣告 -CDATA :– CDATA 可讓使用者定義字元資料的屬

性,任何字元都可以。如果要在字元。資料屬性中使用 &和 <符號,還是必須用實體參引。

– PCDATA 代表解析過的字元資料,裡面還可以包含標示資料;而 CDATA 字元資料,而裡面不能再包含標示資料。

Page 20: 第三章  XML DTD  設計

DTD 的基本語法 (續 )

• 屬性資料型態宣告 -列舉型態:– DTD也支援列舉型態的資料型態宣告。

例如 HTML 中的 ALIGN 屬性,其值只能是 left 、 right 或 center 其中之一。

Page 21: 第三章  XML DTD  設計

DTD 的基本語法 (續 )

• 屬性資料型態宣告 -ID :– ID 可用來作為文件中的元素識別。

因此所有 ID 的屬性值都必須不同。– 在一個元素內只能設定一個 ID 屬性

型態。

Page 22: 第三章  XML DTD  設計

DTD 的基本語法 (續 )

• 屬性資料型態宣告 -ID :– 合法的 ID 屬性宣告文件

<!ATTLIST topicidID#REQUIRED

>

Page 23: 第三章  XML DTD  設計

DTD 的基本語法 (續 )

• 屬性資料型態宣告 -IDREF及 IDREFS :– IDREF型態的屬性值必須等於文件中

某個 ID值。如此透過 ID 及 IDREF,就能在 XML 元素中交互參考。

– IDREFS 是由多個 IDREF屬產值組合而成。其中以空白相隔。

Page 24: 第三章  XML DTD  設計

DTD 的基本語法 (續 )

• 屬性資料型態宣告 ENTITY 及 ENTITIES :– ENTITY 屬性必須等於某個實體名稱。

而 ENTITIES 則可以包含多個以空白相隔的實體名稱。使用 ENTITY 及 ENTITIES 可以參照在 DTD 中宣告的外部實體。

Page 25: 第三章  XML DTD  設計

DTD 的基本語法 (續 )

• 屬性資料型態宣告 NMTOKEN 及 NMTOKENS– NMTOKEN 代表 Name token ,此型態

的屬性會與 XML 標籤名稱的命名規則相同。

– 使用的時機是,想以不同的名稱來命名同一個 XML 文件中的某個元素。

Page 26: 第三章  XML DTD  設計

DTD 的基本語法 (續 )

• 屬性預設值1.直接設定屬產預設值2.設定預設關鍵字

Page 27: 第三章  XML DTD  設計

DTD 的基本語法 (續 )

• 屬性預設值 直接設定屬性預設值

<!ATTLIST NAMEAttNameAttType“value”

>

Page 28: 第三章  XML DTD  設計

DTD 的基本語法 (續 )

• 屬性預設值 設定預設值關鍵字1. #required2. Implied3. Fixed “value”

Page 29: 第三章  XML DTD  設計

DTD 的基本語法 (續 )

• 實體宣告– 類似程式語言中的巨集功能,能夠

讓我們以特定的某個名稱來代表一段資料內容。

• 實體宣告的分類:1.內部實體2.外部實體3.參數實體

Page 30: 第三章  XML DTD  設計

DTD 的基本語法 (續 )

• 實體宣告 - 內部實體– 內部實體的名稱所連結的對象是一段文字

字串。可以使用 &reftext; 標示來參引該實體。

<!DOCTYPE hello [<!ENTITY reftext “hello”>……

]<hello>&reftext;</hello>

Page 31: 第三章  XML DTD  設計

DTD 的基本語法 (續 )

• 實體宣告 – 外部實體– 外部實體必須在實體宣告中加上 SYSTEM

識別字,它能讓你將實體名稱與外部的檔案內容連結起來,如此就可讓 XML檔案參引到外部的檔案內容。

<!notation jpeg system “Joint Photographic Experts Group”>

<!Entity win2000 system “c:\winnt\web\wallpaper\windows 2000.jpg” ndata jpeg>

Page 32: 第三章  XML DTD  設計

DTD 的基本語法 (續 )

• 實體宣告 – 參數實體– 只能在文件型別宣告中使用,其宣

告方式是在實體名稱之前加上 % 符號。

<!ENTITY & name “last_name,first_name”><!ENTITY author (%name;)><!ENTITY editor (%name;)><!ENTITY interpreter (%name;)>

Page 33: 第三章  XML DTD  設計

DTD 的基本語法 (續 )

• 實體宣告• 實體的注意事項:1.不可形成遞迴2.實體宣告需出現在參引實體之前3.實體參引需加分號 (;)

Page 34: 第三章  XML DTD  設計

DTD 的基本語法 (續 )

• Notation 宣告• 記法宣告可指明外部二進位檔案

的資料型態。這個資料會傳遞給應用程式。其真正的用途則有應用程式自行決定。

Page 35: 第三章  XML DTD  設計

DTD 的基本語法 (續 )

• Notation 宣告• 用於指定外部檔案格式<?NOTATION GIF87A SYSTEM “GIF”><!NOTATION JPEG SYSTEM “Joint Photograph

ic Experts Group”>

Page 36: 第三章  XML DTD  設計

條件段

• 條件段只能使用文件型別宣告的外部子集中,它包含兩種宣告方式,即: IGNORE區段—用來排除一部分的 DTD;以及 INCLUDE區段—用來包含一部份的 DTD 。

Page 37: 第三章  XML DTD  設計

條件段 (續 )

• XML 1.0規格書的說明– Conditional sections are another SGML inve

ntion that got into XML because the people on the committee who had experience writing DTDs claimed that life would just be impossible without them.

Page 38: 第三章  XML DTD  設計

條件段 (續 )

• 條件段可以形成巢狀結構。例如 INCLUDE區段中可以包含進 IGNORE區段。

• 但在 IGNORE 中的 INCLUDE區段還是會被 IGNORE ,不會包含到文件的最後的DTD 宣告中。

Page 39: 第三章  XML DTD  設計

條件段 (續 )

<!-- 內部子集中使用實體參引 --><!ENTITY % draft ‘INCLUDE’><!ENTITY % final ‘IGNORE’><!ENTITY % external SYSTEM “e2.dtd”>%external;

Page 40: 第三章  XML DTD  設計

條件段 (續 )

<!-- 外部子集中設計條件段 --><![%draft;[

<!ELEMENT book (……)>]]><![%final;[

<!ELEMENT book (xxxx)>]]>

Page 41: 第三章  XML DTD  設計

使用外部 DTD

• 外部子集的宣告• 使用公用的 DTD• 使用外部 DTD 的注意事項

Page 42: 第三章  XML DTD  設計

使用外部 DTD( 續 )

• 使用外部 DTD 的好處是可以更容易、更有效的被許多 XML 文件所共用。不僅節省設計文件的時間,也讓 DTD 的管理集中化,同步化。

Page 43: 第三章  XML DTD  設計

使用外部 DTD( 續 )

• 外部子集的宣告<?xml version = “1.0” standalone = “no

”?>

<!DOCTYPE ROOT_ELEMENT SYSTEM “EXTERNAL_DTD”>External_DTD 可為:1. xxx.dtd2. ../xxx/yyy/zzz.dtd3. http://xxx.yyy/zzz.dtd

Page 44: 第三章  XML DTD  設計

使用外部 DTD( 續 )

• 使用公用的 DTD• System 關鍵字只用於個人或組織內部

的 DTD 文件分享。如果要引用公認的 DTD ,就應該使用 Public 關鍵字來引用DTD

• 使用 Public 關鍵字,會有一個用來識別的名稱

Page 45: 第三章  XML DTD  設計

使用外部 DTD( 續 )

• 使用公用的 DTD• <!DOCTYPE ROOT_ELEMENT PUBLIC “DTD_NAME” URL_OF_EX-DTD

”>

• DTD_NAME 的格式一般如下“-//XML publishing//Library Type//EN”

Page 46: 第三章  XML DTD  設計

使用外部 DTD( 續 )

• 在使用 Public 關鍵字的情況下,“ URL_OF_EXTERNAL_DTD”是可有可無的。可以透過 URL_OF_EXTERNAL_DTD 來找到 DTD 的定義。

Page 47: 第三章  XML DTD  設計

使用外部 DTD( 續 )

• 使用外部 DTD 的注意事項1.一份文件不能有一個以上的 <!DOC

TYPE> ,也只能引用一個外部子集。2.利用獨立文件宣告來達到正確合

法 (valid) 的 XML 文件,所謂的獨立文件宣告就是在 XML 的宣告處將 standalone 的屬性值設為“ yes”。

Page 48: 第三章  XML DTD  設計

使用外部 DTD( 續 )

• 使用外部 DTD 的注意事項3.有時候變更 DTD 不見得會相容於

以前的 XML 文件。