版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
本章要點
本章主要介紹XML的基本知識,包括XML的節(jié)點、標(biāo)簽、元素、屬性、XML文檔操作、XML數(shù)據(jù)庫和XML數(shù)據(jù)的XQuery查詢操作等。而XML的基本概念及其基本操作將是本章重點。第8章XML應(yīng)用基礎(chǔ)本章內(nèi)容:
8.1XML的基本知識
8.2XML文檔基本操作
8.3XML數(shù)據(jù)庫簡介
8.5小結(jié)
8.4XML數(shù)據(jù)查詢8.1XML的基本知識
XML簡介
XML的用途
XML樹結(jié)構(gòu)返回本章首頁
XML語法規(guī)則XML元素
XML屬性8.1XML的基本知識XML簡介返回本章首頁1、什么是XML?XML是可擴展標(biāo)記語言(EXtensibleMarkupLanguage)的英文縮寫,XML是一種標(biāo)記語言,很類似HTML,XML的設(shè)計宗旨是傳輸、存儲數(shù)據(jù),而非顯示數(shù)據(jù),XML標(biāo)簽沒有被預(yù)定義,使用者需要自行定義標(biāo)簽,XML被設(shè)計為具有自我描述性。XML是WorldWideWebConsortium(W3C,)開發(fā)Web標(biāo)準(zhǔn)的國際組織的推薦標(biāo)準(zhǔn),XML是于1998年2月10日成為W3C的推薦標(biāo)準(zhǔn)的。XML是獨立于軟件和硬件的信息傳輸或存儲工具。8.1XML的基本知識XML簡介返回本章首頁2、XML與HTML的主要差異XML與HTML的主要差異有:(1)XML不是HTML的替代,而是并存或互補關(guān)系。(2)XML和HTML為不同的目的而設(shè)計:1)XML被設(shè)計為傳輸和存儲數(shù)據(jù),其焦點是數(shù)據(jù)的內(nèi)容;2)HTML被設(shè)計用來顯示數(shù)據(jù),其焦點是數(shù)據(jù)的外觀與呈現(xiàn)。(3)HTML旨在顯示信息,而XML旨在傳輸、存儲信息。8.1XML的基本知識XML簡介返回本章首頁3、XML是不作為的XML是不作為的,是沒有任何行為的,也許這有點難以理解,但是XML不會做任何事情。XML被設(shè)計用來結(jié)構(gòu)化、存儲以及傳輸信息,它并不具備常見語言的基本功能——被計算機識別并運行。只有依靠另一種語言,來解釋它,使它達到想要的效果或被計算機所接受。8.1XML的基本知識XML簡介返回本章首頁3、XML是不作為的XML沒什么特別的,它僅僅是純文本而已。有能力處理純文本的軟件都可以處理XML。不過,能夠讀懂XML的應(yīng)用程序可以有針對性地處理XML的標(biāo)簽。標(biāo)簽的功能性意義依賴于應(yīng)用程序的特性。8.1XML的基本知識XML簡介返回本章首頁4、通過XML可以發(fā)明自己的標(biāo)簽上例中的標(biāo)簽沒有在任何XML標(biāo)準(zhǔn)中定義過(比如<to>和<from>)。這些標(biāo)簽是由文檔的創(chuàng)作者發(fā)明的。這是因為XML沒有預(yù)定義的標(biāo)簽。在HTML中使用的標(biāo)簽(以及HTML的結(jié)構(gòu))是預(yù)定義的。HTML文檔只使用在HTML標(biāo)準(zhǔn)中定義過的標(biāo)簽(比如<p>、<h1>等等)。XML允許創(chuàng)作者定義自己的標(biāo)簽和自己的文檔結(jié)構(gòu)。8.1XML的基本知識XML簡介返回本章首頁5、XML無所不在當(dāng)看到XML標(biāo)準(zhǔn)突飛猛進的開發(fā)進度,以及大批的軟件開發(fā)商采用這個標(biāo)準(zhǔn)的日新月異的速度時,真的是不禁感嘆這真是令人嘆為觀止。目前,XML在Web中起到的作用不會亞于一直作為Web基石的HTML。XML無所不在。XML是各種應(yīng)用程序之間進行數(shù)據(jù)傳輸?shù)淖畛S玫墓ぞ撸⑶以谛畔⒋鎯兔枋鲱I(lǐng)域變得越來越流行。8.1XML的基本知識XML的用途返回本章首頁XML應(yīng)用于web開發(fā)的許多方面,常用于簡化數(shù)據(jù)的存儲和共享。XML的用途主要有:1、XML把數(shù)據(jù)從HTML分離如果需要在HTML文檔中顯示動態(tài)數(shù)據(jù),那么每當(dāng)數(shù)據(jù)改變時將花費大量的時間來編輯HTML。通過XML,數(shù)據(jù)能夠存儲在獨立的XML文件中。這樣就可以專注于使用HTML進行布局和顯示,并確保修改底層數(shù)據(jù)不再需要對HTML進行任何的改變。通過使用幾行JavaScript,就可以讀取一個外部XML文件,然后更新HTML中的數(shù)據(jù)內(nèi)容。8.1XML的基本知識XML的用途返回本章首頁2、XML簡化數(shù)據(jù)共享在真實的世界中,計算機系統(tǒng)和數(shù)據(jù)使用不兼容的格式來存儲數(shù)據(jù)。XML數(shù)據(jù)以純文本格式進行存儲,因此提供了一種獨立于軟件和硬件的數(shù)據(jù)存儲方法。這讓創(chuàng)建不同應(yīng)用程序可以共享的數(shù)據(jù)變得更加容易。8.1XML的基本知識XML的用途返回本章首頁3、XML簡化數(shù)據(jù)傳輸(或交換)通過XML,可以在不兼容的系統(tǒng)之間輕松地交換數(shù)據(jù)。對開發(fā)人員來說,其中一項最費時的挑戰(zhàn)一直是在因特網(wǎng)上的不兼容系統(tǒng)之間交換數(shù)據(jù)。由于可以通過各種不兼容的應(yīng)用程序來讀取數(shù)據(jù),以XML交換數(shù)據(jù)降低了這種復(fù)雜性。8.1XML的基本知識XML的用途返回本章首頁4、XML簡化平臺的變更升級到新的系統(tǒng)(硬件或軟件平臺),總是非常費時的。必須轉(zhuǎn)換大量的數(shù)據(jù),不兼容的數(shù)據(jù)經(jīng)常會丟失。XML數(shù)據(jù)以文本格式存儲。這使得XML在不損失數(shù)據(jù)的情況下,更容易擴展或升級到新的操作系統(tǒng)、新應(yīng)用程序或新的瀏覽器。8.1XML的基本知識XML的用途返回本章首頁5、XML使數(shù)據(jù)更有用由于XML獨立于硬件、軟件以及應(yīng)用程序,XML使數(shù)據(jù)更可用,也更有用。不同的應(yīng)用程序都能夠便捷地訪問數(shù)據(jù),不僅僅在HTML頁中,也可以從XML數(shù)據(jù)源中進行訪問。通過XML,數(shù)據(jù)可供各種閱讀設(shè)備使用(手持的計算機、語音設(shè)備、新聞閱讀器等),還可以供盲人或其他殘障人士使用。8.1XML的基本知識XML的用途返回本章首頁6、XML用于創(chuàng)建新的Internet語言很多新的Internet語言是通過XML創(chuàng)建的,其中的例子包括:? XHTML-最新的HTML版本? WSDL-用于描述可用的webservice(web服務(wù))? WAP和WML-用于手持設(shè)備的標(biāo)記語言? RSS-用于RSSfeed的語言? RDF和OWL-用于描述網(wǎng)絡(luò)資源和本體? SMIL-用于描述針針對web的多媒體,如定義圖形等? XMLSchema-用于定義XML的結(jié)構(gòu)和數(shù)據(jù)類型? XSLT-用來轉(zhuǎn)換XML數(shù)據(jù)? SOAP-用來交換應(yīng)用程序之間的XML數(shù)據(jù)? XPath和XQuery-用來訪問XML數(shù)據(jù)8.1XML的基本知識XML樹結(jié)構(gòu)返回本章首頁XML文檔形成了一種樹結(jié)構(gòu),它從“根部”開始,然后擴展到“枝葉”。1、一個XML文檔實例XML使用了簡單的具有自我描述性的語法:<?xmlversion="1.0"encoding="ISO-8859-1"?><note><to>George</to><from>John</from><heading>Reminder</heading><body>Don'tforgetthemeeting!</body></note>8.1XML的基本知識XML樹結(jié)構(gòu)返回本章首頁2、XML文檔形成一種樹結(jié)構(gòu)XML文檔必須包含根元素。該元素是所有其他元素的父元素。XML文檔中的元素形成了一棵文檔樹。這棵樹從根部開始,并擴展到樹的最底端。所有元素均可擁有子元素:<root><child><subchild>.....</subchild></child></root>父、子以及同胞等術(shù)語用于描述元素之間的關(guān)系。父元素?fù)碛凶釉亍O嗤瑢蛹壣系淖釉爻蔀橥ㄐ值芑蚪忝茫?。所有元素均可擁有文本?nèi)容和屬性(類似HTML中)。8.1XML的基本知識XML樹結(jié)構(gòu)返回本章首頁8.1XML的基本知識返回本章首頁XML語法規(guī)則XML的語法規(guī)則很簡單,且很有邏輯。1、所有XML元素都須有關(guān)閉標(biāo)簽在HTML,經(jīng)常會看到?jīng)]有關(guān)閉標(biāo)簽的元素:<p>Thisisaparagraph<p>Thisisanotherparagraph在XML中,省略關(guān)閉標(biāo)簽是非法的。所有元素都必須有關(guān)閉標(biāo)簽:<p>Thisisaparagraph</p><p>Thisisanotherparagraph</p>注釋:也許已經(jīng)注意到XML聲明(XML第1行)沒有關(guān)閉標(biāo)簽。這不是錯誤。聲明不屬于XML本身的組成部分。它不是XML元素,也不需要關(guān)閉標(biāo)簽。8.1XML的基本知識返回本章首頁XML語法規(guī)則2、XML標(biāo)簽對大小寫敏感XML元素使用XML標(biāo)簽進行定義。XML標(biāo)簽對大小寫敏感。在XML中,標(biāo)簽<Letter>與標(biāo)簽<letter>是不同的。必須使用相同的大小寫來編寫打開標(biāo)簽和關(guān)閉標(biāo)簽:<Message>這是錯誤的。</message><message>這是正確的。</message>注釋:打開標(biāo)簽和關(guān)閉標(biāo)簽通常被稱為開始標(biāo)簽和結(jié)束標(biāo)簽。8.1XML的基本知識返回本章首頁XML語法規(guī)則3、XML必須正確地嵌套在HTML中,常會看到?jīng)]有正確嵌套的元素:<b><i>Thistextisboldanditalic</b></i>在XML中,所有元素都必須彼此正確地套:<b><i>Thistextisboldanditalic</i></b>在上例中,正確嵌套的意思是:由于<i>元素是在<b>元素內(nèi)打開的,那么它必須在<b>元素內(nèi)關(guān)閉。8.1XML的基本知識返回本章首頁XML語法規(guī)則4、XML文檔必須有根元素XML文檔必須有一個元素是所有其他元素的父元素。該元素稱為根元素,如下的<root>:<root><child><subchild>.....</subchild></child></root>8.1XML的基本知識返回本章首頁XML語法規(guī)則5、XML的屬性值須加引號與HTML類似,XML也可擁有屬性(名稱/值的對)。在XML中,XML的屬性值須加引號。請研究下面的兩個XML文檔。第一個是錯誤的,第二個是正確的:<notedate=08/08/2008><to>George</to><from>John</from></note><notedate="08/08/2008"><to>George</to><from>John</from></note>8.1XML的基本知識返回本章首頁XML語法規(guī)則6、實體引用(<>’”&)在XML中,一些字符擁有特殊的意義。如果把字符"<"放在XML元素中,會發(fā)生錯誤,這是因為解析器會把它當(dāng)作新元素的開始。這樣會產(chǎn)生XML錯誤:<message>ifsalary<1000then</message>為了避免這個錯誤,請用一個實體引用來代替"<"字符:<message>ifsalary<1000then</message>8.1XML的基本知識返回本章首頁XML語法規(guī)則6、實體引用(<>’”&)在XML中,有表8.1所示的5個預(yù)定義的實體引用。8.1XML的基本知識返回本章首頁XML語法規(guī)則7、XML中的注釋在XML中編寫注釋的語法與HTML的語法很相似,格式:<!--注釋內(nèi)容-->例如:<!--Thisisacomment-->8.1XML的基本知識返回本章首頁XML語法規(guī)則8、XML中的空格會被保留HTML會把多個連續(xù)的空格字符裁減為一個:HTML: HellomynameisDavid.輸出: HellomynameisDavid.在XML中,文檔中的空格不會被刪節(jié)。8.1XML的基本知識返回本章首頁XML語法規(guī)則9、XML以LF存儲換行在Windows應(yīng)用程序中,換行通常以一對字符來存儲:回車符(CR)和換行符(LF)。這對字符與打字機設(shè)置新行的動作有相似之處。在Unix應(yīng)用程序中,新行以LF字符存儲。而Macintosh應(yīng)用程序使用CR來存儲新行。8.1XML的基本知識返回本章首頁XML元素XML文檔包含XML元素。1、什么是XML元素?XML元素指的是從(且包括)開始標(biāo)簽直到(且包括)結(jié)束標(biāo)簽的部分。元素可包含其他元素、文本或者兩者的混合物,元素也可以擁有屬性。8.1XML的基本知識返回本章首頁XML元素XML文檔包含XML元素。<bookstore><bookcategory="CHILDREN"><title>HarryPotter</title><author>JK.Rowling</author><year>2005</year><price>29.99</price></book><bookcategory="WEB"><title>LearningXML</title><author>ErikT.Ray</author><year>2003</year><price>39.95</price></book></bookstore>8.1XML的基本知識返回本章首頁XML元素XML文檔包含XML元素。在上例中,<bookstore>和<book>都擁有元素內(nèi)容,因為它們包含了其他元素。<author>只有文本內(nèi)容,因為它僅包含文本。在上例中,只有<book>元素?fù)碛袑傩栽谏侠校?lt;bookstore>和<book>都擁有元素內(nèi)容,因為它們包含了其他元素。<author>只有文本內(nèi)容,因為它僅包含文本。在上例中,只有<book>元素?fù)碛袑傩?category="CHILDREN")。category="CHILDREN")。8.1XML的基本知識返回本章首頁XML元素2、XML命名規(guī)則XML元素必須遵循以下命名規(guī)則:1)名稱可以含字母、數(shù)字以及其他的字符;2)名稱不能以數(shù)字或者標(biāo)點符號開始;3)名稱不能以字符“xml”(或者XML、Xml)開始;4)名稱不能包含空格;5)可使用任何名稱,沒有保留的字詞。8.1XML的基本知識返回本章首頁XML元素3、最佳命名習(xí)慣5)避免":"字符。冒號會被轉(zhuǎn)換為命名空間來使用(稍后介紹)。6)XML文檔經(jīng)常有一個對應(yīng)的數(shù)據(jù)庫,其中的字段會對應(yīng)XML文檔中的元素。有一個實用的經(jīng)驗,即使用數(shù)據(jù)庫的名稱規(guī)則來命名XML文檔中的元素。7)非英語的字母比如éòá也是合法的XML元素名,不過需要留意當(dāng)軟件開發(fā)商不支持這些字符時可能出現(xiàn)的問題。8.1XML的基本知識返回本章首頁XML元素3、最佳命名習(xí)慣1)使名稱具有描述性。使用下劃線的名稱也很不錯。2)名稱應(yīng)當(dāng)比較簡短,比如:<book_title>,而不是:<the_title_of_the_book>。3)避免"-"字符。如果按照這樣的方式進行命名:"first-name",一些軟件會認(rèn)為你需要提取第一個單詞。4)避免"."字符。如果按照這樣的方式進行命名:"",一些軟件會認(rèn)為"name"是對象"first"的屬性。8.1XML的基本知識返回本章首頁XML元素4、XML元素是可擴展的(增加新元素)XML元素是可擴展,以攜帶更多的信息。請看下面這個XML例子:<note><to>George</to><from>John</from><body>Don'tforgetthemeeting!</body></note>8.1XML的基本知識返回本章首頁XML元素4、XML元素是可擴展的(增加新元素)想象一下,之后這個XML文檔作者又向這個文檔添加了一些額外的信息:<note><date>2008-08-08</date><to>George</to><from>John</from><heading>Reminder</heading><body>Don'tforgetthemeeting!</body></note>那么這個應(yīng)用程序會中斷或崩潰嗎?不會。這個應(yīng)用程序仍然可以找到XML文檔中的<to>、<from>以及<body>元素,并產(chǎn)生同樣的輸出。XML的優(yōu)勢之一,就是可以經(jīng)常在不中斷應(yīng)用程序的情況進行擴展。8.1XML的基本知識返回本章首頁XML屬性XML元素可以在開始標(biāo)簽中包含屬性,類似HTML。XML屬性(Attribute)提供關(guān)于元素的額外信息。1、XML屬性從HTML,你會回憶起這個:<imgsrc="computer.gif">。"src"屬性提供有關(guān)<img>元素的額外信息。在HTML中(以及在XML中),屬性提供有關(guān)元素的額外信息:<imgsrc="computer.gif"><ahref="demo.asp">8.1XML的基本知識返回本章首頁XML屬性屬性通常提供不屬于數(shù)據(jù)組成部分的信息。在下面的例子中,文件類型與數(shù)據(jù)無關(guān),但是對需要處理這個元素的軟件來說卻很重要:<filetype="gif">computer.gif</file>XML屬性必須加引號(單/雙引號,如果屬性值本身包含雙引號,那么使用實體引用,或者可以使用單引號包圍它)屬性值必須被引號包圍,不過單引號和雙引號均可使用。比如一個人的性別,person標(biāo)簽可以這樣寫:<personsex="female">或者這樣也可以:<personsex='female'>注釋:如果屬性值本身包含雙引號,那么有必要使用單引號包圍它8.1XML的基本知識返回本章首頁XML屬性2、XML元素與屬性的使用對比請看如下示例:<personsex="female"><firstname>Anna</firstname><lastname>Smith</lastname></person><person><sex>female</sex><firstname>Anna</firstname><lastname>Smith</lastname></person>在第一個例子中,sex是一個屬性。在第二個例子中,sex則是一個子元素。兩個例子均可提供相同的信息。8.1XML的基本知識返回本章首頁XML屬性2、XML元素與屬性的使用對比沒有什么規(guī)矩可以告訴我們什么時候該使用屬性,而什么時候該使用子元素。一般的經(jīng)驗是在HTML中,屬性用起來很便利,但是在XML中,應(yīng)該盡量避免使用屬性。如果信息感覺起來很像數(shù)據(jù),那么請使用子元素吧。8.1XML的基本知識返回本章首頁XML屬性3、盡量避免使用XML屬性(盡量使用XML元素)因使用屬性而會引起一些問題如下:1)屬性無法包含多個值(子元素可以);2)屬性無法描述樹結(jié)構(gòu)(子元素可以);3)屬性不易擴展(為未來的變化);4)屬性難以閱讀和維護。請盡量使用元素來描述數(shù)據(jù)。而僅僅使用屬性來提供與數(shù)據(jù)無關(guān)的信息。不要做如下這樣的蠢事(這不是XML應(yīng)該被使用的方式,而是濫用屬性了):<noteday="08"month="08"year="2008"to="George"from="John"heading="Reminder"body="Don'tforgetthemeeting!"></note>8.1XML的基本知識返回本章首頁XML屬性4、針對元數(shù)據(jù)的XML屬性(有關(guān)數(shù)據(jù)的數(shù)據(jù))有時候會向元素分配ID引用。這些ID索引可用于標(biāo)識XML元素,它起作用的方式與HTML中ID屬性是一樣的。如下例子真好演示了這種情況:<messages><noteid="501"><to>George</to><from>John</from><heading>Reminder</heading><body>Don'tforgetthemeeting!</body></note><noteid="502"><to>John</to><from>George</from><heading>Re:Reminder</heading><body>Iwillnot</body></note></messages>8.1XML的基本知識返回本章首頁XML屬性4、針對元數(shù)據(jù)的XML屬性(有關(guān)數(shù)據(jù)的數(shù)據(jù))<messages><noteid="501"><to>George</to><from>John</from><heading>Reminder</heading><body>Don'tforgetthemeeting!</body></note><noteid="502"><to>John</to><from>George</from><heading>Re:Reminder</heading><body>Iwillnot</body></note></messages>上面的ID僅僅是一個標(biāo)識符,用于標(biāo)識不同的便簽。它并不是便簽數(shù)據(jù)的組成部分。在此極力想傳遞的理念是:元數(shù)據(jù)(有關(guān)數(shù)據(jù)的數(shù)據(jù))應(yīng)當(dāng)存儲為屬性,而數(shù)據(jù)本身應(yīng)當(dāng)存儲為元素。8.2XML文檔基本操作返回本章首頁
創(chuàng)建XML文件
查看XML文件
使用XSLT顯示XML
使用CSS顯示XML8.2XML文檔基本操作返回本章首頁創(chuàng)建XML文件通常,我們是在數(shù)據(jù)庫中存儲數(shù)據(jù)的。不過,如果希望數(shù)據(jù)的可移植性更強,就可以把數(shù)據(jù)存儲到XML文件中。來看一個真實的由表單數(shù)據(jù)保存到XML文件的例子。下面的HTML表單(customers.htm)要求用戶輸入名字、國籍以及電子郵件地址。隨后這些信息會被寫到一個XML文件,以便存儲。8.2XML文檔基本操作返回本章首頁創(chuàng)建XML文件XML文件("Customer.xml")會由上面的代碼生成,大致的樣子是這樣的:<?xmlversion="1.0"?><customer><fieldid="firstName"><value>David</value></field><fieldid="lastName"><value>Smith</value></field><fieldid="country"><value>China</value></field><fieldid="email"><value>mymail@</value></field></customer>創(chuàng)建XML文件相關(guān)程序8.2XML文檔基本操作返回本章首頁查看XML文件在所有現(xiàn)代瀏覽器中,可查看原始的XML文件。打開XML文件,XML文檔將顯示為代碼顏色化的根以及子元素。通過點擊元素左側(cè)的加號或減號,可以展開或收起元素的結(jié)構(gòu)。如需查看不帶有+和-符號的源代碼,請從瀏覽器菜單中選擇“查看源代碼”。8.2XML文檔基本操作返回本章首頁查看XML文件8.2XML文檔基本操作返回本章首頁查看XML文件注釋:在Netscape,Opera以及Safari中,僅僅會顯示元素文本!要查看原始的XML,請右擊頁面,然后選擇“查看源代碼”。由于XML文檔不會攜帶有關(guān)如何顯示數(shù)據(jù)的信息,XML標(biāo)簽由XML文檔的作者“發(fā)明”,瀏覽器無法確定像<table>這樣一個標(biāo)簽究竟描述一個HTML表格還是一個餐桌。在沒有任何有關(guān)如何顯示數(shù)據(jù)的信息的情況下,大多數(shù)的瀏覽器都會僅僅把XML文檔顯示為源代碼。實際上,可以使用CSS、XSL、JavaScript以及XML數(shù)據(jù)島等方法來解決XML數(shù)據(jù)如何顯示問題。8.2XML文檔基本操作返回本章首頁使用XSLT顯示XML通過使用XSLT(eXtensibleStylesheetLanguageTransformations),可以向XML文檔添加顯示信息。使用XSLT顯示XML,XSLT是首選的XML樣式表語言,XSLT遠比CSS更加完善。使用XSLT的方法之一是在瀏覽器顯示XML文件之前,先把它轉(zhuǎn)換為HTML。具體見兩文件代碼(本鏈接)8.2XML文檔基本操作返回本章首頁使用CSS顯示XML通過使用CSS,可為XML文檔添加顯示信息。使用CSS來格式化XML文檔是有可能的。在XML文檔中含有類似“<?xml-stylesheettype="text/css"href="cd_catalog.css"?>”內(nèi)容,這樣就把這個XML文件鏈接到CSS文件(這里是"cd_catalog.css")上了。使用CSS顯示XML示例代碼注釋:使用CSS格式化XML雖然也流行,但不能代表XML文檔樣式化的未來。XML文檔應(yīng)當(dāng)使用W3C的XSL標(biāo)準(zhǔn)進行格式化!8.3XML數(shù)據(jù)庫簡介返回本章首頁XML數(shù)據(jù)庫是一種支持對XML格式文檔進行存儲和查詢等操作的數(shù)據(jù)管理系統(tǒng)。在系統(tǒng)中,開發(fā)人員可以對數(shù)據(jù)庫中的XML文檔進行查詢、更新、導(dǎo)出和指定格式的序列化等。目前XML數(shù)據(jù)庫有三種類型:(1)XMLEnabledDatabase(XEDB),即能處理XML的數(shù)據(jù)庫。其特點是在原有的數(shù)據(jù)庫系統(tǒng)上擴充對XML數(shù)據(jù)的處理功能,使之能適應(yīng)XML數(shù)據(jù)存儲和查詢的需要。一般做法是在數(shù)據(jù)庫系統(tǒng)之上增加XML映射層,這可以由數(shù)據(jù)庫供應(yīng)商提供,也可以由第三方廠商提供。映射層管理XML數(shù)據(jù)的存儲和檢索,但原始的XML元數(shù)據(jù)和結(jié)構(gòu)可能會丟失,而且數(shù)據(jù)檢索結(jié)果不能保證是原始XML形式。XEDB的基本存儲單位與具體實現(xiàn)緊密相關(guān)。(2)NativeXMLDatabase(NXD),即純XML數(shù)據(jù)庫。其特點是以自然的方式處理XML數(shù)據(jù),以XML文檔作為基本的邏輯存儲單位,針對XML的數(shù)據(jù)存儲和查詢特點專門設(shè)計適用的數(shù)據(jù)模型和處理方法。(3)HybridXMLDatabase(HXD),即混合XML數(shù)據(jù)庫。根據(jù)應(yīng)用的需求,可以視其為XEDB或NXD的數(shù)據(jù)庫,典型的例子是Ozone。8.3XML數(shù)據(jù)庫簡介返回本章首頁XML數(shù)據(jù)庫是一個能夠在應(yīng)用中管理XML數(shù)據(jù)和文檔的集合的數(shù)據(jù)庫系統(tǒng)。XML數(shù)據(jù)庫是XML文檔及其部件的集合,并通過一個具有能力管理和控制這個文檔集合本身及其所表示信息的系統(tǒng)來維護。XML數(shù)據(jù)庫是結(jié)構(gòu)化數(shù)據(jù)和半結(jié)構(gòu)化數(shù)據(jù)的存儲庫,持久的XML數(shù)據(jù)管理還包括數(shù)據(jù)的獨立性、集成性、訪問權(quán)限、視圖、完備性、冗余性、一致性以及數(shù)據(jù)恢復(fù)等。這些文檔是持久的并且是可以操作的。8.3XML數(shù)據(jù)庫簡介返回本章首頁與傳統(tǒng)數(shù)據(jù)庫相比,XML數(shù)據(jù)庫具有以下優(yōu)勢:(1)XML數(shù)據(jù)庫能夠?qū)Π虢Y(jié)構(gòu)化數(shù)據(jù)進行有效存取和管理。如網(wǎng)頁內(nèi)容就是一種半結(jié)構(gòu)化數(shù)據(jù),而傳統(tǒng)關(guān)系數(shù)據(jù)庫對于類似網(wǎng)頁內(nèi)容這類半結(jié)構(gòu)化數(shù)據(jù)無法進行有效管理。(2)提供對標(biāo)簽和路徑的操作。傳統(tǒng)數(shù)據(jù)庫語言允許對數(shù)據(jù)元素的值進行操作,不能對元素名稱操作,半結(jié)構(gòu)化數(shù)據(jù)庫提供了對標(biāo)簽名稱的操作,還包括了對路徑的操作。(3)當(dāng)數(shù)據(jù)本身具有層次特征時,由于XML數(shù)據(jù)格式能夠清晰表達數(shù)據(jù)的層次特征,因此XML數(shù)據(jù)庫便于對層次化的數(shù)據(jù)進行操作。XML數(shù)據(jù)庫適合管理復(fù)雜數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)集,如果己經(jīng)以XML格式存儲信息,則XML數(shù)據(jù)庫利于文檔存儲和檢索;可以用方便實用的方式檢索文檔,并能夠提供高質(zhì)量的全文搜索引擎。另外XML數(shù)據(jù)庫能夠存儲和查詢異種的文檔結(jié)構(gòu),提供對異種信息存取的支持。8.3XML數(shù)據(jù)庫簡介返回本章首頁
XML數(shù)據(jù)模型
XML數(shù)據(jù)庫系統(tǒng)介紹8.3XML數(shù)據(jù)庫簡介返回本章首頁真如第1章所述,數(shù)據(jù)模型是數(shù)據(jù)庫系統(tǒng)的核心,XML數(shù)據(jù)模型同樣是XML數(shù)據(jù)庫的核心。根據(jù)XML數(shù)據(jù)是自描述的、不規(guī)則的等特點,XML數(shù)據(jù)模型可以用關(guān)系模型、面向?qū)ο竽P?、樹模型和圖模型等來表示,只是目前還沒有一種XML數(shù)據(jù)模型能比較滿意、非常適合地來管理XML數(shù)據(jù)。XML數(shù)據(jù)模型仍然是XML數(shù)據(jù)管理領(lǐng)域研究的核心問題之一,未來的XML數(shù)據(jù)模型應(yīng)能適合表達XML數(shù)據(jù)庫復(fù)雜的數(shù)據(jù)結(jié)構(gòu)和語義的精確定義,又能支持便捷與完備的XML數(shù)據(jù)的操作。
XML數(shù)據(jù)模型8.3XML數(shù)據(jù)庫簡介返回本章首頁傳統(tǒng)數(shù)據(jù)模型(如關(guān)系模型和面向?qū)ο髷?shù)據(jù)模型)來表示XML數(shù)據(jù)的結(jié)構(gòu)和語義。這些方法的最大問題是:XML數(shù)據(jù)上的一個操作需要用這些模型上的一系列操作來表示,因此顯得力不從心。面向?qū)ο竽P涂梢苑奖愕乇磉_出XML數(shù)據(jù)的結(jié)構(gòu)以及語義,但為了支持路徑表達式查詢,操作必須是面向過程的,需要復(fù)雜的數(shù)據(jù)導(dǎo)航,并不適應(yīng)XML數(shù)據(jù)管理的需要;另外,由于XML數(shù)據(jù)半結(jié)構(gòu)化的特點,為存儲XML數(shù)據(jù),將會產(chǎn)生大量磁盤碎片。
XML數(shù)據(jù)模型8.3XML數(shù)據(jù)庫簡介返回本章首頁如果用關(guān)系模型或嵌套關(guān)系模型來描述XML數(shù)據(jù)的結(jié)構(gòu)和語義,其操作需要用大量昂貴的join操作來表示,也不適應(yīng)XML數(shù)據(jù)管理的需要;此外,用關(guān)系和面向?qū)ο竽P捅硎綳ML數(shù)據(jù)的結(jié)構(gòu)和語義進行描述,本質(zhì)上是將XML數(shù)據(jù)的結(jié)構(gòu)和語義映射到這兩種數(shù)據(jù)模型,將XML數(shù)據(jù)查詢操作的語義映射到相應(yīng)模型的開銷也很大。樹模型和圖模型,這兩種模型都是直觀上的模型,不是嚴(yán)格意義上的數(shù)據(jù)模型。在有效表達XML數(shù)據(jù)以及XML數(shù)據(jù)操作的形式化定義方面有不足。如何利用數(shù)學(xué)的方法嚴(yán)格描述XML數(shù)據(jù)以及數(shù)據(jù)上的操作,進而完成XML數(shù)據(jù)查詢的代數(shù)優(yōu)化,成為XML數(shù)據(jù)管理領(lǐng)域一個十分重要的研究問題。
XML數(shù)據(jù)模型8.3XML數(shù)據(jù)庫簡介返回本章首頁建立XML數(shù)據(jù)庫數(shù)據(jù)模型的目的是對XML數(shù)據(jù)的結(jié)構(gòu)和操作語義進行形式化描述,進而實現(xiàn)XML數(shù)據(jù)庫查詢優(yōu)化。然而,已有的XML模型在以下方面存有不足:1)無法表達XML數(shù)據(jù)的復(fù)雜語義;2)沒有給出完整的代數(shù)操作的定義;3)在模型上沒有給出數(shù)據(jù)修改操作的明確定義。
XML數(shù)據(jù)模型8.3XML數(shù)據(jù)庫簡介返回本章首頁建立XML數(shù)據(jù)庫數(shù)據(jù)模型的目的是對XML數(shù)據(jù)的結(jié)構(gòu)和操作語義進行形式化描述,進而實現(xiàn)XML數(shù)據(jù)庫查詢優(yōu)化。然而,已有的XML模型在以下方面存有不足:1)無法表達XML數(shù)據(jù)的復(fù)雜語義;2)沒有給出完整的代數(shù)操作的定義;3)在模型上沒有給出數(shù)據(jù)修改操作的明確定義。
XML數(shù)據(jù)模型8.3XML數(shù)據(jù)庫簡介返回本章首頁為此,一個非常好的XML數(shù)據(jù)庫數(shù)據(jù)模型(從模型三要素來分述)應(yīng)具有如下特點:(1)數(shù)據(jù)結(jié)構(gòu):模型數(shù)據(jù)結(jié)構(gòu)的表達能力要強(可以便捷表達XML數(shù)據(jù)的結(jié)構(gòu)),能方便表達XML數(shù)據(jù)的復(fù)雜語義。已有文檔類型定義DTD(DocumentTypeDescriptors),用來描述XML文檔的結(jié)構(gòu),類似于模式的概念。定義XML模式的另一個標(biāo)準(zhǔn)是XMLSchema,XMLSchema用來定義其文檔的模式,支持對結(jié)構(gòu)和數(shù)據(jù)類型的定義。
XML數(shù)據(jù)模型8.3XML數(shù)據(jù)庫簡介返回本章首頁(2)數(shù)據(jù)操作:具有從XML文檔選擇滿足給定條件信息的能力(docselection),支持從XML數(shù)據(jù)庫選擇滿足給定條件信息的能力(DBselection);支持XML數(shù)據(jù)上的Join操作(joins);能表達查詢結(jié)果的語義(semanticsofresult),能表達路徑表達式(pathexpressions);具有構(gòu)造新數(shù)據(jù)元素的機制(construct);支持查詢結(jié)果的聚集(aggregate);支持查詢結(jié)果的排序(order);支持?jǐn)?shù)據(jù)更新操作(update);支持基于路徑的數(shù)據(jù)更新操作(updatebypath);使用的方便性(convenience);形式化描述表達性(形式化的模型可以直接用來進行查詢優(yōu)化,記為formallized)。
XML數(shù)據(jù)模型8.3XML數(shù)據(jù)庫簡介返回本章首頁(3)數(shù)據(jù)完整性:數(shù)據(jù)的完整性約束是數(shù)據(jù)模型中數(shù)據(jù)及其聯(lián)系所具有的制約和依存規(guī)則,在數(shù)據(jù)發(fā)布、操作和交換中保持語義信息等方面發(fā)揮著重要作用。描述元素或路徑之間結(jié)構(gòu)關(guān)系的完整性約束稱為XML文檔結(jié)構(gòu)完整性約束。XML完整性約束技術(shù)還包括:基于XML的數(shù)據(jù)交換中的函數(shù)依賴轉(zhuǎn)換方法;面向XMLSchema的鍵約束轉(zhuǎn)換方法和基于XPath的XML文檔鍵約束驗證方法等?;赬ML的關(guān)系數(shù)據(jù)發(fā)布,是在兩種不同數(shù)據(jù)模型上進行的數(shù)據(jù)轉(zhuǎn)換,應(yīng)能保證滿足各自數(shù)據(jù)模型的完整性。DTD或XMLSchema定義里能實現(xiàn)基本的完整性約束。
XML數(shù)據(jù)模型8.3XML數(shù)據(jù)庫簡介返回本章首頁XML模式規(guī)范化理論的早期開拓者是賓夕法尼亞大學(xué)的樊文飛等人。從定義XML的鍵(key)和函數(shù)依賴,到XML和DTD范式,再到基于約束的XML數(shù)據(jù)庫的模式規(guī)范化,XML數(shù)據(jù)庫的模式規(guī)范化理論還在穩(wěn)步地研究推進中。
XML數(shù)據(jù)模型8.3XML數(shù)據(jù)庫簡介返回本章首頁XML數(shù)據(jù)庫系統(tǒng)從最初簡單的查詢引擎,不斷地加入查詢優(yōu)化、事務(wù)處理、觸發(fā)器、并發(fā)控制、代數(shù)系統(tǒng)等傳統(tǒng)的數(shù)據(jù)庫技術(shù),一步步地從性能和功能上正在不斷完善。XML數(shù)據(jù)庫系統(tǒng)介紹8.3XML數(shù)據(jù)庫簡介返回本章首頁1、NXD類XML數(shù)據(jù)庫系統(tǒng)NXD類XML數(shù)據(jù)庫產(chǎn)品,大致上可分為三大類型:●商業(yè)類:如Ipedo、Tamino、Natix、Xyleme等。其中,美國Ipedo公司的IpedoXMLDatabase和德國SoftwareAG公司的Tamino(/web/guest/home)是其中的佼佼者,成為目前市場上的主流產(chǎn)品?!裱芯款惢蛟拖到y(tǒng):如Stanford大學(xué)早期開發(fā)的Lore、密歇根大學(xué)安阿伯分校的Timber、西雅圖華盛頓大學(xué)的Tukwila、威斯康星大學(xué)麥迪遜分校的Niagara、中國人民大學(xué)的OrientX和多倫多大學(xué)的Tox等。OrientX是中國人民大學(xué)最近幾年開發(fā)的一個純XML數(shù)據(jù)庫管理系統(tǒng)(/orientx/index.html#features)?!耖_放源碼類:其中影響較大的是BerkeleyDBXML、美國的dbXMLGroupLLC公司的dbXML、美國eXcelon公司的eXcelon、荷蘭的TheConnectionFactory公司研制的XHive/DB、XDB、Xindice、Sedna、BaseX、XMLDB、TPoX、pureXML、eXist等。XML數(shù)據(jù)庫系統(tǒng)介紹8.3XML數(shù)據(jù)庫簡介返回本章首頁2、XEDB類XML數(shù)據(jù)庫系統(tǒng)目前,數(shù)據(jù)庫主流廠商Oracle、IBM、Mircosoft等都己經(jīng)在各自的產(chǎn)品中提供了對SQL/XML擴展函數(shù)及XQuery規(guī)范的支持。SQL2003標(biāo)準(zhǔn)增加了對XML的支持,定義了數(shù)據(jù)庫語言SQL與XML結(jié)合的方式,擴展的部分稱為SQL/XML。主流數(shù)據(jù)庫系統(tǒng)對XML的擴展與操作支持,如圖8.4所示意。XML數(shù)據(jù)與關(guān)系型數(shù)據(jù)可以并存,并能得到順暢的處理。SQL/XML定義了新的數(shù)據(jù)類型——XML數(shù)據(jù)類型,以及一組函數(shù)。SQL/XML實現(xiàn)了對XML數(shù)據(jù)的全面操作支持。目前,主流廠商加大XML支持力度,許多主流的關(guān)系數(shù)據(jù)庫廠商都已經(jīng)把XML支持結(jié)合到了相關(guān)產(chǎn)品中,或者提供可在其數(shù)據(jù)庫中使用XML的工具:即或者“XML-enabled數(shù)據(jù)庫”、或者“Native-XML數(shù)據(jù)庫”。XML數(shù)據(jù)庫系統(tǒng)介紹8.3XML數(shù)據(jù)庫簡介返回本章首頁XML數(shù)據(jù)庫系統(tǒng)介紹8.3XML數(shù)據(jù)庫簡介返回本章首頁甲骨文也早在2000年推出Oracle9i第2版時,就將它定義為一個“完全一體化的XML和關(guān)系數(shù)庫”。甲骨文提供Java版本XMLSQL實用工具把XML文檔元素建模為一組嵌套表,通過使用甲骨文對象數(shù)據(jù)類型把對象引用鏈從數(shù)據(jù)庫轉(zhuǎn)換到XML文檔的層次結(jié)構(gòu)中,支持向數(shù)據(jù)庫發(fā)送查詢語句并返回XML文檔,也可以將XML文檔存儲到其對象關(guān)系數(shù)據(jù)庫中。Oracle數(shù)據(jù)庫10g第2版中的OracleXMLDB實現(xiàn)了SQL/XML標(biāo)準(zhǔn)版的特性。XML數(shù)據(jù)庫系統(tǒng)介紹8.3XML數(shù)據(jù)庫簡介返回本章首頁IBM從DB27.0開始提供了對XML的支持。從7.0開始,DB2提供DB2XMLExtender在XML文檔和DB2之間進行數(shù)據(jù)轉(zhuǎn)換,以及XML文檔與DB2表格之間的映射。DB29.0則提供了pureXML技術(shù)對源生態(tài)XML文檔全面支持,它以樹型存儲方式來對待XML數(shù)據(jù),保持XML數(shù)據(jù)的層次結(jié)構(gòu)和靈活性,同時還支持傳統(tǒng)的關(guān)系型數(shù)據(jù)。DB29.5引入的XQueryUpdateFacility允許在XML文檔中重命名、插入、刪除、替換或修改元素和屬性。這可以簡化XML數(shù)據(jù)的更新并提高效率。XML數(shù)據(jù)庫系統(tǒng)介紹8.3XML數(shù)據(jù)庫簡介返回本章首頁SQLServer通過擴展SQL語法,使得能夠把關(guān)系數(shù)據(jù)庫中檢索得到的數(shù)據(jù)包裝成XML文檔形式,并將XML數(shù)據(jù)以內(nèi)部格式存儲為大二進制對象。SQLServer6.5和7.0也進行了XML擴充,后來又加入XML輸出選項,用以向其他系統(tǒng)傳送信息。SQLServer2005還引入了一種稱為XML的本機數(shù)據(jù)類型,允許表中有一個或多個XML類型的列,提供了XML數(shù)據(jù)操縱語言(對Xquery語言的一個擴展)對XML數(shù)據(jù)內(nèi)容進行更新以及建立索引。此外,在SQLServer2005中,加入了Xquery和本地XML數(shù)據(jù)類型等改進特性,以幫助企業(yè)實現(xiàn)內(nèi)部系統(tǒng)與外部系統(tǒng)之間的無縫連接。XML數(shù)據(jù)庫系統(tǒng)介紹8.3XML數(shù)據(jù)庫簡介返回本章首頁XMLforSQLServer,又名SQLXML,可幫助開發(fā)人員在擴展標(biāo)記語言(XML)和相關(guān)數(shù)據(jù)之間架設(shè)起溝通的橋梁。如今SQLXML4.0已經(jīng)成為了一種成熟的數(shù)據(jù)訪問技術(shù)。我們可以把數(shù)據(jù)庫中的關(guān)系數(shù)據(jù)和XML數(shù)據(jù)看成是同一數(shù)據(jù)的不同表現(xiàn)形式。微軟XML核心服務(wù)(MSXML)是本地(Win32)API,用于支持XML1.0標(biāo)準(zhǔn)高性能的XML應(yīng)用程序。System.Xml是一組API,支持根據(jù)一系列的標(biāo)準(zhǔn)處理XML的.NET應(yīng)用程序。支持的標(biāo)準(zhǔn)包括:XML1.0-包括DTD支持;XML命名空間-針對數(shù)據(jù)流和DOM;XSD模式;XPath表達式;XSLT轉(zhuǎn)換;DOM級別1的核心;DOM級別2的核心。XML數(shù)據(jù)修改語言(XMLDML)是XQuery語言的擴展。根據(jù)W3C的定義,XQuery語言缺少數(shù)據(jù)操作(DML)部分。XMLDML以及XQuery語言,提供了完整的功能查詢和數(shù)據(jù)修改語言,可以使用它們對XML數(shù)據(jù)類型進行各種操作。XML數(shù)據(jù)庫系統(tǒng)介紹8.3XML數(shù)據(jù)庫簡介返回本章首頁2001年,SybaseASE從12.0開入就加入了XML功能,經(jīng)過多年的應(yīng)用,ASE數(shù)據(jù)庫對XML的支持日臻成熟和完善。同時,ASE強化了文本搜索功能,可同時支持XPATH/XQUERY和SQLX兩種方式,進一步擴展了XML的功能。同時,該軟件還對文件系統(tǒng)中XML內(nèi)容進行管理。這樣,用戶可以使用已有的數(shù)據(jù)庫投資處理XML內(nèi)容,而不需要使用專門的或定制的XML處理引擎,減少了對外部XML資源管理庫的需求。XML數(shù)據(jù)庫系統(tǒng)介紹8.4XML數(shù)據(jù)查詢返回本章首頁XQuery是用于XML數(shù)據(jù)查詢的語言,是W3C標(biāo)準(zhǔn)的一種語言。解釋XQuery的最佳方式是:XQuery相對于XML,等同于SQL相對于關(guān)系數(shù)據(jù)庫。XQuery被設(shè)計用來查詢XML數(shù)據(jù),XQuery也被稱為XMLQuery。XQuery的FLWR語句規(guī)范,有著與關(guān)系數(shù)據(jù)庫的SQL完全類似的表達方式,使得它在一般用戶眼里,也變得友好起來。8.4XML數(shù)據(jù)查詢返回本章首頁
XQuery簡介
XQuery實例
XQueryFLWOR表達式
XQueryFLWOR+HTML
XQuery語法
XQuery添加元素和屬性
XQuery函數(shù)8.4XML數(shù)據(jù)查詢返回本章首頁XQuery簡介XQuery被設(shè)計用來查詢XML數(shù)據(jù),實際上不僅僅限于XML文件,還包括任何可以XML形態(tài)呈現(xiàn)的數(shù)據(jù),包括數(shù)據(jù)庫。1、什么是XQuery?XQuery是用于XML數(shù)據(jù)查詢的語言,是W3C標(biāo)準(zhǔn)的一種語言;
XQuery對XML的作用類似SQL對數(shù)據(jù)庫的作用;
XQuery建立在XPath表達式之上;
XQuery被所有主要的數(shù)據(jù)庫引擎支持(IBM、Oracle、Microsoft等等);
XQuery是用來從XML文檔查找和提取元素及屬性的語言。8.4XML數(shù)據(jù)查詢返回本章首頁XQuery簡介2、XQuery與XPathXPath是一門在XML文檔中查找信息的語言;XPath可用來在XML文檔中對元素和屬性進行遍歷;XPath是W3CXSLT標(biāo)準(zhǔn)的主要元素,并且XQuery和XPointer都構(gòu)建于XPath表達之上。XQuery1.0和XPath2.0共享相同的數(shù)據(jù)模型,并支持相同的函數(shù)和運算符。3、XQuery是一個W3C推薦標(biāo)準(zhǔn)XQuery與多種W3C標(biāo)準(zhǔn)相兼容,比如XML、Namespaces、XSLT、XPath以及XMLSchema。XQuery1.0在2007年1月23日被確立為W3C推薦標(biāo)準(zhǔn)。為此,XQuery已被幾乎所有主流關(guān)系數(shù)據(jù)庫系統(tǒng)及各種XML數(shù)據(jù)庫系統(tǒng)所支持。8.4XML數(shù)據(jù)查詢返回本章首頁XQuery簡介4、XQuery的主要作用XQuery可用于:提取信息以便在網(wǎng)絡(luò)服務(wù)中使用;生成摘要報告;把XML數(shù)據(jù)轉(zhuǎn)換為XHTML;為獲得相關(guān)信息而搜索網(wǎng)絡(luò)文檔。XQuery能方便地實現(xiàn):“從存儲在名為cd_catalog.xml的XML文檔中的CD集那里選取所有價格低于10美元的CD記錄?!边@類問題。補充:而Xpath可以理解為是XQuery的一個子集。Xpath表達式在相關(guān)文獻中被證明與查詢模式樹是等價的,這也與學(xué)術(shù)界推崇的模式樹查詢方式一致,使得實驗室系統(tǒng)可以毫不困難地處理Xpath查詢表達式,并能進行查詢優(yōu)化。這一點在XML數(shù)據(jù)庫研究中顯得頗有價值。8.4XML數(shù)據(jù)查詢返回本章首頁XQuery簡介什么是XPath?1)XPath使用路徑表達式在XML文檔中進行導(dǎo)航;2)XPath包含一個標(biāo)準(zhǔn)函數(shù)庫;3)XPath是XSLT中的主要元素;4)XPath是一個W3C標(biāo)準(zhǔn)。對XPath的理解是很多高級XML應(yīng)用的基礎(chǔ)。XML中的鏈接被分為兩個部分:XLink和XPointer。XLink和XPointer定義了在XML文檔中創(chuàng)建超級鏈接的標(biāo)準(zhǔn)方法。XLink定義了一套標(biāo)準(zhǔn)的在XML文檔中創(chuàng)建超級鏈接的方法。XPointer使超級鏈接可以指向XML文檔中更多具體的部分(片斷)。什么是XLink?1)XLink是XML鏈接語言(XMLLinkingLanguage)的縮寫;2)XLink是用于在XML文檔中創(chuàng)建超級鏈接的語言;3)XLink類似于HTML鏈接-但是更為強大;4)XML文檔中的任何元素均可成為XLink;5)XLink支持簡易鏈接,也支持可將多重資源鏈接在一起的擴展鏈接;6)通過XLink,鏈接可在被鏈接文件外進行定義;7)XLink是W3C推薦標(biāo)準(zhǔn)。什么是XPointer?1)XPointer是XML指針文件(XMLPointerLanguage)的縮寫;2)XPointer使超級鏈接可以指向XML文檔中更多具體的部分(片斷);3)XPointer使用XPath表達式在XML文檔中進行定位;4)XPointer是W3C推薦標(biāo)準(zhǔn)。8.4XML數(shù)據(jù)查詢返回本章首頁
XQuery實例下面讓我們通過研究一個例子來學(xué)習(xí)一些基礎(chǔ)的XQuery語法。1、XML實例文檔例子中使用到的XML文檔是books.xml.如何從books.xml選取節(jié)點?2、使用函數(shù)XQuery使用函數(shù)來提取XML文檔中的數(shù)據(jù)。doc()函數(shù)用于打開books.xml文件:doc("books.xml")8.4XML數(shù)據(jù)查詢返回本章首頁
XQuery實例3、使用路徑表達式XQuery使用路徑表達式在XML文檔中通過元素進行導(dǎo)航。下面的路徑表達式用于在books.xml文件中選取所有的title元素:doc("books.xml")/bookstore/book/title說明:/bookstore選取bookstore元素,/book選取bookstore元素下的所有book元素,而/title選取每個book元素下的所有title元素上面的XQuery可提取以下數(shù)據(jù):<titlelang="en">EverydayItalian</title><titlelang="en">HarryPotter</title><titlelang="en">XQueryKickStart</title><titlelang="en">LearningXML</title>8.4XML數(shù)據(jù)查詢返回本章首頁
XQuery實例4、使用謂語XQuery使用謂語來限定從XML文檔所提取的數(shù)據(jù)。下面的謂語用于選取bookstore元素下的所有book元素,并且所選取的book元素下的price元素的值必須小于30:doc("books.xml")/bookstore/book[price<30]上面的XQuery可提取到下面的數(shù)據(jù):<bookcategory="CHILDREN"><titlelang="en">HarryPotter</title><author>JK.Rowling</author><year>2005</year><price>29.99</price></book>8.4XML數(shù)據(jù)查詢返回本章首頁XQueryFLWOR表達式FLWOR是"For,Let,Where,Orderby,Return"的只取首字母縮寫。怎樣使用FLWOR從books.xml選取節(jié)點?請看這個路徑表達式:doc("books.xml")/bookstore/book[price>30]/title上面這個表達式可選取bookstore元素下的book元素下所有的title元素,并且其中的price元素的值必須大于30。下面這個FLWOR表達式所選取的數(shù)據(jù)和上面的路徑表達式是相同的:for$xindoc("books.xml")/bookstore/bookwhere$x/price>30return$x/title結(jié)果是:<titlelang="en">XQueryKickStart</title><titlelang="en">LearningXML</title>8.4XML數(shù)據(jù)查詢返回本章首頁XQueryFLWOR表達式通過FLWOR,可以對結(jié)果進行排序:for$xindoc("books.xml")/bookstore/bookwhere$x/price>30orderby$x/titlereturn$x/titlefor語句把bookstore元素下的所有book元素提取到名為$x的變量中。where語句選取了price元素值大于30的book元素。orderby語句定義了排序次序。將根據(jù)title元素進行排序。return語句規(guī)定返回什么內(nèi)容。在此返回的是title元素。上面的XQuery表達式的結(jié)果:<titlelang="en">LearningXML</title><titlelang="en">XQueryKickStart</title>8.4XML數(shù)據(jù)查詢返回本章首頁
XQueryFLWOR+HTML如何在一個HTML列表中提交結(jié)果?請看下面的XQueryFLWOR表達式:for$xindoc("books.xml")/bookstore/book/titleorderby$xreturn$x上面的表達式會選取bookstore元素下的book元素下的所有title元素,并以字母順序返回title元素。現(xiàn)在,希望使用HTML列表列出書店中所有的書目??梢韵騀LWOR表達式添加<ul>和<li>標(biāo)簽:<ul>{for$xindoc("books.xml")/bookstore/book/titleorderby$xreturn<li>{$x}</li>}</ul>8.4XML數(shù)據(jù)查詢返回本章首頁
XQueryFLWOR+HTML以上代碼的結(jié)果:<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>現(xiàn)在希望去除title元素,而僅僅顯示title元素內(nèi)的數(shù)據(jù)。<ul>{for$xindoc("books.xml")/bookstore/book/titleorderby$xreturn<li>{data($x)}</li>}</ul>8.4XML數(shù)據(jù)查詢返回本章首頁
XQueryFLWOR+HTML現(xiàn)在希望去除title元素,而僅僅顯示title元素內(nèi)的數(shù)據(jù)。<ul>{for$xindoc("books.xml")/bookstore/book/titleorderby$xreturn<li>{data($x)}</li>}</ul>結(jié)果將是一個HTML列表:<ul><li>EverydayItalian</li><li>HarryPotter</li><li>LearningXML</li><li>XQueryKickStart</li></ul>8.4XML數(shù)據(jù)查詢返回本章首頁
XQuery語法XQuery對大小寫敏感,XQuery的元素、屬性以及變量必須是合法的XML名稱。XQuery的基礎(chǔ)語法規(guī)則如下:(1)一些基本的語法規(guī)則1)XQuery對大小寫敏感;2)XQuery的元素、屬性以及變量必須是合法的XML名稱;3)XQuery字符串值可使用單引號或雙引號;4)XQuery變量由“$”并跟隨一個名稱來進行定義,舉例,$bookstore;5)XQuery注釋被(:和:)分割,例如,(:XQuery注釋:)。8.4XML數(shù)據(jù)查詢返回本章首頁
XQuery語法(2)XQuery的條件表達式"if-then-else"可以在XQuery中使用。請看下面的例子:for$xindoc("books.xml")/bookstore/bookreturnif($x/@category="CHILDREN") then<child>{data($x/title)}</child> else<adult>{data($x/title)}</adult>請注意"if-then-else"的語法:if表達式后的圓括號是必需的。else也是必需的,不過只寫“else()”也可以。上面的例子的結(jié)果:<adult>EverydayItalian</adult><child>HarryPotter</child><adult>LearningXML</adult><adult>XQueryKickStart</adult>8.4XML數(shù)據(jù)查詢返回本章首頁
XQuery語法(3)XQuery的比較在XQuery中有兩種方法來比較值。1)通用比較:=,!=,<,<=,>,>=;2)值的比較:eq、ne、lt、le、gt、ge。這兩種比較方法差異,請看下面的XQuery表達式:1)$bookstore//book/@q>10如果q屬性的值大于10,上面的表達式的返回值為true。2)$bookstore//book/@qgt10如果僅返回一個q,且它的值大于10,那么表達式返回true。如果不止一個q被返回,則會發(fā)生錯誤。8.4XML數(shù)據(jù)查詢返回本章首頁XQuery添加元素和屬性(1)向結(jié)果添加元素和屬性正如在前面一節(jié)看到的,可以在結(jié)果中引用輸入文件中的元素和屬性:for$xindoc("books.xml")/bookstore/book/titleorderby$xreturn$x上面的XQuery表達式會在結(jié)果中引用title元素和lang屬性,就像這樣:<titlelang="en">EverydayItalian</title><titlelang="en">Harr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)校務(wù)公開制度
- 保密工作制度(參考范本)
- 2026年了解并執(zhí)行ISO33894認(rèn)證制度在組織中的應(yīng)用與實踐要點試題
- 醫(yī)療健康大數(shù)據(jù)分析流程探討
- 2026年文學(xué)知識競賽試題及答案詳解
- 2026年語言學(xué)家跨語言交際能力測試題
- 2026年金融投資風(fēng)險管理5S策略評估題庫及答案
- 2026年會計師實務(wù)操作財務(wù)報表編制實操試題
- 2026年軟件開發(fā)工程師認(rèn)證題庫考試題集及答案解析
- 2026年計算機視覺與圖像處理專業(yè)認(rèn)證題目
- 江蘇省鹽城市大豐區(qū)四校聯(lián)考2025-2026學(xué)年七年級上學(xué)期12月月考歷史試卷(含答案)
- 我國校企合作發(fā)展歷程:二十年綜述
- 能源與動力工程測試技術(shù) 課件 第二章 測量技術(shù)的基本知識確定
- 大學(xué)生心理健康教育(第三版)課件 第九章 珍惜生命 追求幸福
- 做人做事培訓(xùn)課件
- 預(yù)制板粘貼碳纖維加固計算表格
- 辦公樓裝飾裝修工程施工組織設(shè)計方案
- 《出境旅游領(lǐng)隊實務(wù)》課件
- 2024智能網(wǎng)聯(lián)汽車自動駕駛功能仿真試驗方法及要求
- DL-T-5759-2017配電系統(tǒng)電氣裝置安裝工程施工及驗收規(guī)范
- 盈虧問題完整
評論
0/150
提交評論