經濟部工業局電子化人才培訓課程 清華大學工業工程與工程管理學系...
DESCRIPTION
經濟部工業局電子化人才培訓課程 清華大學工業工程與工程管理學系 課程名稱:電子商務管理與技術. eXtensible Markup Language (XML). 主題. 1.XML 基礎 2. 建立 XML 文件 3.XML 語法檢查 (DTD/XML Schema) 4.XSLT 、 XPath 轉換 XML 文件 5.XML Document Object Model. 1.XML 基礎. 文件資料的物件化. - PowerPoint PPT PresentationTRANSCRIPT
1
eXtensible Markup Language (XML)
經濟部工業局電子化人才培訓課程
清華大學工業工程與工程管理學系
課程名稱:電子商務管理與技術
2
主題
• 1.XML 基礎• 2. 建立 XML 文件• 3.XML 語法檢查 (DTD/XML Schema)
• 4.XSLT、 XPath 轉換 XML 文件• 5.XML Document Object Model
3
1.XML 基礎
4
文件資料的物件化• 一份電腦文件如 Word 檔案 , 資料內容本身是一份沒有結構性的文件。一份文件若能夠轉換成一個樹狀結構資料 , 我們就可以如同資料庫一般撰寫程式進行資料的排序、 搜尋。 ( 如圖書產品型錄 )
• 如果所有的文件都可以使用相同的樹狀結構進行分析 , 如此文件的格式就可以統一 , 電腦間的檔案資料交換也更加的容易。
5
Root element -> Nested elements -> Hierarchical structure
6
What is XML? • XML: eXtensible Markup Language defines an univer
sal standard for electronically exchanging data for the Internet and Web applications and is supported by major IT vendors.
• XML 在書寫上非常類似 HTML, 注重資料的內容而不是如何顯示 , 沒有如 HTML 的預設標籤 , 並非取代 HTML 。
• 使用者必須自行定義描述資料所需的各種標籤以傳輸有結構性的資料 , 即須注意良好格式 (Well-Formed) 和資料驗證 (Validity) 。
7
XML 用途
• XML 儲存 HTML 顯示文件內容 : 使用 XML 技術動態產生所需的 HTML 網頁。
• XML 可以作為資料交換的格式
• XML 應用在電子商務 : 在企業間 (B2B) 電子商務交易 ,XML 將是資料交換企業整合的重要技術與標準。
8
• XML can take large chunks of information and consolidate them into an XML document - meaningful pieces that provide structure and organization to the information.
9
XML 相關技術關聯圖
10
文件資料驗證• 所謂的驗證即是定義一組規則 , 這套規則可以檢查 XML 文件的架構和標籤是否合乎規則。
• DTD(Document Type Definition): 為 SGML 之語法檢查 , 能幫助 XML 剖析器來解譯 XML 文件內容。
• XML Schema 的架構就是一份 XML 文件 , 所以在使用上和撰寫一份 XML 文件一般 , 不用像 DTD 需要學習另一種語法。
11
顯示輸出和文件轉換• XSL(Extensible Stylesheet Language) 的功能有兩項 : 一為顯示 XML 的內容 , 另一就是文件轉換 ,也就是 XSLT 。使用 XSLT 可以將 XML 的樹狀結構轉換成另一架構 , 如純文字文件或 HTML文件。
• XSL 屬於一種樣式程式語言 , 其提供比 CSS(Cascading Style sheets) 更加強大的 XML 文件顯示的功能。 CSS 主要用來支援簡單的 XML 架構 ,而 XSL 則是使用於複雜的 XML 架構。
12
XML 軟體需求• XML 剖析器 (Parser): 所謂剖析為依照標籤解讀文件。
電腦本身雖看不懂 XML 文件內容 , 但是透過標籤幫助 ,剖析器就可以分析文件的內容取出所需的資訊。 MSXML Parser 為微軟附在 IE 的剖析器 , 只要 5.x 版就擁有 XML 剖析器。
• XML 驗證工具 : 通常 XML 編輯和瀏覽亦會提供驗證。
• XML 編輯工具 :UltraEdit 、 XML Notepad 、 XML Spy 。
• XML 瀏覽工具 :IE 5.x 可以如同瀏覽 HTML 文件一般瀏覽 XML 文件。
13
2. 建立 XML 文件
14
XML 文件組成因子• 元素 (Element):XML 元素為整個文件的主要架構 , 為一完
整的項目 , 包含了標籤、屬性、開始標籤、結尾標籤和其中的文字。
• 屬性 (Attribute): 開始標籤名稱後可為標籤加上屬性名稱和屬性值 , 且值要用雙引號括起來。
• 實體參考 (Entity Reference): 由於標籤語言本身有一些保留符號 , 此時會用到實體參考。
• 註解 (Comment): 由 <!-- -->表示• CDATA Section 和 PCDATA: 在 Tag 中包含的文字為 PCD
ATA;如果 XML 有 CDATA Section, 則告訴 Parser 不要處理此區塊的內容。 CDATA Section位於 <![CDATA[ ]]> 之間 , 通常是用來儲存程式碼的資料。
• PI(Processing Instructions):PI允許文件包含應用程式的指令 , 這些資訊告訴 XML 剖析器如何處理 XML 文件 , 並將這些資訊送給應用程式。其基本格式以 <? name ?>表示。
15
標準 XML 注意事項• 根標籤 : 所有 XML 文件都需要一對標籤來定義文件的根元素 , 其它元素都屬於此根元素之子元素。
• XML 標籤可以使用中文 , 但英文大小寫不同
• 所有元素需要有結尾標籤
• 巢狀 XML 元素不可重疊
• 屬性值必須要有雙引號
16
Rules for Well-Formed XML• Mandatory Closing Tag
– The set of tags are unlimited but all container tags must have end tag, e.g., <tag>…</tag>.
• Example:• <number>kj9876_34</number>
• <due>1/12/98</due>
• <bill_to>MTB1</bill_to>
• <ship_to>MTO1</ship_to>
• <selling_party>AC987</selling_party>
17
Rules for Well-Formed XML (cont.)
• Proper Element Nesting– All tags must be nested correctly. Like HTML,
XML can intermix tag, but tags may not overlap each other.
• Legal XML <PRODUCT>
<ID>721</ID>
<NAME>PENTIUM 11 300</NAME>
<PRICE>5000</PRICE>
</PRODUCT>
Illegal XML<PRODUCT>
<ID>
<NAME>PENTIUM 11 300<NAME>
<PRICE>5000</PRICE>
</PRODUCT>
</ID>
18
Rules for Well-Formed XML (cont. 2)
• Double-quote value delimiters– All attribute values must be enclosed in single
or double quotation marks.
• Legal:– <tag attribute=“value”>
• Illegal:– <font size = 6>
<XML>
<xml>
are different
19
Rules for Well-Formed XML (cont. 3)
• Single tag element– Singleton tag (called empty element or tags without
content) must be written in an abbreviated form using special XML syntax.
• Legal:– <BR/>
• <TITLE></TITLE> is equivalent to <TITLE/>
20
XML範例 (product.xml)<?xml version="1.0" encoding="Big5"?>
<!--product.xml edited by jack-->
<PRODUCTLIST>
<PRODUCT>
<ID>721</ID>
<NAME>PENTIUM 100</NAME>
<PRICE>1000</PRICE>
</PRODUCT>
<PRODUCT>
<ID>722</ID>
<NAME>PENTIUM 11 300</NAME>
<PRICE>5000</PRICE>
</PRODUCT>
</PRODUCTLIST>
21
1.booklist含有子元素 book兩個2.book含有子元素 code title author price3.Tag中包含的文字自訂
Hint:<?xml version=“1.0” encoding=“Big5”?>
Exercise
22
XML 文件的名稱空間 (Namespace)
• 如果 XML 文件需要引用其它 XML 架構或元素 , 或是與其它 XML 文件進行資料交換 , 我們必須要在 XML 文件宣告名稱空間 , 以避免標籤名稱重複的問題。
• 為了取得唯一的標籤名稱 , 名稱空間使用網址的名稱和路徑 , 我們稱為 URI (Universal Resource Identifier) 。例 <PRODUCT xmlns = http://www.company.com/ >
• 標籤的完整名稱 : < 名稱空間字頭 : 標籤名稱 > 例如 : <bk:title> <jb:title> 亦即前面的名稱空間不同 , 就屬於不同的標籤。
23
<?xml version="1.0" encoding="Big5" ?><booklist><book xmlns="http://www.company.com/"> <title>abc123</title> <authorlist> <author>jack</author> <jobxmlns:jb="http://www.ebec.com.tw/"> < companyname > ebec </companyname> <title>student</title> </job> </authorlist> </book> </booklist>
名稱空間範圍
24
3.XML 語法檢查 (DTD/XML Schema)
25
DTD (Document Type Definition)
• Schema 是一種 XML 文件內容驗證機制 , 主要是定義文件出現的元素、 屬性和整份文件的架構 , 也就是元素擁有哪些子元素的內容模型 (Content Models) 。
• 一旦 XML 文件定義好 DTD, 在使用編輯工具建立 XML文件時 , 編輯工具就可以依據 DTD 檢查 XML 是否為合法的內容。
• XML1.0 版的 Schema 預設為 DTD, 而 XML Schema 是由MS 所提出 , 其目的就是要取代 DTD 成為下一代的 XML驗證機制。
26
<?xml version="1.0" encoding="Big5"?>
<!--XML 文件內部的 DTD-->
<!DOCTYPE booklist [
<!ELEMENT booklist (book+)>
<!ELEMENT book(code, title, authorlist, price)>
<!ATTLIST book sales (N | Y) #REQUIRED>
<!ELEMENT code (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT authorlist (author+)>
<!ELEMENT author (#PCDATA)>
<!ATTLIST authorlist no CDATA #REQUIRED >
<!ELEMENT price (#PCDATA)>
]>
<booklist><book sales="Y">
<code>F0001</code><title> abc </title><authorlist no="1">
<author>jack1</author></authorlist><price>580</price>
</book><book sales="N">
<code>F0002</code><title> def </title><authorlist no="1">
<author>jack2</author></authorlist><price>550</price>
</book></booklist>
內部 DTD
27
DTD 元素宣告• <!ELEMENT element_name (element_or_data)>
• element_name : XML 元素的標籤名稱• element_or_data :定義元素內含的資料或是其
下的子元素,如果不只一個請用「 , 」分隔,如下所示:child_element, child_element,…
28
DTD 元素使用符號說明
符號 說明
+ 子元素最少出現一次
* 子元素出現零或多次
? 子元素出現零或一次
| 子元素清單之一
(…) 將元素清單括起來
29
DTD 元素資料關鍵字 說明#PCDATA 文字資料的字串,這是剖析器需要
進一步剖析的資料,因為字串可能擁有其他 XML 元素,大部分的元素資料都屬於此關鍵字
ANY 元素內容可以屬於任何資料
30
DTD 元素宣告<!ATTLIST element_name attribute_name attribute_type default_value>
‧element_name :屬性所屬的 XML 元素名稱‧attribute_name :屬性名稱‧attribute_type :指定屬性值的種類
31
DTD 屬性使用符號說明屬性預設值類 說明“value” 屬性的預設值
<!ATTLIST authorlist type CDATA “personal”>
<authorlist type=“studio”>…</authorlist>
#REQUIRED 屬性一定需要,元素一定需要指定此屬性<!ATTLIST book sales (N|Y) #REQUIRED>
<book sales=“Y”>…</book>
#IMPLIED 屬性沒有提供預設值,可有可無<!ATTLIST authorlist type CDATA #IMPLIED>
#FIXED value 指定屬性值必須為 value 值<!ATTLIST book company CDATA #FIXED “Microsoft”>
<book company=“Flag”>…</book> 錯誤
32
XML Schema
• XML Schema本身屬於一份 XML 文件 ,其基本的架構和驗證的XML 文件並沒有什麼不同 ,通常我們將 XML Schema驗證的 XML 文件稱為 Instance文件;而 XML Schema文件稱為 Schema文件。
• 基本架構如下所示 :
<? xml verson =“1.0” encoding= “Big5” ?><xsd:schema xmlns:xsd=http://www.w3.org/1999/XMLSchema>……………………</xsd:schema>
33
XML Schema (cont.)
• 元素 Schema間之子元素就是在定義 Instance文件的 XML 元素 ,常用的 XML 元素如下表所示 :
元素 說明schema XML Schema文件的根元素simpleType 使用者自己定義的資料型態Element 宣告 XML 元素complexType 宣告 XML 子元素attribute 宣告元素屬性
34
XML Schema (cont. 2)
• 通常我們將XML Schema 獨立存成一個 Schema文件檔案 , 副檔名為.xsd, 然後在XML的 Instance文件指定使用的 Schema檔案。
<booklist xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xsi:noNamespaceSchemaLocation= abcd.xsd">
• XML Schema支援多達四十種以上的資料型態 ,而且允許使用者自定資料型態 ,這些資料型態是使用在XML元素和內容。例如 string、 boolean 、 float 、 double 等。
35
(1) 0<= OrderQuality <= 100<simpleType name = “OrderQuality”base= “integer”> <minInclusive value= “1”/> <maxInclusive value= “100”/> </simpleType>(2)列舉清單<simpleType name= “color”base= “string”> <enumeration value= “red”/> <enumeration value= “white”/> <enumeration value= “blue”/> <enumeration value= “black”/> </simpleType>(3)正規語法<simpleType name = “PhoneNumber”base= “string”> <length value= “11”/> <pattern value= “\d{2}-\d{8}”/> </simpleType>ps: \d 代表為數字
XML Schema (cont. 3)
36
4.XSLT、 XPath轉換 XML 文件
37
XSL(eXtensible Style Language)
• XML文件本身只是在定義資料的內容 ,如果需要顯示XML元素的資料 ,我們需要描述XML元素如何被顯示 ,這種語言稱為樣式語言。 CSS只是其中一個選擇,XSL才是配合XML的樣式語言。
• XSL主要功能分為兩部分 : 1.轉換 XML文件 :將XML文件架構轉換成另一個XML架構的文件 , 或是 HTML文件。 (稱為XSLT;XSL Transformations)目前支援 XML的瀏覽程式不多,所以XSLT的角色即相當重要。 2.格式化XML文件 :格式化元素內容樣式 ,以便顯示出XML文件。
38
XSLT是如何工作 ?• XSLT簡單的說 ,即是將一棵來源為 XML 的樹 ,套用 XS
LT轉換範本樹 , 修改一些節點結構 , 最後產生另一棵不同架構的樹狀結構。
39
XPath Language
•因為 XSLT屬於一種範本驅動的轉換 ,也就是說需要在 XML 文件正確描述 XML 元素的位置。 XML 文件能夠轉換成為一個樹狀結構 ,如何找到指定節點的定位指令就是 XPath的目的。
40
XPath 的位置路徑運算子 說明
/ 子元素路徑運算子,指出元素和子元素的節點
// 遞迴下層路徑運算子,指出所有在節點下層的符合節點,不只是子節點,可以是下下層的子節點
. 目前的節點
.. 父節點
* 萬用字元,目前元素的所有子元素和屬性
@ 元素的屬性
[ ] 指出節點的索引,內容為指定的屬性或元素,也可以加上條件指令
| 組合多個位置路徑,每個位置路徑使用使運算子分隔
41
XPath 範例 XML
• <?xml version="1.0" encoding="Big5"?>• <glossary>• <item>• <title version="EN">eXtensible Markup Language</title>• <definition> 可擴充展標示語言 <title>XML<title></definition>• </item>• <item>• <title version="EN">encoding</title>• <definition> 字元集 </definition>• </item>• <item>• <title version="EN">Uniform Resource Identifier</title>• <definition> 統一資源識別符號 <title>URI</title></definition>• </item>• </glossary>
42
XPath 樹狀結構root
glossary<?xml?>
item item item
title(version)
definitiontitle(version)
definition
title(version)
definition
text
text
text
text
text
texttitle title
43
節點索引條件• Xpath之位置路徑 : 範例 說明
/glossary/item/title 選擇 item 子元素下的 title 元素/glossary/item/title[1] 選擇 item 子元素的第一個 title 元素/glossary/item/title[@version] 選擇 item 元素擁有屬性 version 的所
有 title 元素/glossary/item/title@version 傳回 title 子元素之 version 屬性的值
//title 指出根節點下所有之 title 元素/glossary/item/* 選擇 /glossary/item 下的所有元素
44
XSLT基本架構<?xml version="1.0" encoding="Big5"?><xsl:stylesheet version="1.0" xmlns:xsl ="http://www.w3.org/TR/WD-xsl"><xsl:template match="/">
………………………
………………………
</xsl:template></xsl:stylesheet>
45
XSLT常用的元素XSLT元素 說明
<xsl:stylesheet> XSLT Script之根標籤 <xsl:template> XSLT的範本,每一個 xsl:template元素內涵指
定元素的轉換規則。 <xsl:call-template> 呼叫犯範本函數 , 使用 <xsl:with-param> 傳入函數
的參數<xsl:value-of> 取出選擇 XML 元素或屬性內容 <xsl:for-each> XSLT的迴路元素,元素的內容可以依迴路條件處
理所有符合條件的子元素。 <xsl:if> XSLT的條件元素,當條件成立時,才處理指定的
範本規則 <xsl:choose><xsl:when><xsl:otherwise>
這三個元素就是建立多條件範本規則,如同 VBScript的 Select Case
46
XSLT 範例 1 (hello.xsl)<?xml version="1.0" encoding="Big5"?><xsl:stylesheet version="1.0" xmlns:xsl ="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/"><html><head>
<title> 測試 XSLT</title></head><body>
<xsl:value-of select="hello"/>
</body></html></xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="Big5"?>
<?xml-stylesheet type="text/xsl" href="hello.xsl"?>
<hello> 這是一個測試 !!</hello>
hello.xml
47
XSL範例 2 (LCD2.xsl)
48
XSL範例 3(LCD.xsl)
49
References• XML的入門與應用
– http://www.hpdiy.com.tw/xml.htm• 實戰 XML
– http://www.softchina.com.tw• XML IE5
– http://webdev.wrox.co.uk/books/1576/• XML-Data standard
– http://www.w3.org/TR/NOTE-XML-data/• XSL standard
– http://www.w3.org/TR/NOTE-XML-data/
50
XML 網站推薦• IBM網站
– http://www.ibm.com/developer/xml/
• 微軟網站– http://msdn.microsoft.com/xml/default.asp
• Free XML software– http://www.stud.ifi.uio.no/~lmariusg/linker/XMLtools.html
– http://www.stud.ifi.uio.no/~lmariusg/linker/xmltools/by-platform.html