第11章-XML數(shù)據(jù)庫-完成_第1頁
第11章-XML數(shù)據(jù)庫-完成_第2頁
第11章-XML數(shù)據(jù)庫-完成_第3頁
第11章-XML數(shù)據(jù)庫-完成_第4頁
第11章-XML數(shù)據(jù)庫-完成_第5頁
已閱讀5頁,還剩128頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第11章XML數(shù)據(jù)庫11.1XML簡介11.2XML文檔11.3DTD-XML模式定義語言11.4XMLSchema-XML模式定義語言11.5Xpath查詢語言11.6XQuery查詢語言11.7XML應(yīng)用程序接口11.8SQL/XML標準11.9小結(jié)11.1XML簡介

11.1.1XML的特點與HTTP相比,XML有如下特點:(1)更多的結(jié)構(gòu)和語義。(2)可擴展性。(3)簡單易用。(4)自描述性。(5)數(shù)據(jù)與顯示分離。11.1XML簡介11.1.2XML的應(yīng)用由于XML是一種元語言,可以由使用者自行定義。以下為它的各方面應(yīng)用:(1)XML/EDI電子數(shù)據(jù)交換(2)化學(xué)標識語言CML和數(shù)學(xué)標識語言MATHML(3)開放式軟件描述格式OSD(4)通道定義格式CDF(5)開放式財務(wù)交換OFX11.1XML簡介11.1.3XML的相關(guān)標準(1)XML數(shù)據(jù)模型

XML可以看作是半結(jié)構(gòu)化數(shù)據(jù)的特例,但目前沒有公認的很好的數(shù)據(jù)模型表示它。W3C已經(jīng)提出的有:XMLInformationSet,XPath1.0DataModel,DOMmodel和XMLQueryDataModel??偟膩碚f,這四種模型都采用樹結(jié)構(gòu),XMLQueryDataModel是其中較為完全的一種。11.1XML簡介11.1.3XML的相關(guān)標準(2)XML模式定義:

XML數(shù)據(jù)沒有強制性的模式約束。在XML標準中,有一個可選項:DTD(DocumentTypeDefinition),它描述了XML文檔的結(jié)構(gòu),類似于模式。W3C提出了定義XML模式的另外兩個標準XMLSchema和DocumentContent。11.1XML簡介11.1.3XML的相關(guān)標準(2)XML模式定義

Descriptors(DCDs),它們是對DTD的擴展。XMLSchema用XML語法來定義其文檔的模式,支持對結(jié)構(gòu)和數(shù)據(jù)類型的定義,更適合作為數(shù)據(jù)模式的定義標準。11.1XML簡介11.1.3XML的相關(guān)標準(3)XML查詢語言針對XML數(shù)據(jù)的特點,學(xué)者們已經(jīng)提出了許多的查詢語言,如XML-QL,XQL,及Quit等。在這些已有的查詢語言基礎(chǔ)上,W3C提出了一種查詢語言XQuery,它結(jié)合了其它語言的優(yōu)點,具有非常強大的能力。11.1XML簡介11.1.3XML的相關(guān)標準(3)XML查詢語言XQuery由被稱作查詢模塊的單元組成,這些單元之間彼此相對獨立,可以進行任意層次的嵌套,完成變量綁定、條件判斷、查詢結(jié)果構(gòu)造等功能。XQuery采用了與XPath一致的語法來表示路徑表達式。11.1XML簡介11.1.3XML的相關(guān)標準(4)其它標準

W3C提出了與XML相關(guān)的一系列標準,內(nèi)容涉及數(shù)據(jù)的表示、傳輸、查詢、轉(zhuǎn)化等許多方面。除了前面提到的外,還有描述XML文檔內(nèi)和文檔間元素關(guān)系的XLink和XPointer,以及XML數(shù)據(jù)的傳輸協(xié)議標準SOAP等許多其它標準。11.1XML簡介11.1.4XML的存儲

XML數(shù)據(jù)庫是一個能夠在應(yīng)用中管理XML數(shù)據(jù)和文檔的數(shù)據(jù)庫系統(tǒng),一個XML數(shù)據(jù)庫是XML文檔及其部件的集合,并通過一個具有能夠管理和控制這個文檔集合本身及其所表示信息的系統(tǒng)來維護。11.1XML簡介11.1.4XML的存儲XML數(shù)據(jù)庫不僅是結(jié)構(gòu)化數(shù)據(jù)和半結(jié)構(gòu)化數(shù)據(jù)的存儲庫,像管理其它數(shù)據(jù)一樣,持久的XML數(shù)據(jù)管理包括數(shù)據(jù)的獨立性、集成性、訪問權(quán)限、視圖、完備性、冗余性、一致性以及數(shù)據(jù)恢復(fù)等。11.1XML簡介11.1.4XML的存儲(1)平面文件數(shù)據(jù)庫平面文件是最簡單的存儲方案,就是在一個文件中存儲整個的XML文檔,以多種文本編輯器和幾個XML工具作為數(shù)據(jù)操縱工具來實現(xiàn)XML數(shù)據(jù)的操縱。平面文件存儲方案的優(yōu)點是實現(xiàn)簡單,但是存在兩個主要的局限性:快速訪問和索引。這也影響了平面文件數(shù)據(jù)庫的其它方面的能力:有效的日志更新、事務(wù)和執(zhí)行恢復(fù)。11.1XML簡介11.1.4XML的存儲(2)XED——面向?qū)ο髷?shù)據(jù)庫和關(guān)系型數(shù)據(jù)庫

