數位圖書館 – xml/dtd 理論與實務

90
數數數數數 – XML/DTD 數數數數數 Jian-hua Yeh ( 葉葉葉 ) 葉葉葉葉葉葉葉葉葉葉葉葉葉 [email protected]

Upload: odette-hooper

Post on 15-Mar-2016

55 views

Category:

Documents


3 download

DESCRIPTION

數位圖書館 – XML/DTD 理論與實務. Jian-hua Yeh ( 葉建華 ) 真理大學資訊科學系助理教授 [email protected]. Course Outline. 標示 (Markup) 的基本概念 SGML 介紹 XML 介紹 XML 相關標準 XML 的應用 DTD 介紹 DTD 的應用. 顧名思義. SGML – Standard Generalized Markup Language ( 標準通用標示語言 ) XML – Extensible Markup Language (可延伸 標示語言 ) - PowerPoint PPT Presentation

TRANSCRIPT

數位圖書館 – XML/DTD 理論與實務

Jian-hua Yeh ( 葉建華 )

真理大學資訊科學系助理教授[email protected]

2

Course Outline

• 標示 (Markup) 的基本概念• SGML 介紹• XML 介紹• XML 相關標準• XML 的應用• DTD 介紹• DTD 的應用

3

顧名思義• SGML – Standard Generalized Markup Language ( 標準通用標示語言 )

• XML – Extensible Markup Language

(可延伸標示語言)• HTML – HyperText Markup Language

(超文件標示語言)

4

標示 (Markup) 的基本觀念• 藉著標示傳達某些關於被標示文字的資訊 • 標示的種類

– 程序性標示 (Procedural Markup) :

• 針對文件的呈現外觀進行標示• 例如: Microsoft Word、 PDF

– 描述性標示 (Descriptive Markup) :

• 針對文件的內容和語義結構進行標示• 例如: SGML、 XML

5

程序性標示 (Procedural Markup)

• 針對文件的呈現外觀進行標示• 所見即所得 (What You See Is

What You Get)

• 文件的呈現樣式與內容儲存在同一份檔案• 方便個人使用• 通常使用專屬的控制碼( ex.

binary code) ,無法跨系統、跨平台

6

描述性標示 (Descriptive Markup)

• 針對文件的內容和語義結構進行標示• 文件的內容與呈現樣式分開• 呈現時須結合樣式表

(stylesheet) • 使用 ASCII code ,可以跨系統、跨平台• 利於大量文件的長期保存、交換與再利用

7

描述性標示的呈現

8

描述性標示文件與樣式表分開• 一份描述性標示文件可以使用不同的樣式表→ 提高描述性標示文件的再利用性• 多份描述性標示文件可以使用同一份樣式表→視覺設計維護更為容易

9

XML 的發展背景• HTML 的許多特性已經限制了 Web 的發展。 XML 的發展成員大都對 SGML 及結構化的資訊( structured

information )有相當豐富的應用經驗,他們相信引進SGML 技術,能夠彌補 HTML 的不足。

• XML─取 SGML 之長,補 HTML 之短。

10

HTML 的限制• HTML 大部分的標籤是用來控制線上顯示,無法描述較複雜的文件結構。• HTML 的標籤集是固定的,使用者不能自行定義標籤。 • HTML 文件無法支援較精確的查詢。• 資料庫中的資訊轉成 HTML 後,常會造成資訊遺失。• 不同廠商所發展的 HTML Extension 不相容。

11

SGML(Standard Generalized Markup Language)

• 1986 年 ISO 所制定的標準- ISO 8879

• 主要是為了文件交換與電子出版的使用而設計,用來描述文件結構,使得電子文件能在不同軟體系統間交換與傳輸。 • 是一套訂定標示語言的元語言( meta-language ),使用者可根據需求自行定義標籤,再以這些標籤來描述文件結構。

12

SGML 的優點• 有彈性 (flexibility) :

– 能描述任何的資訊結構與任何複雜的文件。• 非專屬性 (non-proprietary) 、平台獨立性 (platform-

independence) 與系統獨立性 (system-independence) : – 利於文件的交換與長期保存。

• 資訊再利用性 (re-usability)

13

SGML 的缺點• SGML 標準規格過於複雜。• SGML 開發相關應用軟體的成本相當高。• SGML 文件不易在 Web 上傳佈。

