并不是使用XML语法课件_第1页
并不是使用XML语法课件_第2页
并不是使用XML语法课件_第3页
并不是使用XML语法课件_第4页
并不是使用XML语法课件_第5页
已阅读5页,还剩99页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

WhatisXQuery?

XQueryisthelanguageforqueryingXMLdataXQueryforXMLislikeSQLfordatabasesXQueryisbuiltonXPathexpressionsXQueryisdefinedbytheW3CXQueryissupportedbyallthemajordatabaseengines(IBM,Oracle,Microsoft,etc.)XQuerywillbecomeaW3Cstandard-anddeveloperscanbesurethatthecodewillworkamongdifferentproductsWhatisXQuery?XQ

WhyXQueryXML的發展趨勢使愈來愈多的資料以XML為標準格式,如何從”資料”轉變成有價值的”資訊”是另一波XML發展的重點。要對資料作有效的管理需透過資料庫管理系統的應用,但由於XML的資料格式和傳統資料不同,不再適用傳統的資料庫及查詢語法,因此W3C依據XML的特性發展出XML的查詢語言,以方便對XML資料的管理及處理。

XPath的不足-

XPath是專門針對XML文件中定址(addressing)使用的語言,也就是用於找出XML文件中的資料元素,其當初設計目的是為了供XSLT、XLink及XPointer使用。WhyXQueryXML

ExamplesofUsesXQuerycanbeusedto:ExtractinformationtouseinaWebServiceGeneratesummaryreportsTransformXMLdatatoXHTMLSearchWebdocumentsforrelevantinformationExamplesofUsesXQu

XQueryHistory

1998年,W3C公佈XML1.0版規格1998年十二月,W3C成立QueryLanguageWorkshop

1999年九月,W3C成立XMLQueryWorkingGroup1999年十一月,XPath1.0成為W3C的標準2001年六月,W3C釋出XQuery1.0草案規格(workingdraft)

2001年十二月,XQuery1.0規格第二版2002年十一月,W3C釋出最新版XQuery1.0以及XPath2.0相關文件2007年一月,成為W3C

Recommendation2010年12月,XQuery1.0XQueryHistory

XQuery的基本語法XQuery並不是使用XML語法,XQuery程式是一個巢狀的運算式集合。XQuery是由PathExpressions、FLWOR運算式、條件運算式和

XQuery函數所組成。XQueryiscase-sensitive.XQueryelements,attributes,andvariablesmustbevalidXMLnames.AnXQuerystringvaluecanbeinsingleordoublequotes.AnXQueryvariableisdefinedwitha$followedbyaname,e.g.$bookstore.XQuerycommentsaredelimitedby(:and:),e.g.(:XQueryComment:).XQuery的基本語法XQueryHowtoSelectNodesFrom

"books.xml"?

XQueryusesfunctionstoextractdatafromXMLdocuments.Thedoc()functionisusedtoopenthe"books.xml"file:doc("books.xml")Books.xmlcontainsthefollowingchildelementswithinthe“book”element:

<titlelang="en"><author><year><price>HowtoSelectNodesFrom