XED是在原有數(shù)據(jù)庫基礎(chǔ)上擴展了XML支持模塊,完成XML數(shù)據(jù)和數(shù)據(jù)庫之間的格式轉(zhuǎn)換和傳輸。其存儲粒度可以把整個XML文檔作為RDBMS表中一行,或把XML文檔進行解析后,存儲到相應(yīng)的表格中。11.1XML簡介11.1.4XML的存儲(2)XED——面向?qū)ο髷?shù)據(jù)庫和關(guān)系型數(shù)據(jù)庫 這種存儲方案的優(yōu)點是效率高、查詢方便、有大量的支持工具。但也存在著一些缺點:將樹狀結(jié)構(gòu)的XML數(shù)據(jù)轉(zhuǎn)換成關(guān)系數(shù)據(jù)庫的二維關(guān)系表形式時面臨語義信息丟失的問題;XML查詢(例如XPath和XQuery)等不能直接在關(guān)系數(shù)據(jù)庫上執(zhí)行,需要轉(zhuǎn)換成SQL查詢;而且其關(guān)系表形式的查詢結(jié)果還必須得還原成樹狀形式的XML數(shù)據(jù);查詢執(zhí)行和數(shù)據(jù)存儲的代價會受XML數(shù)據(jù)的映射方案的影響可能會變得較大。11.1XML簡介11.1.4XML的存儲(3)NXD——專門的XML數(shù)據(jù)庫管理系統(tǒng)所謂的XML的Native存儲方式,就是存儲時保留數(shù)據(jù)的樹模型模式。根據(jù)一個節(jié)點可以直接找到其孩子節(jié)點、左右兄弟節(jié)點或父親節(jié)點等。以Native方式存儲的XML數(shù)據(jù),保留XML數(shù)據(jù)的樹狀模型,并支持XPath和XQuery等XML查詢以讀取數(shù)據(jù)。存取XML數(shù)據(jù),就無需進行數(shù)據(jù)模式的轉(zhuǎn)換,也不需要進行查詢語言的轉(zhuǎn)換。11.2XML文檔XML規(guī)范定義了一組語法用于描述文檔的內(nèi)容和結(jié)構(gòu)。[例1]XML文檔實例<?xmlversion="1.0"encoding="GB2312"?><!DOCTYPENewListSYSTEM"NewList.DTD"><StudentList> <Student> <Sno>2000012</Sno> <Sname>王林</Sname> <Ssex>男</Ssex> <Sage>19</Sage> <Sdept>計算機</Sdept></Student></StudentList>11.2XML文檔XML規(guī)范要求XML文檔的第1行必須是一個聲明,用于說明XML文檔所遵從的XML標準版本和語言等。XML文檔的主體是一系列的元素。元素有開始標簽(tag)和結(jié)束標簽,標簽又被稱為元素名,兩個標簽之間的部分被叫做元素的內(nèi)容。開始標簽是一個字符串,并且被封閉在符號’<’和’>’中。結(jié)束標簽是在標簽標記字符串之間加上符號’/’。11.2XML文檔在HTML文檔中,標簽是預(yù)先定義好的,有固定的含義,可以被瀏覽器所理解。在XML文檔中,標簽需要用戶自己創(chuàng)建。標簽的命名必須遵守下面的規(guī)則:可以包含字母,數(shù)字和其它字符。不能以數(shù)字或者標點符號開頭。不能以XML(或者xml,Xml,xML...)開頭。不能包含空格11.2XML文檔

一個元素可以包含另外的一個元素,稱為元素嵌套,元素之間的嵌套關(guān)系是一個層次關(guān)系,可以被表示為樹。

XML文檔必須有根元素。元素還可以有任意多個用戶自定義的屬性(Attribute),用于對元素作進一步的描述和說明。

XML中的每個屬性都有自己的名字和值,屬性是開始標簽的一部分。

XML規(guī)范要求屬性值必須放在一對引號內(nèi)。11.2XML文檔屬性的特點有:1.屬性之間的次序是不重要的。一個屬性在同一個元素中不能出現(xiàn)多次??梢月暶鲗傩灶愋蜑镮D,這樣的屬性在整個文檔中必須有唯一值。屬性有時可以使得展現(xiàn)更加簡潔。11.2XML文檔除了元素和屬性,XML還允許使用處理指令和注釋。處理指令以”<?”開始,以”?>”結(jié)束,中間是處理指令名稱和數(shù)據(jù)。注釋以”<!--”開始,以”-->”結(jié)束,這兩個標記之間是用于注釋的內(nèi)容,注釋可以出現(xiàn)在文檔中的任何位置。11.3DTD-XML模式定義語言DTD是一種保證XML文檔格式正確的有效方法。一個DTD文檔包含:元素的定義規(guī)則,元素之間的嵌套關(guān)系的定義規(guī)則,元素可使用的屬性,可使用的實體或符號規(guī)則等。DTD通過具體說明元素和屬性的名稱、元素與子元素之間的嵌套關(guān)系、子元素的出現(xiàn)次數(shù)等來定義XML文檔的結(jié)構(gòu)模型。DTD使用操作符*(0次或多次)、+(至少1次)、?(0次或1次)、|(或選)來定義子元素的出現(xiàn)次數(shù)。11.3DTD-XML模式定義語言 DTD假設(shè)元素的內(nèi)容和屬性的值都是字符串類型,也提供了一些特殊類型。ANY類型能夠是一個任意XML片段;ID類型說明一個屬性的值在整個文檔中是唯一的,被用來在文檔中惟一標識一個元素。IDREF或IDREFS類型說明屬性的取值為另一個或另幾個元素的ID屬性的值,用于實現(xiàn)該元素對其它元素的引用。

11.3DTD-XML模式定義語言

在DTD中元素類型定義由它們的元素內(nèi)容模型來描述,其形式為<!ELEMENT元素名(元素內(nèi)容模型)>

定義屬性時,使用下面的格式:<!ATTLIST元素名(屬性名屬性類型默認聲明)*>11.3DTD-XML模式定義語言

元素名是屬性所屬的元素的名字,屬性名是屬性的命名,屬性類型則用來指定該屬性是屬于有效屬性類型中的哪種類型,默認聲明用來說明該屬性在XML文件中是否可以省略以及默認值是什么。在DTD中共有三種聲明形式:一是#REQUIRED,表示該屬性在XML文件中是必須出現(xiàn)的;二是#IMPLIED,表示該屬性在XML文件中是可以省略的;三是聲明默認屬性值。11.3DTD-XML模式定義語言[例2]XMLDTD實例<!DOCTYPEStudentList[<!ELEMENTStudentList(Student+)><!ELEMENTStudent(Sno,Sname,Ssex,Sage,Sdept,CourseList)><!ELEMENTCourseList(Course+)><!ELEMENTCourse(Cname,Grade)><!ATTLISTCourseCcreditCDATA