14

XML( Extensible Markup Language)

• W3C在 1996 年底提出的標準。• 從 SGML 衍生出來的簡化格式,也是一種元語言

(meta-language)

• 1998/2, XML1.0 Recommendation

• 已獲得各界的支持,其中包括了 Sun Microsystems, Microsoft, Netscape, Adobe, ArborText,... 等軟體大廠的背書

15

XML 的設計目標• XML 能直接在 Internet 上使用: • XML 能與 SGML 相容: • 處理 XML 文件的程式能很容易被開發:• XML 的選項功能盡量保持最少,最好是零: • 語法省略對於 XML 標示來說並不重要:• …..

16

XML 文件實例以下是 XML 文件片段: <customer-details id="AcPharm39156"> <name>Acme

Pharmaceuticals Co.</name> <address country="US"> <street>7301 Smokey Boulevard</street> <city>Smallville</city> <state>Indiana</state> <postal>94571</postal> </address> </customer-details>

17

SGML、 HTML、 XML 的關係• SGML(1986)

• HTML─SGML 的兒子 (1996, HTML 3.2)

• XML─SGML 的弟弟 (1998, XML 1.0)

• XML─比 HTML 晚出生的叔叔– XML是 SGML 的簡化,而非 HTML 的延伸

18

W3C 的資料格式

19

XML與 SGML 之比較─相同點• 都是一種 Meta-Language ,可以支援各種不同的應用。• 都具備可擴展性 (extensibility) 、結構性 (structure) 與可確認性 (validation) 等優點,能夠描述各種複雜的文件結構,並可藉由 DTD 來確保文件結構的完整性與正確性。• 都須結合樣式表來設定文件內容的呈現格式。• 都具備跨平台、可長期保存、可再利用、能被人直接閱讀等特性。

20

XML與 SGML 之比較─相異點• 對 SGML 文件而言, DTD 是必備的;而對於 XML 文件而言, DTD 不是必備的。• SGML 的使用者可以使用包含 (Inclusion) 與除外

(Exclusion) 這兩種語法規則來指定內容模式 (content model) 的例外處理 (Exceptions); XML則不支援例外處理。

• XML 不支援 AND(&) 內容模式、 SDATA 內部實體( internal entities)…等語法。

21

XML與 HTML 之比較 HTML XML 擴展性(extensibility)

標籤集與每個標籤的意義是固定的,使用者無法自行定義標籤(tags)或屬性(attribute)。

允許使用者根據需要,自行定義標籤與屬性,以便更進一步描述資料的語意。

結構性(structure)

不支援深層的結構描述。

能描述各種複雜的文件結構,並能表示資料庫綱要 (schema)及物件導向的階層結構。

驗證性(validation)

沒有提供語法規格來支援應用程式對HTML文件進行結構確認。

可包含一個語法規格 (DTD),讓應用程式對文件進行結構確認。

22

XML 文件• Well-formed XML 文件

– 沒有參引 DTD

• Valid XML 文件– 參引 DTD

• 所有的 XML 文件都須符合 Well-formed XML 規則

23

Well-formed XML 規則• 包含一個以上的元素。• 恰有一個根元素。• 不能省略起始標籤或結尾標籤。 (如 <p>…..</p>)

• 所有的 標籤必須呈現適當的巢狀 (nest) 結構。 ( 如 <B><I>bold and italic</B>italic</I> 是不允許的 )

• 空標籤必須遵守特殊的 XML 語法。 ( 如 <img src=“…”/> )

• 所有的屬性值必須括上單引號或雙引號。 ( 如 <font size=“2”> )

24

寫一份 Well-Formed XML 文件• 步驟 1 : 撰寫 XML宣告• 步驟 2 : 撰寫根元素• 步驟 3 : 撰寫其他 XML 標籤與內容• 步驟 4 : 剖析 (parsing) XML 文件

25

步驟 1: 撰寫 XML 宣告• <?xml version=”1.0”?>

• <?xml version=”1.0” encoding=”UTF-8” ?>

• <?xml version=”1.0” encoding=”big5” ?>

26

步驟 2: 撰寫根元素<?xml version=”1.0” encoding=“big5” ?>