Books.xml(1/2)<?xmlversion="1.0"encoding="ISO-8859-1"?><bookstore><bookcategory="COOKING"><titlelang="en">EverydayItalian</title><author>GiadaDeLaurentiis</author><year>2005</year><price>30.00</price></book><bookcategory="CHILDREN"><titlelang="en">HarryPotter</title><author>JK.Rowling</author><year>2005</year><price>29.99</price></book>Books.xml(1/2

Books.xml(2/2)<bookcategory="WEB"><titlelang="en">XQueryKickStart</title><author>JamesMcGovern</author><author>PerBothner</author><author>KurtCagle</author><author>JamesLinn</author><author>VaidyanathanNagarajan</author><year>2003</year><price>49.99</price></book><bookcategory="WEB"><titlelang="en">LearningXML</title><author>ErikT.Ray</author><year>2003</year><price>39.95</price></book></bookstore>Books.xml(2/2)

PathExpressions

XQueryusespathexpressionstonavigatethroughelementsinanXMLdocument.Thefollowingpathexpressionisusedtoselectallthetitleelementsinthe"books.xml"file:doc("books.xml")/bookstore/book/title(/bookstoreselectsthebookstoreelement,/bookselectsallthebookelementsunderthebookstoreelement,and/titleselectsallthetitleelementsundereachbookelement)TheaboveXQuerywillextractthefollowingtitles:<titlelang="en">EverydayItalian</title><titlelang="en">HarryPotter</title><titlelang="en">XQueryKickStart</title><titlelang="en">LearningXML</title>PathExpressionsXQ

UseofPredicatesUseofPredicates

XQueryFLWORExpressions

FLWORisanacronymfor"For,Let,Where,Orderby,Return".Asinfor$xindoc("books.xml")/bookstore/book

where$x/price>30

return$x/titleTheforclauseselectsallbookelementsunderthebookstoreelement

intoavariablecalled$x.Thewhereclauseselectsonlybookelementswithapriceelementwithavaluegreaterthan30.Theorderby

clausedefinesthesort-order.Willbesortedbythetitleelement.Thereturnclausespecifieswhatshouldbereturned.Hereitreturnsthetitleelements.XQueryFLWORExpressions

AnotherExampledoc("books.xml")/bookstore/book[price>30]/titleThefollowingFLWORexpressionwillselectexactlythesameasthepathexpressionabove:for$xindoc("books.xml")/bookstore/book

where$x/price>30

return$x/titleTheresultswillbe:

<titlelang="en">XQueryKickStart</title><titlelang="en">LearningXML</title>AnotherExampledo

AnXQueryExample(1/2)根元素:第2~9列的items是查詢結果XML文件的根元素,在本例執行XQuery查詢結果的根元素都是items,如下所示:02:<items>03:{04:for$bookindoc("bookstore.xml")/bookstore/book05:where$book/price>60006:orderby$book/title07:return$book/title08:}09:</items>第3~8列的大括號之間才是真正的XQuery程式碼。AnXQueryExample(1/2)AnXQueryExample(2/2)FLWOR運算式:第4~7列是XQuery的FLWOR運算式,類似SQL語言Select/Where指令,屬於XQuery程式執行查詢功能的程式區塊,如下所示:04:for$bookindoc("bookstore.xml“)/bookstore/book05:where$book/price>60006:orderby$book/title07:return$book/titleAnXQueryExample(2/2)FL

XQueryDataModelXQuery資料模型(DataModel)和XPath2.0相同,都是將XML文件視為一棵邏輯上的樹狀結構,將XML文件視為各種不同節點的集合。XQuery資料模型是節點(Nodes)、原子值(AtomicValues)和項目(Items)組成的類別架構。XQueryDataModelXQueryFLWORExpressions

(1/4)原始文件:

<bib>

<books>

<book>

<title>TCP/IPIllustrated</title>

<author>Stevens</author>

<publisher>Addison-Wesley</publisher>

</book>

<book>

<title>AdvancedUnixProgramming</title>

<author>Stevens</author>

<publisher>Addison-Wesley</publisher>

</book>

<book>

<title>DataontheWeb</title>

<author>Abiteboul</author>

<author>Buneman</author>

<author>Suciu</author>

</book>

<books>

</bib>FLWORExpressions(1/4)原始文FLWORExpressions(2/4)XQuery:

<authlist>

{

for$booksindoc("bib.xml")//books

for$aindistinct-values($books//author)

orderby$a

return

<author>

<name>

{$a/text()}

</name>

<books>

{

for$bin$books//book[author=$a]

orderby$b/title

return$b/title

}

</books>

</author>

}

</authlist>FLWORExpressions(2/4)XQuFLWORExpressions(3/4)結果

(tobecontinued):

<authlist>

<author>

<name>Abiteboul</name>

<books>

<title>DataontheWeb</title>

</books>

</author>

<author>

<name>Buneman</name>

<books>

<title>DataontheWeb</title>

</books>

</author>

FLWORExpressions(3/4)結果FLWORExpressions(4/4)結果(續):

<author>

<name>Stevens</name>

<books>

<title>TCP/IPIllustrated</title>

<title>AdvancedUnixProgramming</title>

</books>

</author>

<author>

<name>Suciu</name>

<books>

<title>DataontheWeb</title>

</books>

</author>

</authlist>FLWORExpressions(4/4)結果(

XQuerySyntax–Rules(1/5)XQuery語言並不是使用XML語法,其基本語法規則,如下所示:XQuey語言區分英文字母大小寫,Items、items和ITEMS是不同的名稱,通常是使用小寫英文字母。XQuery程式碼的元素、屬性、函數和變數名稱必須是合法的XML名稱,可以加上名稱空間的字首。XQuerySyntax–Rules(

XQuerySynatex–DataType(2/5)XQuery的基本資料型態和XMLSchema內建資料型態相同,如下所示:布林(Boolean)資料型態:布林值true或false。數字(Number)資料型態:包含整數和浮點數值。字串(Strings)資料型態:使用單引號或雙引號括起的字元集合。日期時間資料型態:代表日期、時間和期間。XML相關的資料型態:例如:QName等資料型態。XQuerySynatex–DataTypXQuerySyntax–VariablesandLiterals(3/5)在XQuery程式碼使用的變數並不需事先宣告,變數是以「$」符號開始的合法XML名稱。

例如:XQuery變數範例如下:$x、$y、$name、$bookXQuery的文字值(LiteralValues)主要分為三種型態,如下所示:字串(Strings):XQuery的字串可以使用單引號或雙引號括起的字元集合。例如:"P679"。數字(Numbers):XQuery的數字可以是整數或浮點數。例如:1、2、34.5。建構型態:使用函數建構的特殊型態。例如:日期xs:date("2006-12-31")。XQuerySyntax–Variablesand

XQuerySyntax–Comparators(4/5)XQuery1.0和XPath2.0使用相同的運算子,XQuery的比較運算子分為兩種,如下所示:一般比較(GeneralComparisons):一般比較運算子有=、!=、<、<=、>、>=,可以用來比較多個項目。值比較(ValueComparisons):值比較運算子有eq、ne、lt、le、gt、ge,和一般比較的差異在於它是比較單獨值,也就是說,運算元一定是原子值(AtomicValue),或包含原子值的節點。XQuerySyntax–Comparators(

XQuerySyntax–Comments(5/5)在XQuery程式碼可以使用XQuery的註解文字,這是「(:」開頭到「:)」之間的字串,如下所示:(:程式範例:Ch7-2-1.xq:)註解文字不可以出現在查詢結果的XML文件之中。因為XQuery查詢結果是一份XML文件或XHTML文件,所以也可以使用XML文件的註解,如下所示:<!--文件範例:Bookstore.xml-->XQuerySyntax–Comments(letandreturnclause–letclauseFLWOR運算式的let子句可以指定XQuery變數的值,return子句傳回查詢結果。FLWOR運算式let子句指定XQuery變數的值可以是項目或循序,如下所示:let$book:=doc("bookstore.xml")//book[1]let$title:="Java2程式設計範例教本"let$list:=(1to5)let$price:=650letandreturnclause–letcl

letandreturnclause–return(1/4)FLWOR運算式return子句可以輸出查詢結果,如果是路徑運算式,就是輸出選取的節點內容,如下所示:let$book:=doc("bookstore.xml")//book[1]return$book/@code$book變數是第1個book元素節點,return子句傳回book元素的code屬性節點。letandreturnclause–reletandreturnclause–return(2/4)如果輸出的XQuery變數是文字值,我們可以在return子句加上標籤來建立元素節點,如下所示:let$title:="Java2程式設計範例教本"return<title>{$title}</title>$title變數值是字串,大括號括起變數$title,表示取出變數內容,再加上標籤就可以建立title元素節點,如下所示:<title>Java2程式設計範例教本</title>letandreturnclause–returletandreturnclause–return(3/4)變數值如果是循序,例如:使用return子句輸出變數$list,如下所示:let$list:=(1to5)return<num>{$list}</num>return子句只會輸出1個num元素,如下所示:<num>12345</num>letandreturnclause–retuletandreturnclause–return(4/4)return子句還可以合併多個運算式成為一個循序,然後輸出循序的內容,如下所示:let$price:=650return(<listprice>{$price}</listprice>,<price>{$price*0.8}</price>)「(」和「)」括起的是一個循序,輸出的內容包含兩個元素listprice和price,price元素值是變數$price的八折。letandreturnclause–retu

forclause–basicforclause(1/6)基本for子句是以迴圈方式一一取出循序的項目,通常我們是使用路徑運算式來取出循序。例如:取出bookstore.xml文件的所有price元素節點,如下所示:for$priceindoc("bookstore.xml")//book/pricereturn$price運算式在in指令後是路徑運算式,取得所有price元素節點的循序,在in指令前是變數$price,指定成每執行一次迴圈所取得的項目,return子句可以傳回變數內容,也就是每一個price元素。forclause–basicforclauseforclause–countingexpression(2/6)在for子句可以加上at指令的計數變數,以便計算迴圈總共執行幾次。例如:在bookstore.xml文件取得所有book元素節點,並且傳回每一個節點的計數,如下所示:for$bookat$iindoc("bookstore.xml")//bookreturn(<num>{$i}</num>,$book/title)運算式每執行一次,變數$i就加1,return子句傳回的num元素就是變數$i的值。forclause–countingexpressiforclause–rangeexpression(3/6)FLWOR運算式的for子句可以如同程式語言的迴圈敘述建立範圍運算式。例如:執行1~3範圍的for子句,如下所示:for$iin(1to3)return<count>{$i}</count>運算式在in指令後的是自定循序,即1~3,換句話說,變數$i的值就是1~3,所以return子句傳回的就是3個count元素,其值也是1~3。forclause–rangeexpressionforclause–multiplefor(4/6)FLWOR運算式允許同時使用多個for子句,每個子句使用「,」符號分隔,例如:兩個for子句的範圍運算式,如下所示:for$xin(1,2),$yin(5,6)return<eval>x={$x}y={$y}</eval>運算式一共有2個範圍運算式,類似巢狀迴圈,可以建立4個eval元素。forclause–multiplefor(4/forclause–ResultsinHTMLlist(5/6)<ul>

{

for$xindoc("books.xml")/bookstore/book/title

orderby$x

return<li>{$x}</li>

}

</ul>Output:

<ul>

<li><titlelang="en">EverydayItalian</title></li>

<li><titlelang="en">HarryPotter</title></li>

<li><titlelang="en">LearningXML</title></li>

<li><titlelang="en">XQueryKickStart</title></li>

</ul>forclause–ResultsinHTMLlforclause–ResultsinHTMLlist(6/6)<ul>

{

for$xindoc("books.xml")/bookstore/book/title

orderby$x

return<li>{data($x)}</li>

}

</ul>Output:

<ul>

<li>EverydayItalian</li>

<li>HarryPotter</li>

<li>LearningXML</li>

<li>XQueryKickStart</li>

</ul>forclause–ResultsinHTMLl

whereclause–singlecondition(1/2)單一條件的where子句只有一個條件運算式,例如:過濾price元素值需要大於600,如下所示:for$priceindoc("bookstore.xml")//book/pricewhere$price>600return$pricewhere子句只有當$price>600值為true時,才會輸出return子句的元素。whereclause–singleconditwhereclause–multipleconditions(2/2)在where子句可以使用and和or運算式建立包含多個子條件的運算式,如下所示:for$bookat$iindoc("bookstore.xml“)//bookwherestarts-with($book/title,"P")and$book/price>=600return(<num>{$i}</num>,$book/title)where子句使用and連接兩個條件運算式,第1個是XQuery函數starts-with()檢查書名是否是"P"開頭,第2個運算式過濾price元素大於等於600。whereclause–multiplecondit

orderbyclause在FLWOR運算式的orderby子句,可以指定輸出結果的排序方式。例如:指定輸出結果使用book的title子元素值進行排序,如下所示:for$bookindoc("bookstore.xml")//bookorderby$book/titlereturn$book/title運算式的orderby子句指定使用title元素進行排序。orderbyclause在

DistinctOutput在FLWOR運算式的for子句,可以使用XQuery函數distinct-values()指定輸出結果沒有重複值。例如:bookstore.xml文件的price元素擁有重複值,我們可以使用函數來輸出沒有重複值的結果,如下所示:let$books:=doc("bookstore.xml")//bookfor$pindistinct-values($books/price)return<price>{$p}</price>for子句使用distinct-values()函數顯示沒有重複的值,也就是刪除重複的price元素值。DistinctOutpu

ConditionalOperationsXQuery語言也支援if/then/else條件運算式,如果if的條件為true,就執行then之後的運算式,否則執行else之後的運算式,如下所示:for$bookindoc("bookstore.xml")//bookreturnif($book/@code="P697")then<newtitle>{data($book/title)}</newtitle>else$book/titleConditionalOper

CreateaNewElement在XQuery路徑運算式雖然只能輸出查詢結果的XML元素與屬性,不過,FLWOR運算式的return子句,就可以新增XML或XHTML元素,如下所示:return<li>{data($book/title)}</li>return子句新增XHTML的<li>標籤,使用data()函數取出title元素內容來新增XHTML元素。CreateaNewElement

CreatingaNewAttributeFLWOR運算式的return子句可以新增XML或XHTML元素的屬性,如下所示:return<liclass="{data($book/@code)}">{data($book/title)}</li>return子句不只新增XHTML的<li>標籤,還新增class屬性,其值是XML元素book的code屬性值。CreatingaNewAttriJoinOperation–usingPredicates在FLWOR運算式可以使用多重for子句,配合return

來執行合併查詢。例如:在Order.xml查詢dept屬性為"CS"的訂單項目,並且使用合併查詢來查詢該項目在Bookstore.xml的書名,如下所示:

let$order:=doc("Order.xml")let$bookstore:=doc("Bookstore.xml")for$itemin$order//item[@dept="CS"],$bookin$bookstore//book[@code=$item/@code]return<itemcode="{$item/@code}"><title>{data($book/title)}</title><quantity>{data($item/@quantity)}</quantity></item>JoinOperation–usingPredicaJoinOperation–usingwhereclause在FLWOR運算式也可以使用多重for子句,配合where子句來執行合併查詢。在Order.xml查詢dept屬性為"CS"的訂單項目,並且使用合併查詢來查詢該項目在Bookstore.xml的書名,如下所示:

let$order:=doc("Order.xml")let$bookstore:=doc("Bookstore.xml")for$itemin$order//item[@dept="CS"],$bookin$bookstore//bookwhere$item/@code=$book/@codereturn<itemcode="{$item/@code}"title="{$book/title}"quantity="{$item/@quantity}"/>JoinOperation–usingwherec

ExternalJoinOperation外部合併查詢是查詢第一份XML文件的全部項目,但是在第二份XML文件只取出存在的元素。在XQuery程式是使用兩個FLWOR運算式來執行外部合併查詢。ExternalJoinOperation外ExternalJoinOperation–Example例如:顯示Bookstore.xml所有圖書資料,但是只顯示Discount.xml文件中擁有折扣元素的書價,如下所示:let$discount:=doc("Discount.xml")for$bookindoc("Bookstore.xml")//bookreturn<bookcode="{$book/@code}"><price>{for$pricein$discount//bookwhere$book/@code=$price/@codereturn$book/price*$price/discount}</price></book>ExternalJoinOperation–Exam

Grouping群組(Grouping)可以將資料進行分類,分類方式是將來源XML文件的元素或屬性值中,重複值結合起來歸成一類。例如:在Order.xml文件訂單項目的item元素是使用dept屬性來分類,以便區分學校中屬於不同科系的訂單項目,如下所示:

for$deptindistinct-values($order//item/@dept)let$item:=$order//item[@dept=$dept]return<deptcode="{$dept}">{$item}</dept>Grouping群

AggregateFunctions(1/2)聚合函數可以執行群組元素或屬性資料的計算,以便提供進一步的資料分析。例如:筆數、總和、平均、最大和最小值等。在XQuery常用的聚合函數說明,如下表所示:AggregateFunctions(1/AggregateFunctions(2/2)例如:繼續群組查詢,我們可以使用count()和sum()聚合函數顯示每一群組的計數和訂單總量,如下所示:

for$deptindistinct-values($order//item/@dept)let$item:=$order//item[@dept=$dept]return<deptcode="{$dept}"><numOfItem>{count(distinct-values($item/@code))}</numOfItem><totalQuantity>{sum($item/@quantity)}</totalQuantity></dept>AggregateFunctions(2/2

XQuerySelf-definedFunctionsXQuery自訂函數是以declarefunction關鍵字進行宣告,函數名稱擁有名稱空間字首。例如:minPrice()函數的宣告,如下所示:declarefunctionlocal:minPrice($priceasxs:integer?,$discountasxs:decimal?)asxs:decimal?{let$minprice:=$price*$discountreturn$minprice};XQuerySelf-definedFunctiXQueryFunctionInvocations在XQuery程式呼叫自訂函數時,函數名稱需要包含字首。例如:呼叫自訂函數local:minPrice(),如下所示:

return<price>{

local:minPrice($book/price,$price/discount)}</price>XQueryFunctionInvocations在XQXQueryBulit-inFunctionsXQuery、XPath與XSLT擁有共用的內建函數,XPath的函數也一樣可以在XQuery程式使用。在XQuery程式呼叫XQuery內建函數的方法時,並不需要加上名稱空間的字首。在元素呼叫XQuery函數在路徑運算式呼叫XQuery函數在FLWOR運算式呼叫XQuery函數XQueryBulit-inFunctions

WhatisXQuery?

XQueryisthelanguageforqueryingXMLdataXQueryforXMLislikeSQLfordatabasesXQueryisbuiltonXPathexpressionsXQueryisdefinedbytheW3CXQueryissupportedbyallthemajordatabaseengines(IBM,Oracle,Microsoft,etc.)XQuerywillbecomeaW3Cstandard-anddeveloperscanbesurethatthecodewillworkamongdifferentproductsWhatisXQuery?XQ

WhyXQueryXML的發展趨勢使愈來愈多的資料以XML為標準格式,如何從”資料”轉變成有價值的”資訊”是另一波XML發展的重點。要對資料作有效的管理需透過資料庫管理系統的應用,但由於XML的資料格式和傳統資料不同,不再適用傳統的資料庫及查詢語法,因此W3C依據XML的特性發展出XML的查詢語言,以方便對XML資料的管理及處理。

XPath的不足-

XPath是專門針對XML文件中定址(addressing)使用的語言,也就是用於找出XML文件中的資料元素,其當初設計目的是為了供XSLT、XLink及XPointer使用。WhyXQueryXML

ExamplesofUsesXQuerycanbeusedto:ExtractinformationtouseinaWebServiceGeneratesummaryreportsTransformXMLdatatoXHTMLSearchWebdocumentsforrelevantinformationExamplesofUsesXQu

XQueryHistory

1998年,W3C公佈XML1.0版規格1998年十二月,W3C成立QueryLanguageWorkshop

1999年九月,W3C成立XMLQueryWorkingGroup1999年十一月,XPath1.0成為W3C的標準2001年六月,W3C釋出XQuery1.0草案規格(workingdraft)

2001年十二月,XQuery1.0規格第二版2002年十一月,W3C釋出最新版XQuery1.0以及XPath2.0相關文件2007年一月,成為W3C

Recommendation2010年12月,XQuery1.0XQueryHistory

XQuery的基本語法XQuery並不是使用XML語法,XQuery程式是一個巢狀的運算式集合。XQuery是由PathExpressions、FLWOR運算式、條件運算式和

XQuery函數所組成。XQueryiscase-sensitive.XQueryelements,attributes,andvariablesmustbevalidXMLnames.AnXQuerystringvaluecanbeinsingleordoublequotes.AnXQueryvariableisdefinedwitha$followedbyaname,e.g.$bookstore.XQuerycommentsaredelimitedby(:and:),e.g.(:XQueryComment:).XQuery的基本語法XQueryHowtoSelectNodesFrom

"books.xml"?

XQueryusesfunctionstoextractdatafromXMLdocuments.Thedoc()functionisusedtoopenthe"books.xml"file:doc("books.xml")Books.xmlcontainsthefollowingchildelementswithinthe“book”element:

<titlelang="en"><author><year><price>HowtoSelectNodesFrom

Books.xml(1/2)<?xmlversion="1.0"encoding="ISO-8859-1"?><bookstore><bookcategory="COOKING"><titlelang="en">EverydayItalian</title><author>GiadaDeLaurentiis</author><year>2005</year><price>30.00</price></book><bookcategory="CHILDREN"><titlelang="en">HarryPotter</title><author>JK.Rowling</author><year>2005</year><price>29.99</price></book>Books.xml(1/2

Books.xml(2/2)<bookcategory="WEB"><titlelang="en">XQueryKickStart</title><author>JamesMcGovern</author><author>PerBothner</author><author>KurtCagle</author><author>JamesLinn</author><author>VaidyanathanNagarajan</author><year>2003</year><price>49.99</price></book><bookcategory="WEB"><titlelang="en">LearningXML</title><author>ErikT.Ray</author><year>2003</year><price>39.95</price></book></bookstore>Books.xml(2/2)

PathExpressions

XQueryusespathexpressionstonavigatethroughelementsinanXMLdocument.Thefollowingpathexpressionisusedtoselectallthetitleelementsinthe"books.xml"file:doc("books.xml")/bookstore/book/title(/bookstoreselectsthebookstoreelement,/bookselectsallthebookelementsunderthebookstoreelement,and/titleselectsallthetitleelementsundereachbookelement)TheaboveXQuerywillextractthefollowingtitles:<titlelang="en">EverydayItalian</title><titlelang="en">HarryPotter</title><titlelang="en">XQueryKickStart</title><titlelang="en">LearningXML</title>PathExpressionsXQ

UseofPredicatesUseofPredicates

XQueryFLWORExpressions

FLWORisanacronymfor"For,Let,Where,Orderby,Return".Asinfor$xindoc("books.xml")/bookstore/book

where$x/price>30

return$x/titleTheforclauseselectsallbookelementsunderthebookstoreelement

intoavariablecalled$x.Thewhereclauseselectsonlybookelementswithapriceelementwithavaluegreaterthan30.Theorderby

clausedefinesthesort-order.Willbesortedbythetitleelement.Thereturnclausespecifieswhatshouldbereturned.Hereitreturnsthetitleelements.XQueryFLWORExpressions

AnotherExampledoc("books.xml")/bookstore/book[price>30]/titleThefollowingFLWORexpressionwillselectexactlythesameasthepathexpressionabove:for$xindoc("books.xml")/bookstore/book

where$x/price>30

return$x/titleTheresultswillbe:

<titlelang="en">XQueryKickStart</title><titlelang="en">LearningXML</title>AnotherExampledo

AnXQueryExample(1/2)根元素:第2~9列的items是查詢結果XML文件的根元素,在本例執行XQuery查詢結果的根元素都是items,如下所示:02:<items>03:{04:for$bookindoc("bookstore.xml")/bookstore/book05:where$book/price>60006:orderby$book/title07:return$book/title08:}09:</items>第3~8列的大括號之間才是真正的XQuery程式碼。AnXQueryExample(1/2)AnXQueryExample(2/2)FLWOR運算式:第4~7列是XQuery的FLWOR運算式,類似SQL語言Select/Where指令,屬於XQuery程式執行查詢功能的程式區塊,如下所示:04:for$bookindoc("bookstore.xml“)/bookstore/book05:where$book/price>60006:orderby$book/title07:return$book/titleAnXQueryExample(2/2)FL

XQueryDataModelXQuery資料模型(DataModel)和XPath2.0相同,都是將XML文件視為一棵邏輯上的樹狀結構,將XML文件視為各種不同節點的集合。XQuery資料模型是節點(Nodes)、原子值(AtomicValues)和項目(Items)組成的類別架構。XQueryDataModelXQueryFLWORExpressions

(1/4)原始文件:

<bib>

<books>

<book>

<title>TCP/IPIllustrated</title>

<author>Stevens</author>

<publisher>Addison-Wesley</publisher>

</book>

<book>

<title>AdvancedUnixProgramming</title>

<author>Stevens</author>

<publisher>Addison-Wesley</publisher>

</book>

<book>

<title>DataontheWeb</title>

<author>Abiteboul</author>

<author>Buneman</author>

<author>Suciu</author>

</book>

<books>

</bib>FLWORExpressions(1/4)原始文FLWORExpressions(2/4)XQuery:

<authlist>

{

for$booksindoc("bib.xml")//books

for$aindistinct-values($books//author)

orderby$a

return

<author>

<name>

{$a/text()}

</name>

<books>

{

for$bin$books//book[author=$a]

orderby$b/title

return$b/title

}

</books>

</author>

}

</authlist>FLWORExpressions(2/4)XQuFLWORExpressions(3/4)結果

(tobecontinued):

<authlist>

<author>

<name>Abiteboul</name>

<books>

<title>DataontheWeb</title>

</books>

</author>

<author>

<name>Buneman</name>

<books>

<title>DataontheWeb</title>

</books>

</author>

FLWORExpressions(3/4)結果FLWORExpressions(4/4)結果(續):

<author>

<name>Stevens</name>

<books>

<title>TCP/IPIllustrated</title>

<title>AdvancedUnixProgramming</title>

</books>

</author>

<author>

<name>Suciu</name>

<books>

<title>DataontheWeb</title>

</books>

</author>

</authlist>FLWORExpressions(4/4)結果(

XQuerySyntax–Rules(1/5)XQuery語言並不是使用XML語法,其基本語法規則,如下所示:XQuey語言區分英文字母大小寫,Items、items和ITEMS是不同的名稱,通常是使用小寫英文字母。XQuery程式碼的元素、屬性、函數和變數名稱必須是合法的XML名稱,可以加上名稱空間的字首。XQuerySyntax–Rules(

XQuerySynatex–DataType(2/5)XQuery的基本資料型態和XMLSchema內建資料型態相同,如下所示:布林(Boolean)資料型態:布林值true或false。數字(Number)資料型態:包含整數和浮點數值。字串(Strings)資料型態:使用單引號或雙引號括起的字元集合。日期時間資料型態:代表日期、時間和期間。XML相關的資料型態:例如:QName等資料型態。XQuerySynatex–DataTypXQuerySyntax–VariablesandLiterals(3/5)在XQuery程式碼使用的變數並不需事先宣告,變數是以「$」符號開始的合法XML名稱。

例如:XQuery變數範例如下:$x、$y、$name、$bookXQuery的文字值(LiteralValues)主要分為三種型態,如下所示:字串(Strings):XQuery的字串可以使用單引號或雙引號括起的字元集合。例如:"P679"。數字(Numbers):XQuery的數字可以是整數或浮點數。例如:1、2、34.5。建構型態:使用函數建構的特殊型態。例如:日期xs:date("2006-12-31")。XQuerySyntax–Variablesand

XQuerySyntax–Comparators(4/5)XQuery1.0和XPath2.0使用相同的運算子,XQuery的比較運算子分為兩種,如下所示:一般比較(GeneralComparisons):一般比較運算子有=、!=、<、<=、>、>=,可以用來比較多個項目。值比較(ValueComparisons):值比較運算子有eq、ne、lt、le、gt、ge,和一般比較的差異在於它是比較單獨值,也就是說,運算元一定是原子值(AtomicValue),或包含原子值的節點。XQuerySyntax–Comparators(

XQuerySyntax–Comments(5/5)在XQuery程式碼可以使用XQuery的註解文字,這是「(:」開頭到「:)」之間的字串,如下所示:(:程式範例:Ch7-2-1.xq:)註解文字不可以出現在查詢結果的XML文件之中。因為XQuery查詢結果是一份XML文件或XHTML文件,所以也可以使用XML文件的註解,如下所示:<!--文件範例:Bookstore.xml-->XQuerySyntax–Comments(letandreturnclause–letclauseFLWOR運算式的let子句可以指定XQuery變數的值,return子句傳回查詢結果。FLWOR運算式let子句指定XQuery變數的值可以是項目或循序,如下所示:let$book:=doc("bookstore.xml")//book[1]let$title:="Java2程式設計範例教本"let$list:=(1to5)let$price:=650letandreturnclause–letcl

letandreturnclause–return(1/4)FLWOR運算式return子句可以輸出查詢結果,如果是路徑運算式,就是輸出選取的節點內容,如下所示:let$book:=doc("bookstore.xml")//book[1]return$book/@code$book變數是第1個book元素節點,return子句傳回book元素的code屬性節點。letandreturnclause–reletandreturnclause–return(2/4)如果輸出的XQuery變數是文字值,我們可以在return子句加上標籤來建立

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论