#REQUIRED><!ELEMENTSno(#PCDATA)><!ELEMENTSname(#PCDATA)><!ELEMENTSsex(#PCDATA)><!ELEMENTSage(#PCDATA)><!ELEMENTSdept(#PCDATA)><!ELEMENTCname(#PCDATA)><!ELEMENTGrade(#PCDATA)>]>11.4XMLSchema-XML模式定義語言XMLSchema的出現(xiàn)就是為了解決DTD的語法與xml的不一樣這種缺點。

W3C于1998年開始制定XMLSchema的第一個版本,在2001年5月正式由官方推薦。正式推薦的版本包括以下三部分:11.4XMLSchema-XML模式定義語言XMLSchemaPart0:Primer。這是對XMLSchema的非標準介紹,提供了大量示例和說明。XMLSchemaPart1:Structures。這部分描述了XMLSchema的大部分組件。XMLSchemaPart2:Datatypes。這部分包括簡單數(shù)據(jù)類型,解釋了內(nèi)置的數(shù)據(jù)類型和用于限制它們的方面(facet)。11.4XMLSchema-XML模式定義語言[例3]xmlscheme的實例<?xmlversion="1.0"?><xsd:schemaxmlns:xsd="/2001/XMLSchema"> <xsd:elementname="StudentList"> <xsd:complexType> <xsd:sequence> <xsd:elementname="Student"type="StudentType"minOccurs="1"/> </xsd:sequence> </xsd:complexType> </xsd:element></xsd:schema>11.4XMLSchema-XML模式定義語言XMLSchema規(guī)范制定了相關(guān)的標準描述XML文檔的模式,主要有以下幾個方面:1、元素和屬性在XML模式中用xsd:element元素聲明XML文檔的元素,用xsd:attribute元素聲明XML文檔元素的屬性。這兩個元素名稱在前綴xsd所指向的命名空間中有定義。11.4XMLSchema-XML模式定義語言 在每個xsd:element或xsd:attribute元素中,name和type屬性分別用來說明XML文檔元素或?qū)傩缘拿Q和數(shù)據(jù)類型。 每個XML文檔的元素或?qū)傩远加幸粋€數(shù)據(jù)類型。XMLSchema把元素、屬性的概念和其數(shù)據(jù)類型分開,這就允許為結(jié)構(gòu)相同的數(shù)據(jù)定義不同的名稱。11.4XMLSchema-XML模式定義語言

2、數(shù)據(jù)類型 在XMLSchema中有三種方法來指定元素的數(shù)據(jù)類型1.通過在元素聲明中指定Type屬性來引用一個已命名的數(shù)據(jù)類型、內(nèi)置數(shù)據(jù)類型或用戶派生數(shù)據(jù)類型。2.通過定義SimpleType或ComplexType子元素來指定元素的匿名數(shù)據(jù)類型。3.既不指定Type屬性,也不定義SimpleType或ComplexType子元素。11.4XMLSchema-XML模式定義語言(1)簡單類型簡單類型有三種:原子類型、列表類型和聯(lián)合類型。(2)復(fù)雜類型復(fù)雜類型的元素內(nèi)容可以包含子元素或?qū)傩?。XMLSchema中用complexType元素定義一個復(fù)雜類型。它的name屬性用來指定所定義復(fù)雜類型的名稱,可以通過內(nèi)容模型來對復(fù)雜類型進行分類。復(fù)雜類型子元素的順序和結(jié)構(gòu)稱為它的內(nèi)容模型。11.4XMLSchema-XML模式定義語言復(fù)雜類型的內(nèi)容模型共有以下四種:1.簡單內(nèi)容。簡單內(nèi)容只允許有字符數(shù)據(jù),它沒有子元素。2.純元素內(nèi)容。純元素內(nèi)容只有子元素而沒有字符數(shù)據(jù)內(nèi)容。3.混合內(nèi)容?;旌蟽?nèi)容既允許有字符數(shù)據(jù)又允許有子元素。4.空內(nèi)容??諆?nèi)容既不允許有字符數(shù)據(jù)也不允許有子元素,這樣的元素通常帶有屬性。11.4XMLSchema-XML模式定義語言(3)匿名與命名數(shù)據(jù)類型可以是命名的,也可以是匿名的。命名類型總是被定義為全局的,即在模式文檔的最高層,它的父節(jié)點總是Schema,并要求具有惟一的名稱。相反,匿名類型則沒有名稱,它們總是在元素或?qū)傩月暶鲀?nèi)定義,而且只能被該聲明使用一次。11.4XMLSchema-XML模式定義語言(4)全局與局部

XMLSchema組件有全局和局部之分全局組件出現(xiàn)在模式文檔的最高層在整個模式文檔中,它們的名稱必須在同類組件中是惟一的。 局部組件則限定在包含它們的定義或聲明的作用域內(nèi)。 簡單類型和復(fù)雜類型也可以定義為局部的,這時它們是匿名的。

11.4XMLSchema-XML模式定義語言(4)全局與局部 不能被定義它們的元素和屬性聲明之外的其它元素和屬性聲明引用。 全局的元素聲明和類型定義出現(xiàn)在模式文件的最頂層,它的父元素是Schema局部元素和屬性聲明只出現(xiàn)在復(fù)雜類型定義內(nèi)部。11.5XPath查詢語言

XML查詢語言的功能是在XML文檔中找出滿足指定條件的文檔片段。

Xpath是一種輕量級的XML查詢語言,它使用路徑表達式描述要查找的元素、屬性等,路徑表達式與UNIX文件系統(tǒng)定位文件的方法十分類似,例如,/StudentList/Student/Sno就是一個路徑表達式。11.5Xpath查詢語言11.5.1數(shù)據(jù)模型為了能按照統(tǒng)一的方式操縱所有的XML文檔,XPath把XML文檔抽象為樹。XML文檔中的元素、屬性、文本、注釋、處理指令、命名空間作為樹中的節(jié)點,元素之間的嵌套關(guān)系在樹中用節(jié)點之間的父/子關(guān)系和祖先/后裔關(guān)系表示。11.5Xpath查詢語言

11.5.1數(shù)據(jù)模型此樹的一部分如圖所示rootStudentListsStudentStudentSnoSnameSsexSdeptSageCourseLists2000012計算機王林男19CourseCnameGradeCcredit80英語CourseCnameGradeCcredit70管理學(xué)Courses圖11.1一個查詢數(shù)據(jù)模型實例11.5Xpath查詢語言