<record-list>

……

</record-list>

27

步驟 3: 撰寫其他 XML 標籤與內容<?xml version="1.0" encoding="big5"?>

<record-list>

….

<record>

<seq>1</seq>

<title>XML及 RDF 技術介紹 </title>

<creator>梁高榮 </creator>

<journal>機械工業 </journal>

<vol>220</vol>

<date>90.07</date>

…..

<url>http://www2.read.com.tw/…..</url>

…..

</record>

…..

</record-list>

28

一份正確的 Well-formed XML 文件在 Microsoft Internet Explorer 6.0 的瀏覽結果

29

一份有語法錯誤的 XML 文件在 Microsoft Internet Explorer 6.0 的瀏覽結果

30

XML 的樣式表 (Style Sheet)• XSL (Extensible Stylesheet Language)

– W3C Recommendation, 2001/10/15

• CSS (Cascading Style Sheet)– W3C Recommendation

31

CSS(Cascading Style Sheet)

• 較 XSL 簡單• 已是 W3C 的正式標準• 主流瀏覽器已支援

32

如何使用 CSS 樣式表• 在 XML 中呼叫 CSS 樣式表

<?xml version=“1.0” standalone=“no” ?>

<?xml-stylesheet href=“*.css” type=“text/css” ?>

• 呼叫的樣式表不存在或為空檔案,則使用內定值• 最後的顯示方式 =繼承的顯示方式 + 自訂的顯示方式• 不可以使用中文標籤• 屬性與屬性值大小寫相同

33

CSS 的屬性與屬性值• 與文字相關的屬性

– 字型設定、文字大小、文字粗細、文字樣式、文字位置、線段設定、文字縮排、文字大小寫設定• 與方框有關的屬性

– 方框設定、框線顏色、框線形式、框線寬度• 與版面有關的屬性

– 背景顏色、顯示方式、位置、寬度、與邊緣距離

34

XSL 樣式表• XSL 文件是 well-formed XML 文件• XSL 包含大多數的 CSS 功能• XSL 包含兩個部分:

– 一個可以轉換 XML 文件的語言:• XSLT(XSL Transformations) 1.0

• W3C Recommendation ; 1999/11/16

– 一組排版指令 (formatting object) 的 XML 標示:• XSL 1.0

• W3C Recommendation; 2001/10/15

35

XSL 與 CSS 的比較XSL CSS

能否使用在 HTML ? no yes

能否使用在 XML ? yes yes

是不是轉換語言 ? yes no

使用語法 ? XML CSS

36

XSLT 的應用• XML XML

– 可以用來做不同 Metadata 交換資訊時的轉換• XML HTML (XHTML)

– 轉換後的 HTML 必須是 well-formed

• XSL XSL

37

XSLT 的網路應用• 在 Server 端做轉換:

– Real-time 轉換: Server Load 較重– Batch 轉換: Server Load 較輕

• 在 Client 端做轉換:– Browser 對 XSLT 的支援可能不完整 !?

• 接到 http request ,根據 browser type ,再決定是要由 Server 端做轉換,或是由 Client 端做轉換。

38

XSL 處理器的工作原理• 解讀 XML 文件樹狀結構 (source tree) ,並產生暫時性的樹狀結構 (result tree)

• 對結果樹文件做排版,產生可由瀏覽器顯示的文件

39

如何使用 XSL 樣式表• 在 XML 中呼叫 XSL 樣式表

<?xml version=“1.0” standalone=“no” ?>

<?xml-stylesheet href=“*.xsl” type=“text/xsl” ?>

• 呼叫的樣式表不存在,會出現錯誤訊息• 可以使用中文標籤• 屬性與屬性值大小寫不同

40

XSL 元素• 與樣本有關的元素• 與資料有關的元素• 條件式控制元素• 其他元素

41

與樣本有關的 XSL 元素• xsl:stylesheet

• xsl:template– match 屬性

• xsl:value-of– select 屬性

• xsl:for-each– select 屬性

• xsl:apply-templates

42

與資料有關的 XSL 元素• xsl:comment

• xsl:copy

• xsl:attribute

• xsl:element

43

XSL 的條件式控制元素• xsl:if

• xsl:choose

• xsl:when

• xsl:otherwise

44

