XML教學手冊 - 企業運籌與電子化中心

Download Report

Transcript XML教學手冊 - 企業運籌與電子化中心

經濟部工業局電子化人才培訓課程
清華大學工業工程與工程管理學系
課程名稱:電子商務管理與技術
eXtensible Markup Language
(XML)
1
主題
•
•
•
•
•
1.XML基礎
2.建立XML文件
3.XML語法檢查(DTD/XML Schema)
4.XSLT、XPath轉換XML文件
5.XML Document Object Model
2
1.XML基礎
3
文件資料的物件化
• 一份電腦文件如Word檔案,資料內容本身是一
份沒有結構性的文件。一份文件若能夠轉換成
一個樹狀結構資料,我們就可以如同資料庫一般
撰寫程式進行資料的排序、 搜尋。(如圖書產
品型錄)
• 如果所有的文件都可以使用相同的樹狀結構進
行分析,如此文件的格式就可以統一,電腦間的
檔案資料交換也更加的容易。
4
Root element -> Nested elements -> Hierarchical structure
5
What is XML?
•
•
•
XML: eXtensible Markup Language defines an
universal standard for electronically exchanging data
for the Internet and Web applications and is supported
by major IT vendors.
XML在書寫上非常類似HTML,注重資料的內容而
不是如何顯示,沒有如HTML的預設標籤,並非取代
HTML。
使用者必須自行定義描述資料所需的各種標籤以
傳輸有結構性的資料,即須注意良好格式(WellFormed)和資料驗證(Validity)。
6
XML用途
• XML儲存HTML顯示文件內容:使用XML技術
動態產生所需的HTML網頁。
• XML可以作為資料交換的格式
• XML應用在電子商務:在企業間 (B2B) 電子商
務交易,XML將是資料交換企業整合的重要技
術與標準。
7
• XML can take large chunks of information and
consolidate them into an XML document - meaningful
pieces that provide structure and organization to the
information.
8
XML相關技術關聯圖
9
文件資料驗證
• 所謂的驗證即是定義一組規則,這套規則可以檢
查XML文件的架構和標籤是否合乎規則。
• DTD(Document Type Definition):為SGML之語
法檢查,能幫助XML剖析器來解譯XML文件內
容。
• XML Schema的架構就是一份XML文件,所以在
使用上和撰寫一份XML文件一般,不用像DTD
需要學習另一種語法。
10
顯示輸出和文件轉換
• XSL(Extensible Stylesheet Language)的功能有兩
項:一為顯示XML的內容,另一就是文件轉換,也
就是XSLT。使用XSLT可以將XML的樹狀結構
轉換成另一架構,如純文字文件或HTML文件。
• XSL屬於一種樣式程式語言,其提供比
CSS(Cascading Style sheets)更加強大的XML文
件顯示的功能。CSS主要用來支援簡單的XML
架構,而XSL則是使用於複雜的XML架構。
11
XML軟體需求
• XML剖析器(Parser):所謂剖析為依照標籤解讀文件。電
腦本身雖看不懂XML文件內容,但是透過標籤幫助,剖析
器就可以分析文件的內容取出所需的資訊。MSXML
Parser 為微軟附在IE的剖析器,只要5.x版就擁有XML剖
析器。
• XML驗證工具:通常XML編輯和瀏覽亦會提供驗證。
• XML編輯工具:UltraEdit、 XML Notepad、XML Spy。
• XML瀏覽工具:IE 5.x可以如同瀏覽HTML文件一般瀏
覽XML文件。
12
2.建立XML文件
13
XML文件組成因子
• 元素(Element):XML元素為整個文件的主要架構,為一完整
的項目,包含了標籤、屬性、開始標籤、結尾標籤和其中
的文字。
• 屬性(Attribute):開始標籤名稱後可為標籤加上屬性名稱和
屬性值,且值要用雙引號括起來。
• 實體參考(Entity Reference):由於標籤語言本身有一些保留
符號,此時會用到實體參考。
• 註解(Comment):由<!-- -->表示
• CDATA Section和PCDATA:在Tag中包含的文字為PCDATA;
如果XML有CDATA Section,則告訴Parser不要處理此區塊
的內容。CDATA Section位於<![CDATA[ ]]>之間,通常是
用來儲存程式碼的資料。
• PI(Processing Instructions):PI允許文件包含應用程式的指
令,這些資訊告訴XML剖析器如何處理XML文件,並將這些
資訊送給應用程式。其基本格式以<? name ?>表示。
14
標準XML注意事項
• 根標籤:所有XML文件都需要一對標籤來定義文件的根
元素,其它元素都屬於此根元素之子元素。
• XML標籤可以使用中文,但英文大小寫不同
• 所有元素需要有結尾標籤
• 巢狀XML元素不可重疊
• 屬性值必須要有雙引號
15
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>
16
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
Illegal XML
<PRODUCT>
<PRODUCT>
<ID>721</ID>
<ID>
<NAME>PENTIUM 11 300</NAME>
<NAME>PENTIUM 11 300<NAME>
<PRICE>5000</PRICE>
<PRICE>5000</PRICE>
</PRODUCT>
</PRODUCT>
</ID>
17
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
18
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/>
19
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>
20
Exercise
1.booklist含有子元素book兩個
2.book含有子元素code title author price
3.Tag中包含的文字自訂
Hint:<?xml version=“1.0” encoding=“Big5”?>
21
XML文件的名稱空間(Namespace)
• 如果XML文件需要引用其它XML架構或元素,或是與其
它XML文件進行資料交換,我們必須要在XML文件宣告
名稱空間,以避免標籤名稱重複的問題。
• 為了取得唯一的標籤名稱,名稱空間使用網址的名稱和路
徑,我們稱為 URI (Universal Resource Identifier) 。例
<PRODUCT xmlns = http://www.company.com/ >
• 標籤的完整名稱: <名稱空間字頭:標籤名稱>
例如: <bk:title>
<jb:title>
亦即前面的名稱空間不同,就屬於不同的標籤。
22
名稱空間範圍
<?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>
23
3.XML語法檢查
(DTD/XML Schema)
24
DTD (Document Type Definition)
• Schema是一種XML文件內容驗證機制,主要是定義文件出
現的元素、 屬性和整份文件的架構,也就是元素擁有哪些
子元素的內容模型(Content Models) 。
• 一旦XML文件定義好DTD,在使用編輯工具建立XML文件
時,編輯工具就可以依據DTD檢查XML是否為合法的內容。
• XML1.0版的Schema預設為DTD,而XML Schema是由MS所
提出,其目的就是要取代DTD成為下一代的XML驗證機制。
25
內部DTD
<booklist>
<?xml version="1.0" encoding="Big5"?>
<book sales="Y">
<!--XML文件內部的DTD-->
<code>F0001</code>
<!DOCTYPE booklist [
<title> abc </title>
<!ELEMENT booklist (book+)>
<authorlist no="1">
<!ELEMENT book(code, title, authorlist, price)>
<author>jack1</author>
<!ATTLIST book sales (N | Y) #REQUIRED>
</authorlist>
<!ELEMENT code (#PCDATA)>
<price>580</price>
</book>
<!ELEMENT title (#PCDATA)>
<book sales="N">
<!ELEMENT authorlist (author+)>
<code>F0002</code>
<!ELEMENT author (#PCDATA)>
<title> def </title>
<!ATTLIST authorlist no CDATA #REQUIRED
<authorlist no="1">
>
<author>jack2</author>
<!ELEMENT price (#PCDATA)>
</authorlist>
]>
<price>550</price>
</book>
</booklist>
26
DTD元素宣告
• <!ELEMENT element_name (element_or_data)>
• element_name:XML元素的標籤名稱
• element_or_data:定義元素內含的資料或是其
下的子元素,如果不只一個請用「,」分隔,如
下所示:
child_element, child_element,…
27
DTD元素使用符號說明
符號
說明
+
子元素最少出現一次
*
子元素出現零或多次
?
子元素出現零或一次
|
子元素清單之一
(…)
將元素清單括起來
28
DTD元素資料
關鍵字
#PCDATA
ANY
說明
文字資料的字串,這是剖析器需要
進一步剖析的資料,因為字串可能
擁有其他XML元素,大部分的元素
資料都屬於此關鍵字
元素內容可以屬於任何資料
29
DTD元素宣告
<!ATTLIST element_name attribute_name attribute_type default_value>
‧element_name:屬性所屬的XML元素名稱
‧attribute_name:屬性名稱
‧attribute_type:指定屬性值的種類
30
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> 錯誤
31
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>
32
XML Schema (cont.)
• 元素Schema間之子元素就是在定義Instance文件的XML
元素,常用的XML元素如下表所示:
元素
schema
simpleType
說明
XML Schema文件的根元素
使用者自己定義的資料型態
Element
宣告XML元素
complexType 宣告XML子元素
attribute
宣告元素屬性
33
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等。
34
XML Schema (cont. 3)
(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代表為數字
35
4.XSLT、XPath
轉換XML文件
36
XSL(eXtensible Style Language)
• XML文件本身只是在定義資料的內容,如果需要顯示XML元素的
資料,我們需要描述XML元素如何被顯示,這種語言稱為樣式語
言。 CSS只是其中一個選擇,XSL才是配合XML的樣式語言。
• XSL主要功能分為兩部分:
1.轉換XML文件:將XML文件架構轉換成另一個XML架構的文件,
或是HTML文件。(稱為XSLT;XSL Transformations)目前支援
XML的瀏覽程式不多,所以XSLT的角色即相當重要。
2.格式化XML文件:格式化元素內容樣式,以便顯示出XML文件。
37
XSLT是如何工作?
• XSLT簡單的說,即是將一棵來源為XML的樹,套用XSLT轉
換範本樹,修改一些節點結構,最後產生另一棵不同架
構的樹狀結構。
38
XPath Language
•因為XSLT屬於一種範本驅動的轉換,也就
是說需要在XML文件正確描述XML元素的
位置。XML文件能夠轉換成為一個樹狀結
構,如何找到指定節點的定位指令就是
XPath的目的。
39
XPath 的位置路徑
運算子
/
//
.
..
*
@
[]
|
說明
子元素路徑運算子,指出元素和子元素的節點
遞迴下層路徑運算子,指出所有在節點下層的符合節點,不
只是子節點,可以是下下層的子節點
目前的節點
父節點
萬用字元,目前元素的所有子元素和屬性
元素的屬性
指出節點的索引,內容為指定的屬性或元素,也可以加上條
件指令
組合多個位置路徑,每個位置路徑使用使運算子分隔
40
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>
41
XPath樹狀結構
root
<?xml?>
glossary
item
item
item
title(version)
title(version)
title(version)
definition
definition
definition
text
title
text
text
text
text
title
text
42
節點索引條件
•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下的所有元素
43
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>
44
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
45
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>
hello.xml
<xsl:value-of select="hello"/>
<?xml version="1.0" encoding="Big5"?>
</body>
<?xml-stylesheet type="text/xsl"
</html>
href="hello.xsl"?>
</xsl:template>
<hello>這是一個測試!!</hello>
</xsl:stylesheet>
46
XSL範例2
(LCD2.xsl)
47
XSL範例3
(LCD.xsl)
48
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/
49
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
50