Upload
odette-hooper
View
55
Download
3
Embed Size (px)
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
Citation preview
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 ,可以跨系統、跨平台• 利於大量文件的長期保存、交換與再利用
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)
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 的延伸
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),讓應用程式對文件進行結構確認。
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” ?>
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>
30
XML 的樣式表 (Style Sheet)• XSL (Extensible Stylesheet Language)
– W3C Recommendation, 2001/10/15
• CSS (Cascading Style Sheet)– W3C Recommendation
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
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 端做轉換。
39
如何使用 XSL 樣式表• 在 XML 中呼叫 XSL 樣式表
<?xml version=“1.0” standalone=“no” ?>
<?xml-stylesheet href=“*.xsl” type=“text/xsl” ?>
• 呼叫的樣式表不存在,會出現錯誤訊息• 可以使用中文標籤• 屬性與屬性值大小寫不同
41
與樣本有關的 XSL 元素• xsl:stylesheet
• xsl:template– match 屬性
• xsl:value-of– select 屬性
• xsl:for-each– select 屬性
• xsl:apply-templates
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>
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>
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>
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
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 等子元素內容是純文字
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
– 註解
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”>
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 -->
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)>