11.5.1數(shù)據(jù)模型對于Xpath的樹模型要注意以下幾點1、樹是有序樹,節(jié)點之間的父子關(guān)系、兄弟關(guān)系必須同它們在文檔中的次序一致,采用深度優(yōu)先對樹進行遍歷,可以得到原始的文檔。2、根據(jù)樹的術(shù)語,如果節(jié)點P是節(jié)點C的父親,則節(jié)點C一定是節(jié)點P的孩子節(jié)點。11.5Xpath查詢語言11.5.1數(shù)據(jù)模型3、文檔中元素的開始標簽和結(jié)束標簽之間的文本在數(shù)中用一個節(jié)點表示,并作為元素的孩子節(jié)點。但是,卻不為屬性的值建立一個節(jié)點,屬性的值作為屬性節(jié)點的一部分被保存。4、為了更清晰的表示,圖11.1中的每個節(jié)點我們只給出一部分內(nèi)容,實際上,每種節(jié)點類型是一個類,有若干個屬性和方法,節(jié)點是節(jié)點類型的實例。11.5Xpath查詢語言11.5.2路徑表達式 XPath路徑表達式有以下兩種形式: /locationStep1/locationStep2/.....(1) locationStep1/locationStep2/.....(2)11.5Xpath查詢語言11.5.2路徑表達式 形式(1)為絕對路徑表達式,表示從樹模型的根節(jié)點開始,如何走到目標節(jié)點。 形式(2)為相對路徑表達式,表示從當(dāng)前節(jié)點(又叫做上下文節(jié)點)如何走到目標節(jié)點。11.5Xpath查詢語言11.5.2路徑表達式路徑表達式由若干個定位步(locationStep)組成,每個定位步指明了下一步要走到哪些節(jié)點,定位步的形式為: Axis::nodeSelector[selectionCondition]

定位步的結(jié)果是一個節(jié)點的集合,這些節(jié)點具有相同的節(jié)點類型。 XPath定義了13個軸,如下表所示:11.5Xpath查詢語言表11.1XPath的軸(a)軸名稱結(jié)果self選取當(dāng)前節(jié)點。parent選取當(dāng)前節(jié)點的父節(jié)點。child選取當(dāng)前節(jié)點的所有子節(jié)點。ancestor選取當(dāng)前節(jié)點的所有祖先(父、祖父等)ancestor-or-self選取當(dāng)前節(jié)點的所有祖先(父、祖父等)以及當(dāng)前節(jié)點本身descendant選取當(dāng)前節(jié)點的所有后代節(jié)點(子、孫等)。descendant-or-self選取當(dāng)前節(jié)點的所有后代節(jié)點(子、孫等)以及當(dāng)前節(jié)點本身。preceding選取文檔中當(dāng)前節(jié)點的開始標簽之前的所有節(jié)點。11.5Xpath查詢語言preceding-sibling選取當(dāng)前節(jié)點之前的所有同級節(jié)點。following選取文檔中當(dāng)前節(jié)點的結(jié)束標簽之后的所有節(jié)點。following-sibling選擇上下文節(jié)點的所有在其后(右)的兄弟,如果上下文節(jié)點是屬性節(jié)點或命名空間節(jié)點,則followin-sibling軸為空。attribute選取當(dāng)前節(jié)點的所有屬性namespace選取當(dāng)前節(jié)點的所有命名空間節(jié)點表11.1XPath的軸(b)11.5Xpath查詢語言11.5.2路徑表達式 明確了定位步的語義(即求值方法)后,下面給出XPath路徑表達式語義: 從當(dāng)前節(jié)點出發(fā),找出所有l(wèi)ocationStep1到達的節(jié)點,對于其中每個節(jié)點N,找出所有從N出發(fā),經(jīng)過locationStep2到達的節(jié)點,然后將所有經(jīng)過locationStep2到達的節(jié)點合并,再對合并中的每一個節(jié)點,應(yīng)用locationStep3……直到最后一個步驟,最后一步得到的節(jié)點集合就是路徑表達式的結(jié)果。11.5Xpath查詢語言[例4]

找到所有Sno節(jié)點/child::StudentList/child::Student/child::Sno路徑表達式可以使用簡縮句法,常用的縮減句法有:self::→./child::→//descendant-or-self::node()→//parent::→..attribute::→@謂詞[position()=數(shù)值表達式]→[數(shù)值表達式]例4的簡寫路徑表達式為:/StudentList/Student/Sno11.5Xpath查詢語言[例5]

找出王林所選修的學(xué)分大于4的課程名稱節(jié)點 //Student[Sname="王林"]//Course[@Ccredit>"4"]/Cname 將所有的Student節(jié)點作為一個集合,從中選擇出有Sname子元素,并且Sname的值等于"王林"的Student節(jié)點。把每個篩選出的Student節(jié)點作為上下文節(jié)點,找到它的后裔節(jié)點Course,并且這個后裔節(jié)點必須有屬性Ccredit,其值大于4。將滿足條件的Course作為上下文節(jié)點,找出其Cname孩子節(jié)點。11.5Xpath查詢語言11.5.3XPath函數(shù)XPath函數(shù)大體上可以分為以下幾類:1、存取函數(shù):各種節(jié)點類型共有的函數(shù),用于讀取節(jié)點的屬性值。2、錯誤跟蹤函數(shù):對查詢進行Debug,向外部環(huán)境傳遞錯誤信息。3、數(shù)學(xué)函數(shù):常用的數(shù)學(xué)函數(shù),如abs()。4、字符串函數(shù):用于處理字符串的系列函數(shù),如compare()、concat()。11.5Xpath查詢語言5、布爾值函數(shù):返回邏輯值,如boolean()。6、時間日期函數(shù):用于處理時間和日期的系列函數(shù),如datetime()。7、限定名(QName)相關(guān)函數(shù):返回節(jié)點的Qname、localname和namespace,如QName()、local-name-from-QName()。8、節(jié)點相關(guān)函數(shù):返回節(jié)點的名字等,如root()、name()。11.5Xpath查詢語言[例6]

返回文檔中第1個學(xué)生的信息。

//Student[position()=1][例7]