連結 XSL 樣式表的 XML 文件

<?xml version="1.0" encoding="big5"?>

<?xml-stylesheet href="ncl_journal_search_2.xsl" type="text/xsl" ?>

<record-list>

….

<record>

<seq>1</seq>

<title>XML及 RDF 技術介紹 </title>

<creator>梁高榮 </creator>

<journal>機械工業 </journal>

…..

</record>

…..

</record-list>

45

一份結合 XSL的 XML 文件在 Microsoft Internet Explorer 6.0 的瀏覽結果

46

XML 相關標準制定現況• XML 1.0 :

– W3C Recommendation 10-Feb-1998

• Namespaces in XML:– W3C Recommendation 14-Jan-1999

• XSLT :– W3C Recommendation 16-Nov-1999

• XML Schema :– W3C Recommendation 2-May-2001

• XHTML 1.1 :– W3C Recommendation 31-May-2001

• XLink :– W3C Recommendation 27-June-2001

• XSL :– W3C Recommendation 15-Oct-2001

47

XHTML與 HTML 的不同 (1/6)

• 文件必須是 well-formed

• Example:– CORRECT: nested elements<p>here is an emphasized <em>paragraph</em>.</p>

– INCORRECT: overlapping elements<p>here is an emphasized <em>paragraph.</p></em>

48

XHTML與 HTML 的不同 (2/6)

• 元素與屬性名稱是小寫• Example:

– CORRECT: <li>….

– INCORRECT: <LI>….

49

XHTML與 HTML 的不同 (3/6)

• 除了空元素外,都必須有結尾標籤。• Example:

– CORRECT: terminated elements <p>here is a paragraph.</p> <p>here is another paragraph.</p>– INCORRECT: unterminated elements <p>here is a paragraph. <p>here is another paragraph.

50

XHTML與 HTML 的不同 (4/6)

• 所有屬性值都必須加引號• Example:

– CORRECT: quoted attribute values

<table rows="3">

– INCORRECT: unquoted attribute values

<table rows=3>

51

XHTML與 HTML 的不同 (5/6)

• 屬性不能採用簡化表示法• Example:

– CORRECT: unminimized attributes

<dl compact="compact">

– INCORRECT: minimized attributes

<dl compact>

52

XHTML與 HTML 的不同 (6/6)

• 空元素的表示法• Example:

– CORRECT: terminated empty tags

<br/><hr/>

– INCORRECT: unterminated empty tags

<br><hr>

53

XML 的應用

• 資料庫交換• Client端的文件處理• 一份內容,多種呈現• 資訊過濾• 資訊再利用

54

XML 應用實例─新浪網與國家圖書館合作案

55

XML 應用實例─新浪網與國家圖書館合作案

56

新浪網伺服器 國圖伺服器

(1) 送出查詢請求

(2) 將查詢請求導向國圖伺服器

(3) 將查詢結果以 XML 格式傳回

(4) 將 XML 轉成 HTML網頁傳回 Client 端(5) 點選 metadata取得更多資訊

User系統架構圖

57

甚麼是 DTD

• 文件型態定義 (Document Type Definition)

• DTD 的概念緣於 SGML ,每一份 SGML 文件一定參考到一份 DTD

• XML 沿用了 DTD 的概念,但一份 XML 文件可以自由選擇是否參引 DTD– Well-formed XML 文件:沒有參引 DTD

– Valid XML 文件:參引 DTD

58

DTD 的功能• 定義該類型的文件所包含的元素 (Element) ,並定義每個元素的內容,包含子元素與屬性。• 規範各元素 (Element) 的排列組合方式,包含出現的順序與可出現的次數。

59

DTD 的組成• 元素( Elements )• 屬性( Attribute )• 實體( Entities )• 註解( Comments )

60

XML DTD / 元素 (Elements)

• 非空元素 (non-empty element)

– 元素之下還有子元素或者元素包含內容• 空元素 (empty element)

– 元素之下沒有任何的子元素或內容• 不做限制的元素

