820 likes | 919 Views
第 14 章 XML技術的應用. 14-1 XML 資源連結 -XLink 與 XPointer 14-2 新世代的 Web 表單 -XForms 14-3 XML 資料查詢 -XQuery 14-4 定義 Web 資源 -RDF 14-5 新聞聚合服務 -RSS. 14-1 XML資源連結-XLink與XPointer. XLink 的基礎 簡單連結與資源描述 連結行為 擴充連結 XPointer 定位語言. XLink 的基礎 -1.
E N D
第14章 XML技術的應用 • 14-1 XML資源連結-XLink與XPointer • 14-2 新世代的Web表單-XForms • 14-3 XML資料查詢-XQuery • 14-4 定義Web資源-RDF • 14-5 新聞聚合服務-RSS
14-1 XML資源連結-XLink與XPointer • XLink的基礎 • 簡單連結與資源描述 • 連結行為 • 擴充連結 • XPointer定位語言
XLink的基礎-1 • 「XLink」(XML Linking Language)是一種在XML文件建立超連結的語言,能夠連結一系列XML文件的資源,在2001年6月27日成為W3C的建議規格,目前版本是1.0版。 • 不同於HTML語言是使用<a>標籤建立超連結,在XML文件的任何元素都可以擁有XLink行為來連結URI資源,URI可以是整份XML文件,或是使用XPointer指出的部分內容。 • XLink支援類似HTML超連結的簡單連結(Simple Links),和功能更加強大的擴充連結(Extended Links)。
XLink的基礎-2 XLink的基本語法 • XML文件並沒有固定標籤來定義XLink,事實上,任何XML元素都可以擁有XLink行為,其基本語法,如下所示: <tag_name xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="..." xlink:href="..." xlink:show="..." xlink:actuate="..."> ....... </tag_name>
XLink的基礎-3 • 我們是使用XLink屬性來定義XML元素擁有XLink功能,相關屬性的說明,如下表所示:
XLink的基礎-4 • 例如:XML元素isp是擁有連結中華電信HiNet功能的XLink元素,如下所示: <isp xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://www.hinet.net">HiNET</isp> • <isp>開始標籤定義XLink的W3C預設名稱空間,xlink:type屬性值simple,表示為簡單連結(Simple Links),xlink:href屬性是URI資源,以此例就是URL網址。
XLink的基礎-5 XLink屬性的DTD • XML文件如果擁有DTD,對於這些擁有XLink行為的元素,其DTD指令,如下所示: <!ELEMENT isp (#PCDATA) > <!ATTLIST isp xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink" xlink:type (simple) #FIXED "simple" xlink:href CDATA #REQUIRED >
XLink的基礎-6 支援XLink規格的瀏覽程式 • 目前支援XLink規格的瀏覽程式並不多,Internet Explorer和Opera瀏覽程式完全不支援XLink。最新版的Mozilla和Netscape瀏覽程式也只支援部分XLink規格,主要是XLink簡單連結部分的規格。
簡單連結與資源描述-1 簡單連結 • 簡單連結類似HTML超連結<a>標籤的連結功能,可以連結單一資源,從一個來源文件跳至目的文件,目的文件可以是同一份文件的不同位置,或是另一份文件,如下圖所示:
簡單連結與資源描述-2 • 在XML元素指定xlink:type屬性值為simple,就表示此XML元素是簡單連結,如下所示: <isp xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://www.hinet.net"> HiNET </isp> • 上述isp元素支援XLink簡單連結,其URI是中華電信HiNET的URL網址。
簡單連結與資源描述-3 描述連結的資源 • 在XML文件的連結元素可以進一步使用xlink:title和xlink:role屬性來描述連結的資源。各屬性的說明,如下表所示:
簡單連結與資源描述-4 • 例如:在search連結元素新增xlink:title和xlink:role屬性來描述連結資源,如下所示: <search xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://tw.yahoo.com/" xlink:title="Yahoo Search" xlink:role="http://tw.help.yahoo.com/"> Yahoo!搜尋 </search>
簡單連結與資源描述-5 • xlink:title和xlink:role屬性的DTD宣告,如下所示: xlink:title CDATA #IMPLIED xlink:role CDATA #IMPLIED
連結行為-1 • 在XLink連結元素擁有2個選項屬性xlink:show和xlink:actuate,可以定義XLink的連結行為,也就是決定如何顯示連結資源和在那種情況下來連結資源。 • 連結行為xlink:show和xlink:actuate屬性的DTD宣告,如下所示: xlink:show ( new | replace | embed | other | none ) #IMPLIED xlink:actuate ( onRequest | onLoad | other | none ) #IMPLIED
連結行為-2 xlink:show屬性 • XLink的xlink:show屬性可以描述當啟動連結時,例如:按下連結時,如何顯示連結的資源。其屬性值共有5種,如下表所示:
連結行為-3 • 例如:在isp元素新增xlink:show屬性決定連結行為,如下所示: <isp xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://www.seed.net.tw" xlink:show="embed"> SeedNet </isp> • 上述xlink:show屬性值embed,表示在目前顯示的資源插入連結的資源。
連結行為-4 xlink:actuate屬性 • XLink的xlink:actuate屬性可以描述何時或在什麼情況下來啟動連結。其屬性值共有4種,如下表所示:
連結行為-5 • 例如:在search元素新增xlink:actuate屬性決定連結行為,如下所示: <search xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://tw.yahoo.com/" xlink:title="Yahoo!" xlink:role="http://tw.help.yahoo.com/" xlink:actuate="onRequest"> Yahoo!搜尋 </search>
擴充連結-1 什麼是擴充連結 • 擴充連結是使用一個連結即可結合多個不同資源,屬於一種多方向連結(Multidirectional Links)。以資料結構來說,擴充連結是將資源視為頂點(Vertices),資源間連結的邊線(Edges)組成的圖形(Graph),如下圖所示:
擴充連結-2 擴充連結的語法 • 擴充連結的語法和簡單連結十分相似,其差異只在連結元素的xlink:type屬性值是extended,如下所示: <courseload xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="extended"> ……. </courseload>
擴充連結-3 • 參與資源為其子元素score、person和course,分為本機資源的score成績元素,如下所示: <score xlink:type="resource" xlink:label="Score">85</score> • 上述xlink:type屬性值resource表示是本機資源,xlink:label屬性值是資源標籤,主要的目的是建立之後的連結路徑。
擴充連結-4 • 其它參與的資源都是遠端資源,其xlink:type屬性值是locator,如下所示: <person xlink:type="locator" xlink:href="students/joe_chen.xml" xlink:label="Student"/> <person xlink:type="locator" xlink:href="profs/smith_chen.xml" xlink:label="Professor"/> <course xlink:type="locator" xlink:href="courses/cs201.xml" xlink:label="CS201"/>
擴充連結-5 連結路徑 • 連結路徑(Arcs)定義擴充連結參與資源的走訪規則,其xlink:type屬性值是arc,使用xlink:from屬性定義從那個資源來,和xlink:to屬性到那個資源去,如下所示: <connection xlink:type="arc" xlink:from="Student" xlink:to="Score" xlink:show="new" xlink:actuate="onRequest"/>
擴充連結-6 行內與行外連結 • 行內連結(Inline Links):連結元素的內容可以作為連結資源來使用,大部分簡單連結和HTML的<a>標籤都是行內連結。 • 行外連結(Out-of-line Links):連結元素並不能作為任何參與連結資源來使用,取而代之的是將連結儲存在其它文件,稱為連結庫(Linkbase)。XLink擴充連結同時支援行內和行外連結。
XPointer定位語言-1 • 「XPointer」(XML Pointer Language)能夠連結XML文件的指定部分,它不是用來查詢XML文件,而是使用XPath位置路徑在XML文件內進行定址,以便作為XLink連結部分內容的依據。 • XPointer 1.0版是在2001年9月11日成為W3C的建議規格,XPointer觀念源自HyTime和「TEI」(Text Encoding Initiative),提供XML文件資源的元素走訪語法,目前對於XML文件的瀏覽來說,已經和XSLT共同支援XPath語法。
XPointer定位語言-2 XPointer語法 • XPointer能夠讓XLink連結XML文件的指定部分,使用「#」符號新增至xlink:href屬性值的最後,其基本語法如下所示: #xpointer(XPath位置路徑) • 上述語法在「#」符號後是xpointer()函數,其參數是XPath位置路徑。
XPointer定位語言-3 XPointer範例 • XPointer簡單的說是使用XPath位置路徑來在XML文件中進行定位,例如:指向id屬性值s2,如下所示: #xpointer(id("s2")) • 上述程式碼使用id()函數取得id屬性值s2的元素,其指向的XML元素,如下所示: <student id="s2"> <name>陳會安</name> <score>85</score> </student>
XPointer定位語言-4 • 我們可以在XLink連結元素的xlink:href屬性值使用XPointer運算式,如下所示: xlink:href="http://localhost/students.xml#xpointer(id('s2'))" • 上述id()函數稱為ID指標,擁有縮寫指標(Shorthand Pointer)寫法,如下所示: • xlink:href="http://localhost/students.xml#s2"
14-2 新世代的Web表單-XForms • 什麼是XForms • XForms資料模型 • XForms的使用介面 • 送出XForms表單
什麼是XForms-1 XForms的基礎 • XForms是一種與平台和裝置無關的表單,使用XML語法來建立Web介面的表單。XForms使用XML來定義表單資料、儲存和傳送表單資料,它將表單資料和使用介面分開,使用XForms資料模型來描述資料,使用介面來顯示輸入介面,如下所示: • XForms資料模型(XForms Model):描述表單資料和其邏輯架構,也就是定義表單內容是什麼?包含在那些資料? • XForms使用介面(XForms User Interface):顯示和輸入資料的GUI介面,定義表單輸入介面顯示的欄位。
什麼是XForms-2 XForms處理器 • XForms處理器(XForms Processor)通常是內建在瀏覽程式,以便處理XForms資料與顯示介面,在本節筆者使用JavaScript開發的GNU免費XForms處理器FormFaces,不過,FormFaces只支援英文表單內容。
XForms資料模型-1 • XForms資料模型是用來描述表單資料,定義表單收集資料的XML文件實例,如下所示: <xf:model> <xf:instance> <member xmlns=""> <name>Joe Chen</name> <pass/> <city>Taipei</city> <color>red</color> <height>176</height> </member> </xf:instance> </xf:model>
XForms資料模型-2 • 當使用者在XForms表單輸入欄位資料且送出表單後,XForms處理器就會將表單內容填入xf:instance的子元素來建立XML文件,如下所示: <member> <name>Mary Wang</name> <pass>123456</pass> <city>MaoLi</city> <color>blue</color> <height>158</height> </member>
XForms的使用介面-1 • XForms使用介面使用XForms控制項來建立輸入資料的GUI介面,在控制項是使用XPath連繫資料模型的表單資料,如下所示: <xf:input ref="name"> <xf:label>Name:</xf:label> </xf:input> • 上述ref屬性使用XPath位置路徑來連繫資料模型的元素,以此例是name元素。
XForms的使用介面-2 Input控制項 • XForms的Input控制項可以輸入單行文字內容,如下所示: <xf:input ref="name"> <xf:label>Name:</xf:label> </xf:input> • 上述控制項使用xf:label子元素建立欄位說明文字,ref屬性參考name元素值。
XForms的使用介面-3 Secret控制項 • XForms的Secret控制項也是輸入單行文字內容,不過輸入內容會改以符號取代顯示,以便輸入密碼等需隱藏的資料,如下所示: <xf:secret ref="pass"> <xf:label>Pass:</xf:label> </xf:secret> • 上述控制項使用ref屬性參考pass元素值。
XForms的使用介面-4 Output控制項 • XForms的Output控制項可以顯示資料模型的元素內容,如下所示: <xf:output ref="name"> <xf:label>Output:</xf:label> </xf:output> • 上述控制項使用ref屬性參考name元素值,也就是在表單顯示name元素值。
XForms的使用介面-5 Textarea控制項 • XForms的Textarea控制項可以輸入多行文字內容,如下所示: <xf:textarea ref="city"> <xf:label>City:</xf:label> </xf:textarea> • 上述控制項使用ref屬性參考city元素值。
XForms的使用介面-6 Select1控制項 • XForms的Select1控制項就是下拉式功能表,它是只能選擇其中之一的單選題,如下所示: <xf:select1 ref="color"> <xf:label>Color:</xf:label> <xf:item> <xf:label>Red</xf:label> <xf:value>red</xf:value> </xf:item> …….. </xf:select1>
XForms的使用介面-7 Select控制項 • XForms的Select控制項是清單方塊的可複選控制項,如下所示: <xf:select ref="color"> <xf:label>Select Colors:</xf:label> <xf:item> <xf:label>Red</xf:label> <xf:value>red</xf:value> </xf:item> ……… </xf:select>
XForms的使用介面-8 Range控制項 • XForms的Range控制項是用來選擇一個範圍中的值,目前FormFaces並不支援此控制項,如下所示: <xf:range ref="height" start="50" end="250" step="2"> <xf:label>Height:</xf:label> </xf:range> • 上述控制項使用ref屬性參考height元素值,可以選擇50~250之間的值,其增量是2。
送出XForms表單-1 • 送出XForms表單是將表單內容送至伺服端程式來進行處理,在XForms資料模型是使用xf:submission元素來定義如何送出表單資料,如下所示: <xf:model> <xf:instance> ……… </xf:instance> <xf:submission id="login1" action="Ch14-2-2.asp" method="post"/> </xf:model>
送出XForms表單-2 • 在XForms使用者介面是使用Submit控制項送出XForms表單,如下所示: <xf:submit submission="login1"> <xf:label>Submit</xf:label> </xf:submit> • 上述xf:submit元素的submission屬性就是參考資料模型的xf:submission元素,所以其值都是login1。
14-3 XML資料查詢-XQuery • 什麼是XQuery語言 • 第一個XQuery程式 • XQuery的基本語法 • FLWOR運算式 • 條件運算式
什麼是XQuery語言-1 • XQuery是一種功能強大和容易使用的XML資料查詢語言,如同關聯式資料庫提供的標準SQL查詢語言,XQuery就是XML資料的查詢語言。 • 換句話說,XQuery不但可以查詢XML文件的資料,我們一樣可以使用XQuery語言來查詢目前主要資料庫引擎建立的資料庫,例如:IBM、Oracle和SQL Server 2005等。 • XQuery是由W3C的XML Query工作小組所開發和定義一種查詢XML的語言,XQuery 1.0和XPath 2.0使用相同的資料模型(Data Model)和支援相同的函數和運算子。
什麼是XQuery語言-2 XQuery運算式語言 • XQuery語言是一種強調型態(Strongly-typed)語言,其資料型態源於XML Schema,它和XPath 2.0使用相同的資料模型。事實上,XQuery是一種運算式語言,XQuery程式就是運算式集合,執行XQuery程式就是執行運算式集合,以便產生其運算結果。 • XQuery是由路徑運算式(Path Expressions,即XPath)、FLWOR運算式、條件運算式和XQuery函數組成。
什麼是XQuery語言-3 XQuery測試工具 • 在本節的XQuery測試工具是Altova公司的AltovaXML 2005,這是一個命令列工具,包含Altova XML驗證器、Altova XSLT 1.0引擎、Altova XSLT 2.0引擎和Altova XQuery 1.0引擎,可以執行XML文件驗證、XSLT轉換和XQuery查詢。
第一個XQuery程式-1 01: (: XQuery程式: Ch14-3-1.xq :) 02: <items> 03: { 04: for $book in doc("Ch14-3.xml") /booklist/book 05: where $book/price > 600 06: order by $book/title 07: return $book/title 08: } 09: </items>
第一個XQuery程式-2 • FLWOR運算式各子句的說明,如下所示: • for子句:在載入XML文件Ch14-3.xml後,選取booklist根元素下的所有book子元素,並且將它指定給變數$book。 • where子句:限制只選出price子元素值大於600的book元素 • order by子句:定義查詢結果的排序元素,以此例是以title元素進行排序。 • return子句:傳回FLWOR運算式查詢結果的title元素。
XQuery的基本語法-1 • XQuery語言並不是使用XML語法,其基本語法規則,如下所示: • XQuey語言區分英文字母大小寫,Items、items和ITEMS是不同的名稱,通常是使用小寫英文字母。 • XQuery程式碼的元素、屬性、函數和變數名稱必須是合法的XML名稱,可以加上名稱空間的字頭。