給出元素Student的限定名、本地名和命名空間的URI。name(//Student) 返回sql:Studentlocal-name((//Student)[1]) 返回Studentnamespace-uri((//Student)[1]) 返回/Student.XML[例8]

給出學(xué)號為2000012的Student節(jié)點ID("2000012")返回的節(jié)點同//Student[1]11.6.1FLWOR表達式

XQuery最有特色且最重要的語法類型之一是FLWOR(讀作flower)表達式,和SQL的select-from-where語句類似,并且具有相似的功能。 FLOWER各字母分別代表for、let、where、order以及return表達式。每個FLWOR表達式都有一個或多個for子句、一個或多個let子句、一個可選的where子句以及一個return子句。11.6XQuery查詢語言1.for子句就像SQL的from子句,在一個序列上變動,序列是項(item)的集合,項可以是節(jié)點也可以是原子值。2.let子句將變量直接與一個完整的表達式綁定在一起。與for子句循環(huán)遍歷序列中的每個項所不同的是let子句將變量綁定到整個序列。11.6XQuery查詢語言3.where子句如同SQL的where子句一樣,對來自for子句的變量進行過濾。4.order子句能指定結(jié)果的順序,這與SQL中的orderby子句非常類似。5.return子句構(gòu)造XML形式的結(jié)果。11.6XQuery查詢語言[例9]

構(gòu)造一個XML文檔,文檔中描述了每個學(xué)生所選修的超過4學(xué)分的課程名稱for$Studentindocument("Student.XML")//Studentlet$Sname=$Student/Snamelet$Course=$Student//Course[@Ccredit>="4"]return<CourseInfo>{$Sname}{$Course/Cname}</CourseInfo>11.6XQuery查詢語言將上面的查詢應(yīng)用于例1的XML文檔,則返回的結(jié)果為:<CourseInfo> <Sname>王林</Sname> <Cname>英語</Cname> <Cname>管理學(xué)</Cname> <Cname>數(shù)據(jù)庫原理</Cname> <Cname>離散數(shù)學(xué)</Cname></CourseInfo><CourseInfo> <Sname>張大民</Sname> <Cname>英語</Cname></CourseInfo>11.6XQuery查詢語言11.6.2連接Student.XML的部分內(nèi)容<Student> <row> <Sno>2000012</Sno> <Sname>王林</Sname> <Ssex>男</Ssex> <Sage>19</Sage> <Sdept>計算機</Sdept> </row></Student>11.6XQuery查詢語言Course.XML的部分內(nèi)容<Course> <row> <Cno>1156</Cno> <Cname>英語</Cname> <Cpno></Cpno> <Ccredit>6</Ccredit> </row></Course>11.6XQuery查詢語言SC.XML的部分內(nèi)容<SC> <row> <Sno>2000012</Sno> <Cno>1156</Cno> <Grade>80</Grade> </row></SC>11.6XQuery查詢語言[例10]

求學(xué)生2000012選修的每門課程的名稱和成績<root>for$Cnoindocument("SC.XML")//Sno[text()="2000012"]/Cno,$Courseindocument("Course.XML")//rowwhere$Cno=$Course[Sno="2000012"]/Cnoreturn {$Course/Cname} {$Cno/../Grade}</root>11.6XQuery查詢語言11.6.3嵌套查詢[例11]

求出每位學(xué)生的平均成績。<root> for$Snoindocument("Student.XML")//Sno return {$Sno/../Sname} <avgGrade> {avg(document("SC.XML")/row[Sno=$Sno]/Grade)} </avg-Grade></root>11.6XQuery查詢語言11.6.4結(jié)果的排序 可以用orderby子句對查詢結(jié)果排序。[例12]排序輸出學(xué)生的名字。 for$Snameindocument("Student.XML")//Sname orderby$Sname return {$Sname}11.6XQuery查詢語言

隨著XML應(yīng)用領(lǐng)域的不斷推廣,各種處理XML文檔的編程接口也應(yīng)運而生。其中JAXP(全稱JavaAPIforXMLProcessing)是使用Java語言編寫的編程接口,JAXP對XML文檔有基于對象(例如,DOM)和基于事件的兩種解析方式?;谑录慕馕龇绞接址譃橥迫胧浇馕觯ɡ鏢AX)和拉出式解析(例如Satx)11.7XML應(yīng)用程序接口11.7.1SAX SAX是SimpleAPIforXML的縮寫,它并不是由W3C官方所提出的標準,而是在1998年的早些時候由DavidMegginson所提出,目標是成為基于事件驅(qū)動的XML文檔解析模式的標準API。

11.7XML應(yīng)用程序接口11.7.1SAXSAX解析xml如圖11.211.7XML應(yīng)用程序接口圖11.2SAX解析XML文檔11.7.2DOM DOM(文檔對象模型)是對XML數(shù)據(jù)的描述體系,它用樹型結(jié)構(gòu)來保存XML文檔。此外,DOM也包括了解析、處理XML數(shù)據(jù)的API。

DOM整體上的結(jié)構(gòu)是一個Composite模式。所有的XML單元,無論是文檔、元素還是屬性、文本,在DOM中都是一個Node(節(jié)點)。11.7XML應(yīng)用程序接口11.7.2DOMDOM的存儲方式如圖11.311.7XML應(yīng)用程序接口圖11.3DOM存儲形式11.7.2DOM下面介紹一下如何操作文檔:1、文檔的生成用DOM處理XML數(shù)據(jù),需要以下三個步驟1.創(chuàng)建DocumentBuilderFactory。2.創(chuàng)建DocumentBuilder。DocumentBuilder將對輸入實例進行解析以創(chuàng)建Document對象。3.解析輸入的XML,創(chuàng)建Document對象。11.7XML應(yīng)用程序接口11.7.2DOM2、文檔的遍歷 DOM采用了Composite模式。Node類是所有XML單元的基類,Element、Attr、Document等等都是Node的派生類。每個Node都可以包容其它的Node,也可以包容文本格式的內(nèi)容。

11.7XML應(yīng)用程序接口11.7.2DOM