– 元素之下可以包含任何被宣告過的元素或文字資料 (#PCDATA)

– 這些被包含的元素出現順序與次數皆不受限制。

61

非空元素的宣告語法如下:

<!ELEMENT 元素名稱 元素內容 >

如:<!ELEMENT Email (From,Date,To+,Subject,Body?)>

元素名稱

元素內容<!ELEMENT From (#PCDATA)>

(#PCDATA) 代表該資料型態是可被剖析的文字資料 (Parsed Character DATA)

62

非空元素的使用<?xml version=“1.0” standalone=“no”>

<!DOCTYPE Email SYSTEM “http://ross.edu.tw/dtd/email.dtd”>

<Email>

<From>Joe</From>

<Date>1999-7-14 AM 09:20</Date>

<To>Jay</To>

<To>Jennifer</To>

<Subject>Learning XML</Subject>

<Body>學 XML就像學 HTML 一樣簡單 </Body>

</Email>

內容包含了 From, Date, To, Subject, Body 等子元素內容是純文字

63

空元素的宣告與使用語法如下:

<!ELEMENT 元素名稱 EMPTY>

如:<!ELEMENT br EMPTY>

使用實例:………<br/>………

元素名稱

64

不做限制的元素宣告語法如下:

<!ELEMENT 元素名稱 ANY>

如:<!ELEMENT comment ANY>

65

XML DTD / 元素的內容模型 (Content Model)

( )

A?

A+

A*

(A | B | C)

(A, B, C)

一個表示式A 可出現一次,或不出現 (0 or 1次 )

A 可重複出現,且至少出現一次 (1次以上 )

A 可重複出現,或不出現 (0次以上 )

A, B, C 任選一,且僅能有一A, B, C 同時出現,且出現順序為 A, B, C

66

混合型 (Mixed) 內容模型• 當一個元素內容包含文字資料與子元素時,稱做混合型內容• 語法:

<!ELEMENT 父元素 (#PCDATA | 子元素 1 | 子元素 2 | ……| 子元素 n)*> 或<!ELEMENT 父元素 (#PCDATA | 子元素 1 | 子元素 2 | ……| 子元素 n)+>

• 無法限制各元素出現順序與次數

67

XML DTD / 屬性 (Attributes)

• 提供元素額外的描述資訊• 屬性值可設定預設值或以列舉的方式來限定。• 語法:

<!ATTLIST 元素名稱 屬性名稱 屬性值型態 屬性的內定值 >

68

幾種常用的屬性值資料型態• CDATA : Character DATA ,代表一般文字。• 將可能的屬性值列舉出來,應用時屬性值必須採用列舉值的其中之一。• NMTOKEN : 英文字母、數字、“ _” 、“ -” 、“ .” 、“ :”

• NMTOKENS : 一個以上的 NMTOKEN 所組成,之間以空白隔開• ID : 屬性值在設定時值必須是唯一的• NOTATION : 屬性值是 DTD 宣告的 NOTATION

69

屬性的內定值型態• #REQUIRED : 該元素一定需要設定該屬性值• #IMPLIED : 該元素不一定要設定該屬性值• #FIXED : 有固定的屬性值• 預設的字串:若沒有指定屬性值,則採用預設值

70

屬性宣告實例 (1/2)

<!ELEMENT Tel (#PCDATA)>

<!ATTLIST Tel Zone CDATA #IMPLIED>

元素名稱 屬性名稱使用實例:……

<Tel Zone=“02”>27819126</Tel>

….

71

屬性宣告實例 (2/2)

<!ELEMENT Name (#PCDATA)>

<!ATTLIST Name Sex (M | F) #REQUIRED>

列舉值使用實例:……

<Name Sex=“M”>Joe</Name>

….

72

XML DTD / 實體 (Entities)

範例:<!ENTITY ROSS “Resource Organization and Searching

Specification”>

Metalogy is produced by the research group under &ROSS.

73

XML DTD / 註解 (Comments)

範例:<!--3 ELEMENT 版本名稱 (#PCDATA) -->

<!ELEMENT editionName (#PCDATA) >

<!--ATTLIST 版本名稱 使用代碼 FIXED "npm-doc-editionName"-->

<!ATTLIST editionName scheme FIXED "npm-doc-editionName">

74

如何開發 DTD

• 分析文獻結構– 結構圖

• 確認所包含的 elements 及每個 element 的規格– 每個元素的內容 ?

– 每個元素是必備還是可有可無 ?

– 每個元素的屬性與屬性值 ?

• 開始撰寫 DTD

– 註解

75

Email 的文件結構Email

Body

ToSubjectDate

From

根元素

Email 的子元素

76

XML與 XML DTD 的關係XML

書畫DTD 器物DTD ….

器物甲 器物乙 器物丙 ….

印刷版本 Web Page版本虛擬實境版本 ….

文獻 DTD

77

使用 DTD 的好處• 統一文件格式:藉 DTD 來進行文件內容與結構的驗證。• 提高文件的再利用性

78

使用 DTD 的代價• 如果文件結構過於複雜,訂定出完整且具擴充彈性的

DTD 相對不易。• 必須搭配相關的應用程式或剖析器 (parser)才能發揮

DTD 的作用。

79

如何取得 DTD?

• 使用某單位或某人已開發的 DTD.<!DOCTYPE Email PUBLIC “-//OPEN DTD//DTD Email//EN”

“http://opendtd.org/dtd/email.dtd”>

• 自行開發 DTD.<!DOCTYPE Email SYSTEM “http://ross.edu.tw/dtd/email.dtd”>

80

Valid XML 文件• 一份附帶有外部或內部 DTD的Well-formed XML 文件,並且文件內容符合 DTD 所定義的文件格式,稱之為 Valid XML 文件。

81

寫一份 Valid XML 文件• 步驟 1 : 撰寫 XML宣告• 步驟 2 : 設計一個 DTD.

• 步驟 3 : 撰寫 XML 標籤與內容• 步驟 4 : 驗證 (validating) XML 文件

82

步驟 1: 撰寫 XML 宣告• <?xml version=”1.0”?>

• <?xml version=”1.0” encoding=”UTF-8” ?>

• <?xml version=”1.0” encoding=”big5” ?>

83

步驟 2: 設計一個 DTD<!-- Elements Content -->

<!-- ----------- ---------------------------->

<!ELEMENT Email (From,Date,To+,Subject,Body?)>

<!ELEMENT From (#PCDATA)>

<!ELEMENT Date (#PCDATA)>

<!ELEMENT To (#PCDATA)>

<!ELEMENT Subject (#PCDATA)>

<!ELEMENT Body (#PCDATA)>

<!-- End of Email DTD -->

84

步驟 3 : 撰寫 XML 標籤與內容• DTD宣告

– 內部 (Internal) DTD 宣告– 外部 (External) DTD 宣告

85

內部 DTD 宣告實例<?xml version=“1.0”>

<!DOCTYPE Email [

<!ELEMENT Email (From,Date,To+,Subject,Body?)>

<!ELEMENT From (#PCDATA)>

<!ELEMENT Date (#PCDATA)>

<!ELEMENT To (#PCDATA)>

<!ELEMENT Subject (#PCDATA)>

<!ELEMENT Body (#PCDATA)>

]>

<Email>

<From>Joe</From>

<Date>1999-7-14 AM 09:20</Date>

<To>Jay</To>

<To>Jennifer</To>

<Subject>Learning XML</Subject>

<Body>學 XML就像學 HTML 一樣簡單 </Body>

</Email>

根元素

DTD 規則

根標籤

86

外部 DTD 宣告實例 (1/2)

<?xml version=“1.0” standalone=“no”>

<!DOCTYPE Email SYSTEM “http://ross.edu.tw/dtd/email.dtd”><Email>

<From>Joe</From>

<Date>1999-7-14 AM 09:20</Date>

<To>Jay</To>

<To>Jennifer</To>

<Subject>Learning XML</Subject>

<Body>學 XML就像學 HTML 一樣簡單 </Body>

</Email>

87

外部 DTD 宣告實例 (2/2)(http://email.org/email.dtd)

<?xml version=“1.0”><!ELEMENT Email (From,Date,To+,Subject,Body?)><!ELEMENT From (#PCDATA)> <!ELEMENT Date (#PCDATA)><!ELEMENT To (#PCDATA)><!ELEMENT Subject (#PCDATA)><!ELEMENT Body (#PCDATA)>

88

利用 XML SPY 4.3對 XML 文件進行驗證 (1) -檢查文件是否 well-formed

89

利用 XML SPY 對 XML 文件進行驗證 (2) -檢查文件是否 Valid

90

Conclusion