首先要獲取文檔的根節(jié)點Document.getDocumentElement()方法。 獲取根節(jié)點后,Node.getChildNodes()方法得到該節(jié)點的所有直接孩子節(jié)點,從而遍歷整個樹型結(jié)構(gòu)。11.7XML應(yīng)用程序接口11.7.2DOM 在DOM中“元素”是指一對標簽(tag)及其內(nèi)部包含的字符串值的總和,處理一個元素的內(nèi)容時,需要兩個步驟:

1.找到代表該元素的節(jié)點

2.處理該節(jié)點的第一個孩子節(jié)點對于樹型數(shù)據(jù)結(jié)構(gòu),常見的節(jié)點處理就是節(jié)點的插入、刪除和替換。

11.7XML應(yīng)用程序接口11.8.1發(fā)布XML文檔

SQL/XML提供了一組函數(shù)發(fā)布XML文檔 其函數(shù)如下:

1、SQL/XML標準 (1)XMLELEMENT和MLATTRIBUTES函數(shù)。 這兩個函數(shù)分別生成XML文檔的基本構(gòu)成要素:元素和屬性。

11.8SQL/XML標準11.8.1發(fā)布XML文檔

XMLELEMENT函數(shù)的基本格式為: XMLELEMENT(Name"<tagname>", [attributeList],<content>) 其中,Name是保留字,tagname是標簽的名字,attributeList是一組屬性名和值,由XMLATTRIBUTES函數(shù)生成,content是元素的內(nèi)容,既可以是字符串,也可以是一組子元素。 XMLATTRIBUTES函數(shù)的格式更為簡練,只有一個參數(shù),例如,S.SnoAS"Sno",引號內(nèi)的Sno是屬性的名字,S.Sno提供了屬性的值。11.8SQL/XML標準11.8.1發(fā)布XML文檔(2)XMLGEN函數(shù) XMLGEN函數(shù)與XMLELEMENT函數(shù)的功能相似,但是XMLGEN函數(shù)更簡潔。它的第一個參數(shù)是XML文檔模板,模板中有形如{$name}的占位符,其它的參數(shù)用于替換占位符。11.8SQL/XML標準11.8.1發(fā)布XML文檔(3)XMLFOREST函數(shù)

XMLFOREST函數(shù)把每個參數(shù)轉(zhuǎn)換成一個XML元素。默認情況下,列名就是元素的名稱,也可以用AS短語為元素命名。(4)XMLCOMMENT函數(shù)

XMLCOMMENT函數(shù)產(chǎn)生一條注釋。11.8SQL/XML標準11.8.1發(fā)布XML文檔(5)XMLPI函數(shù)

XMLPI函數(shù)用于生成處理指令。(6)XMLNAMESPACES函數(shù)

XMLPI函數(shù)用于生成命名空間。(7)XMLAGG函數(shù)

XMLAGG函數(shù)處理同一個分組中的每個元組。11.8SQL/XML標準11.8.1發(fā)布XML文檔2、SQLServer2005中的發(fā)布方法 在SQLServer中,獲得一個XML類型結(jié)果集的最簡單的方法就是使用FORXML命令

FORXML命令的語法如下所示:

[FOR{BROWSE|<XML>}]11.8SQL/XML標準11.8.1發(fā)布XML文檔其中,XML的定義如下:<XML>::=XML{{RAW[('ElementName')]|AUTO}[<CommonDirectives>[,{XMLDATA|XMLSCHEMA[(TargetNameSpaceURI)]}][,ELEMENTS[XSINIL|ABSENT]]11.8SQL/XML標準11.8.1發(fā)布XML文檔|EXPLICIT[<CommonDirectives>[,XMLDATA]]|PATH[('ElementName')][<CommonDirectives>[,ELEMENTS[XSINIL|ABSENT]]]}11.8SQL/XML標準11.8.1發(fā)布XML文檔其中主要的參數(shù)如表11.1所示

11.8SQL/XML標準表11.1主要的參數(shù)參數(shù)名稱含義RAW[('ElementName')]生成XML文檔時,將查詢所得數(shù)據(jù)集中的每行記錄作為一個元素,且元素的名稱為ElementNameAUTO查詢結(jié)果將以XML的層次結(jié)構(gòu)返回給用戶,其中查詢結(jié)果中至少有一個字段將被指定為元素,而其它字段可能會被指定為屬性XMLDATA返回XMLSchema類型的XML文檔EXPLICIT為返回的結(jié)果集顯式地指定層次關(guān)系PATH借助PATH參數(shù),可以通過設(shè)計嵌套的FORXML查詢來組織元素和屬性,例如設(shè)置用于表示復(fù)雜屬性的嵌套方式等ROOT用于指定根元素11.8.1發(fā)布XML文檔(1)FORXMLRAW RAW模式將查詢結(jié)果集中的每一行轉(zhuǎn)換為帶有通用標識符<row>或用戶提供的元素名稱的XML元素。默認情況下,行集中非NULL的列值都將映射為<row>元素的一個屬性。11.8SQL/XML標準[例13]查詢所有學(xué)生的信息,用XML形式返回。代碼如下: SELECTSno,Sname,Ssex,Sage,SdeptFROMStudentFORXMLRAW11.8SQL/XML標準產(chǎn)生如下結(jié)果:<rowSno="2000012"Sname="王林"Ssex="男" Sage="19"Sdept="計算機"/><rowSno="2000113"Sname="張大民"Ssex="男" Sage="18"Sdept="管理"/><rowSno="2000256"Sname="顧芳"Ssex="女" Sage="19"Sdept="管理"/><rowSno="2000278"Sname="姜凡"Ssex="男" Sage="19"Sdept="管理"/><rowSno="2000014"Sname="葛波"Ssex="女" Sage="18"Sdept="計算機"/>11.8SQL/XML標準(2)FORXMLAUTO

如果在將查詢結(jié)果集轉(zhuǎn)換為XML文檔時,使用了AUTO關(guān)鍵字,那么查詢結(jié)果集將以層次結(jié)構(gòu)的形式組織起來。 選擇所有學(xué)生的信息,用XML形式返回。代碼入下: SELECTSno,Sname,Ssex,Sage,Sdept FROMStudent FORXMLAUTO

11.8SQL/XML標準結(jié)果如下:<StudentSno="2000012"Sname="王林" Ssex="男"Sage="19"Sdept="計算機"/><StudentSno="2000113"Sname="張大民" Ssex="男"Sage="18"Sdept="管理"/><StudentSno="2000256"Sname="顧芳" Ssex="女"Sage="19"Sdept="管理"/><StudentSno="2000278"Sname="姜凡" Ssex="男"Sage="19"Sdept="管理"/><StudentSno="2000014"Sname="葛波" Ssex="女"Sage="18"Sdept="計算機"/>11.8SQL/XML標準(3)FORXMLEXPLICIT

使用FORXMLEXPLICIT選項后,查詢結(jié)果集將被轉(zhuǎn)換為XML文檔。該XML文檔的結(jié)構(gòu)與結(jié)果集中的結(jié)果一致。因此,從設(shè)計查詢語句時就應(yīng)開始考慮最終生成的XML文檔。 在EXPLICIT模式中,SELECT語句中的前兩個字段必須分別命名為TAG和PARENT。TAG和PARENT是元數(shù)據(jù)字段,使用它們可以確定查詢結(jié)果集的XML文檔中元素的父子關(guān)系,即嵌套關(guān)系。11.8SQL/XML標準 其中TAG字段是查詢字段列表中的第一個字段。TAG字段用于存儲當(dāng)前元素的標記值。標記號可以使用的值是1到255。 PARENT字段用于存儲當(dāng)前元素的父元素標記號。如果這一列中的值是0或NULL表明相應(yīng)的元素沒有父級。該元素將作為頂級元素添加到XML。 在添加上述兩個附加字段后,就要定義元素之間的關(guān)系,即層次關(guān)系。11.8SQL/XML標準 對于層次關(guān)系,只需按順序完成以下步驟即可:1、使用TAG字段為每一個將要作為元素在XML文檔中輸出的別名(通??梢允褂帽砻?定義標號。2、使用PARENT字段為本元素指定一個父元素標號,與該標號對應(yīng)的元素,將成為本元素的父元素(NULL或0表示本元素為根元素)。 重復(fù)上面的步驟就可以產(chǎn)生想要的XML文檔。11.8SQL/XML標準 在編寫EXPLICIT模式查詢時,常用格式如下:ElementName!TagNumber!AttributeName!Directive 其中ElementName是所生成元素的通用標識符。例如,如果將ElementName指定為Student,將生成<Student>元素。 TagNumber是分配給元素的唯一標記值。在兩個元數(shù)據(jù)列(Tag和Parent)的幫助下,此值將確定所得到的XML中的元素的嵌套。 AttributeName提供要在指定的ElementName中構(gòu)造的屬性的名稱。 Directive是可選的,可以使用它來提供有關(guān)XML構(gòu)造的其它信息。11.8SQL/XML標準 例如查詢所有學(xué)生的信息,并且把每列作為一個元素,代碼如下:SELECT1ASTag,0ASParent,Snoas[Student!1!Sno!ELEMENT],SnameAS[Student!1!Sname!ELEMENT],SsexAS[Student!1!Ssex!ELEMENT],SageAS[Student!1!Sage!ELEMENT],Sdeptas[Student!1!Sdept!ELEMENT]FROMStudentFORXMLEXPLICIT11.8SQL/XML標準產(chǎn)生的部分結(jié)果如下:<Student> <Sno>2000012</Sno> <Sname>王林</Sname> <Ssex>男</Ssex> <Sage>19</Sage> <Sdept>計算機</Sdept></Student>……11.8SQL/XML標準11.8.1發(fā)布XML文檔(4)FORXMLPATH

除選項EXPLICIT之外,SQLServer2005還提供了一種較為簡便的方法來定義元素之間的層次關(guān)系,即FORXMLPATH選項。PATH選項使用嵌套的FORXML查詢有機地將元素和屬性組合在一起。

11.8SQL/XML標準1、沒有名稱的列 任何沒有名稱的列都將被內(nèi)聯(lián)。例如,未指定列別名的計算列或嵌套標量查詢將生成沒有名稱的列。如果該列屬于XML類型,則將插入該數(shù)據(jù)類型的實例的內(nèi)容。否則,列內(nèi)容將被作為文本節(jié)點插入。 例如: SELECT10+10 FORXMLPATH 結(jié)果為: <row>20</row>11.8SQL/XML標準例如上面的代碼可以改為: SELECT10+10 FORXMLPATH('Number')結(jié)果為: <Number>20</Number>11.8SQL/XML標準 PATH模式將插入一個XML類型的實例。 SELECT Sno,Sname,PhoneList.query('//Phone[ @type="home"]') FROMStudent FORXMLPATH 產(chǎn)生結(jié)果如下: <row> <Sno>2000012</Sno> <Sname>王林</Sname> <Phonetype="home">87654321</Phone> </row>11.8SQL/XML標準2、列名以@符號開頭

如果列名以@符號開頭并且不包含斜杠標記(/),將創(chuàng)建包含相應(yīng)列值的<row>元素的屬性。例如,以下查詢將返回包含兩列(@Id和Sname)的行集。在生成的XML中,將向相應(yīng)的<row>元素添加Id屬性并為其分配Sno值。11.8SQL/XML標準SELECTSnoAS"@Id",Sname FROMStudent WHERESno='2000012' FORXMLPATH('Student')產(chǎn)生的部分結(jié)果如下:<StudentId="2000012"> <Sname>王林</Sname> </Student> <StudentId="2000113"> <Sname>張大民</Sname></Student>……11.8SQL/XML標準3、列名不以@符號開頭并包含斜杠標記(/) 如果列名不以@符號開頭,但包含斜杠標記(/),則該列名就指明了一個XML層次結(jié)構(gòu)。例如,列名為“Name1/Name2/Name3.../Namen”,其中每個Namei表示嵌套在當(dāng)前行元素(i=1)中的元素名稱或名為Namei-1的元素下的元素名稱。如果Namen以@開頭,則它將映射到Namen-1元素的屬性。11.8SQL/XML標準例如查詢所有學(xué)生的信息。代碼如下:SELECTSno"@Id", Sname"Student/Sname", Ssex"Student/Ssex", Sage"Student/Sage", Sdept"Student/Sdept"FROMStudentFORXMLPATH('StudentList')11.8SQL/XML標準產(chǎn)生的部分結(jié)果如下:<StudentListId="2000012"> <Student> <Sname>王林</Sname> <Ssex>男</Ssex> <Sage>19</Sage> <Sdept>計算機</Sdept> </Student></StudentList>……11.8SQL/XML標準4、名稱被指定為通配符的列 如果指定的列名是一個通配符(*),則將像沒有指定列名那樣插入此列的內(nèi)容。如果此列不是XML類型的列,則此列的內(nèi)容將作為文本節(jié)點插入,如下所示 SELECTSno"@Id",Sname"*" FROMStudent FORXMLPATH('Student')11.8SQL/XML標準結(jié)果如下:<StudentId="2000012">王林</Student><StudentId="2000113">張大民</Student><StudentId="2000256">顧芳</Student><StudentId="2000278">姜凡</Student><StudentId="2000014">葛波</Student>11.8SQL/XML標準11.8.2存儲和查詢XML文檔(1)XML數(shù)據(jù)類型 以下給出了XML數(shù)據(jù)類型可以使用的方式

1.作為表中的一列

2.作為T-SQL的變量

3.作為存儲過程或者是用戶自定義函數(shù)的參數(shù)

4.作為用戶自定義函數(shù)的返回值11.8SQL/XML標準 在Student表中增加一個列PhoneList,用于存放一個學(xué)生的各種聯(lián)系電話,這些聯(lián)系電話被組織成XML文檔。 CREATETABLEStudent( Sno CHAR(7)PRIMARYKEY, Sname CHAR(8)NOTNULL, Ssex CHAR(2), Sage SMALLINT, Sdept CHAR(20), PhoneList XML);11.8SQL/XML標準例如,向表中插入一個學(xué)生的信息:INSERTINTOStudentVALUES('2000012','王林','男',19,'計算機','<PhoneList><Phonetype="home">12345678</Phone><Phonetype="apartment">xxxxxxxx</Phone><Phonetype="mobile">133xxxxxxxx</Phone><Phonetype="mobile">139xxxxxxxx</Phone></PhoneList>');11.8SQL/XML標準11.8.2存儲和查詢XML文檔(2)查詢

SQLServer提供了若干函數(shù)對XML數(shù)據(jù)類型的列進行操縱,與查詢相關(guān)的有三個函數(shù),query()、value()和exist()。

Query()方法用于查詢XML實例中滿足一定條件的節(jié)點。11.8SQL/XML標準11.8.2存儲和查詢XML文檔(2)查詢 value()方法用于讀取節(jié)點的值,并轉(zhuǎn)換為指定的SQL數(shù)據(jù)類型。其格式為:value(XQuery,SQLType)。 其中,XQuery參數(shù)是XQuery表達式,表達式的結(jié)果最多包含一個節(jié)點,否則將發(fā)生錯誤。SQLType是SQL的數(shù)據(jù)類型。

11.8SQL/XML標準11.8.2存儲和查詢XML文檔(2)查詢 exist()方法用于判斷查詢結(jié)果是否是空集合,根據(jù)查詢結(jié)果的不同,函數(shù)有3種返回值: 0:查詢結(jié)果為空集合 1:查詢結(jié)果至少包含了一個XML節(jié)點 NULL:執(zhí)行查詢的XML數(shù)據(jù)類型實例包含 NULL 其格式為:exist(XQuery)`11.8SQL/XML標準[例14]

查詢學(xué)生2000012的全部電話信息SELECTPhoneListFROMStudentWHERESno='2000012'11.8SQL/XML標準 PhoneList列的數(shù)據(jù)類型是XML,查詢結(jié)果是一個XML文檔。<PhoneList><Phonetype="home">12345678</Phone><Phonetype="apartment">xxxxxxxx</Phone><Phonetype="mobile">133xxxxxxxx</Phone><Phonetype="mobile">139xxxxxxxx</Phone></PhoneList>11.8SQL/XML標準[例15]

查詢學(xué)生2000012的家庭電話SELECTPhoneList.query('//Phone[@type="home"]')FROMStudentWHERESno='2000012';Query()方法返回的是節(jié)點的集合,因此,查詢結(jié)果為:<Phonetype="home">12345678</Phone>11.8SQL/XML標準[例16]

查詢年學(xué)生2000012的家庭電話號碼。SELECTPhoneList.value('(//Phone[@type="mobile"]/text())[1]','varchar(20)')FROMStudentWHERESno='2000012';由于路徑表達式//Phone[@type="mobile"]/text()可能返回多個文本節(jié)點,而value函數(shù)要求最多只能是一個節(jié)點,因此,增加了限制條件[1]。查詢結(jié)果是133xxxxxxxx11.8SQL/XML標準[例17]

查詢家庭電話號碼是12345678的學(xué)生的姓名SELECTSnameFROMStudentWHEREPhoneList.value('(//Phone[@type="home"]/text())[1]','varchar(20)')='12345678'11.8SQL/XML標準11.8.2存儲和查詢XML文檔(3)XMLDML XQuery1.0規(guī)范沒有定義修改XML文檔的語法,目前正在開發(fā)相關(guān)的工作草案。SQLSever2005提供了modify函數(shù)用于修改XML文檔的,其語法類似于XQuery。modify函數(shù)可以刪除、增加、替換文檔中的節(jié)點。11.8SQL/XML標準1.modify('deleteexpression') expression是一個Xpath表達式,返回一個節(jié)點序列,delete命令表示從文檔中刪除節(jié)點序列中的所有節(jié)點。[例18]

刪除學(xué)生王林的所有移動電話。UPDATEStudentSETPhoneList.modify('delete//Phone[@type="mobile"]')WHERESname='王林';11.8SQL/XML標準語句執(zhí)行后,王林的通訊錄中只有兩部電話(home和apartment兩個電話號碼):<PhoneList><Phonetype="home">12345678</Phone><Phonetype="apartment">xxxxxxxx</Phone></PhoneList>11.8SQL/XML標準2.modify('insertexpression') insert語句將一個節(jié)點或者一個有序的序列插入XML文檔,這些新插入的節(jié)點作為某個節(jié)點的孩子或者兄弟節(jié)點。 Insert語句的一般格式如下: InsertExpression1({asfirst|aslast}into|after|before}Expression2)11.8SQL/XML標準 其中,Expression1是要插入的節(jié)點或序列,Expression2是要插入的目

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論