摘要:首先介紹了RDF查詢語言需要滿足的一般特性需求,即表達能力、模式感知、程序操縱、合成性和語義功能。然后介紹了七種具有代表性的RDF查詢語言(RQL、RDQL、TRIPLE、N3、Versa、SeRQL、SPARQL),以及國外對RDF查詢語言在支持圖形匹配、關系操作、聚合和分組功能、遞歸、具體化、容器、命名空間、語言標簽、字符和數據類型、繼承等方面的比較研究。
關鍵詞:RDF;語義網;查詢語言:SPARQL
0引言
資源描述框架(RDF)是W3C推薦的用于描述網絡資源元數據的模型,被認為是語義網上數據表達和交換的重要標準。隨著越來越多的組織和個人開始使用RDF來描述其網絡資源,對于RDF查詢語言的需求也越來越迫切。目前研究界已提出了幾個RDF查詢語言,一些是依據傳統的數據庫查詢語言(如SQL,OQL),另一些則是受了規則語言(rule language)的啟發。雖然目前還沒有標準化的RDF查詢語言,但在學術界、語義網和W3C已開始討論建立RDF查詢語言標準。W3C最近成立了一個工作組專門致力于RDF數據的訪問和查詢研究。本文中將介紹七種具有代表性的RDF查詢語言和國外研究者對RDF查詢語言的比較研究。
1 RDF查詢語言的一般特性需求
RDF查詢語言應該具備如下特性:
表達能力表達能力就是給定語言的查詢能力。查詢語言應該至少支持關系代數提供的方法(即關系完整性)。通常,表達能力又受到其他特征(如安全性)和查詢執行效率的限制。表達能力包括:
(1)路徑表達語法對RDF圖的導航能力。
(2)類/屬性/層次的導航功能。
(3)對具體化聲明的查詢能力。
(4)值比較和數據類型的支持能力。
(5)處理可選值的功能。
模式感知查詢語言應該能夠實現模式感知。當結構定義之后,查詢語言應該能夠利用模式進行類型檢驗、優化和繼承。這項需求與形式化語義和表達能力需求緊密相關。就RDF來說,這意味著查詢語言應能夠意識到RDF和RDF模式的語義。
程序操縱 查詢語義應該足夠簡單,這意味著人們更愿意使用一個容易解析和分解的查詢語言,而不是一個更具友好性的查詢語言。盡管如此,也需要在二者之間達成平衡。一個查詢語言在自動處理方面做得再好,但易用性方面做得不好,這個查詢語言也不能夠被接受。與這項需求相關的考慮包括:結構簡潔,避免冗余,并在方便性和可讀性方面達成平衡。
合成性這項需求規定一個查詢的輸出可以被用作另一個查詢的輸入。當人們想把—個大的查詢分解為一些小的查詢或想序列化地執行幾個查詢,把第一查詢的輸出做為第二個查詢的輸入時,這項功能就很有效。具有這項功能的查詢語言也能夠進行視圖定義。就RDF查詢語言來說,合成性意味著一個查詢的結果能夠被表示為一個RDF圖。
語義對查詢語言來說,精確的形式化語言很重要,如果沒有這一點,查詢轉換和優化根本就不可能實現。就RDF查詢語言來說,這種形式化的描述可以通過提供一個RDF形式化模型映射而獲得。
2查詢語言介紹
從RDF查詢語言開始出現到現在,具有代表性的查詢語言主要有七種。
2.1 RQL
RQL是第一個類型聲明性的RDF查詢語言,是在歐盟的項目C-Web和MesMuses中產生的。RQL主要應用于希臘ICS-FORTH的RDF配套工具和Sesame的Aidministrator。RQL由一組基本的查詢和能夠通過功能合成而建立新查詢的迭代器(iterators)所定義,支持一般的路徑表達。RQL依賴于一個形式化的圖模型,并允許借助于一個或多個模式來解釋雙重的資源描述。RQL的獨特之處是完美地結合了RQL模式和數據路徑表達來滿足語義網應用(如知識門戶)的需求。
2.2 RDQL
RDQL 最初是在Jenal.2.O中公布的,應用在Sesame、RDFStore、PHP XML Classes、3Store等系統中。RDQL包括被表達為一組三元組的圖模式,每個三元組由命名變量和RDF值(URI和Literals)組成。RDQL查詢將RDF圖完全看作數據。其語法遵循類SQL的select模式,但省略了from子句。例如:select?)where)(?p,
2.3 TRIPLE
Triple是一個層次化、模型化的規則語言,目標是支持需要RDF查詢、推理和轉換的應用程序。Triple語言基于Horn邏輯并且借用了F-Logic的許多特征,提供了一個類Prolog語法和基于RDF的語法。RDF三元組(s,p,o)用F—Logic表達式s p->ol來表示,并可以嵌套。例如,表達式S[Pl->01,P2->02[P3->03ll與三個RDF三元組(S,PI,01),(S,P2,02),(02,P3,03)等價。Triple包括兩層:Horn邏輯的語法擴展層,它支持基本的RDF組成(如資源和聲明);RDF的語義擴展層(RDF模式語義可以被直接定義為一個參數化模塊,OIL和DAML+OIL則需要與外部推理組件的交互)。Triple不區分規則和查詢,比如:FORALL X<-(x[rdfs:label->\"foo\"1.)@default:In返回所有具有“foo”標號的資源。
2.4 N3
Notation3(N3)為RDF提供了一個基于文本的語法,因而N3的數據模型與RDF的數據模型一致。除此之外,N3允許定義規則,這些規則使用一種特殊的語法來表達,如?y rdfs:label'Too”=>?y a:QueryResult。這樣的規則,雖然本身不是一個查詢語言,但可以被用于查詢。查詢必須以規則的形式存儲在一個專門的文件中。N3的CWM過濾命令能夠自動選擇由規則所產生的數據。雖然N3實現了正交、閉集和安全性等特征,但使用N3作為查詢很繁瑣。
目前有Euler和CWM兩個系統支持N3,但這兩個系統都不能自動支持RDF語義,語義必須由定制的規則來提供。
2.5 Versa
Versa語言最初是由4RDF的開發者所建立。它的主要組成模塊是一個RDF資源列表。RDF三元組在形如ListExpr-ListExpr->BoolExpr的遍歷操作中出現。表達式返回了與三元組匹配的所有對象的列表。例如,遍歷表達式all()-rdfs:label->*將會返回包含所有標號的列表。在一個遍歷表達式中,我們可以在箭頭的開始處放置一個垂直條而有選擇地選取主體。這樣,表達式all01-rdfs:label->eq(”foo”)將會返回所有具有\"foo”標號的資源。Versa表達可以嵌套。 給定的數據結構和表達式樹使得很難一次提取幾個值,Versa使用分布操作來突破這一限制。它可以建立列表的列表,從而可以從一個給定的資源列表中選擇幾個屬性。Versa提供了一些規則支持。4Suit支持Versa語言。
2.6 SeRQL
SeRQLt3j是Sesame的RDF查詢語言,是一個松散地基于幾個現有的查詢語言(RQL、RDQL和N3)的查詢和轉換語言。SeRQL最初的設計目標是從幾個現有的查詢語言中汲取優點,形成一個輕量級的、表達能力較強的查詢語言。seRQL的語法與RQL的語法類似,但也在后者的基礎上做了修改以使得語言更易于被解析。和RQL一樣,SeRQL基于RDF圖的形式化解釋,但SeRQL的形式化解釋直接基于RDF模型理論。
SeRQL支持一般化的路徑表達,邏輯限制和操作匹配,并支持兩個基本的過濾器:select-from-where和construct-from-where。SeRQL的construct-from-where實現了閉集和正交特征,因而實現了查詢的合成。seRQL提供了各種遞歸功能,所以SeRQL是不安全的。
近來SeRQL已成為Sesame系統的缺省查詢語言,同時也正在被許多開發者和研究者應用于不同的領域。SWAP(Semantic Web and Peer t0 Peer)是歐洲的IST項目之一,目標是結合使用Ontology和P2P技術。SWAP系統是一個分布的環境,其中節點間進行通信并共享知識,使用RDF作為基本語言。SWAP系統事實上的標準查詢語言是SeRQL。DOPE(DrugOntology Project for Elsevier)項目的目標是調查通過一個單一的接口來提供對于生命科學領域內的多信息源的訪問的可行性。已建立的系統原型能夠提供對于基于RDF模型的分布、異構數據源的訪問。DOPE采用了一個SeRQL查詢引擎作為用戶界面的輸入點。
2.7 SPARQL
SPARQLt4j構建在以前的RDF查詢語言(如RDQL、SeRQL)基礎上,擁有一些有價值的新特性。SPARQL協議和RDF查詢語言(sPARQL)目前是W3C的工作草案,還在討論當中。
SPARQL支持各種平臺和語言。編寫更復雜的查詢,可選匹配替換匹配、值約束條件、處理多個圖形、在特定圖中查找匹配、查找包含某個模式的圖、組合后臺數據和命名圖。
為了進一步提煉查詢的結果,SPARQL擁有DISTINCT、LIMIT、OFFSET和ORDER BY等關鍵字,它們的操作或多或少地與SQL中的對應命令有些類似。
SPARQL除了支持SELECT查詢之外,還支持另外三種查詢:ASK將返回\"yes\"或“no”;DESCRIBE返回—個圖形,其中包含和圖形模式匹配的節點的相關信息,例如,DESCRIBE?personWHERE{?person foaf:name”Jon Foobar\"J會返回—個圖,其中包括來自Jon Foobar的模型的三元模式;CONSTRUCT將為每個查詢結果輸出一個圖形模式,這樣就可以直接從查詢結果創建新的RDF圖。SPARQL允許以XML格式返回查詢結果,采用的格式叫作SPARQL變量綁定結果XML格式。這個用Schema定義的格式是RDF查詢和XML工具及庫之間的橋梁。這項功能還有許多潛在的用途,可以把SPARQL查詢的結果通過SXLT轉換成Web面或RSS feed,通過Xpath訪問結果,或者把結果文件返回給SOAP或AJAX客戶。
3查詢語言的比較
3.1 Peter Haase等人對RDF查詢語言的比較研究
德國卡爾斯魯厄大學Peter Haase等人對RQL,RDQL、Triple、N3、Verse和SeRQL等6種RDF查詢語言在支持圖形匹配、關系操作、聚合和分組功能、遞歸等幾個方面進行了比較。他們所選的實驗樣本數據是描述計算機科學研究領域情境的數據,分別描述了人、出版物和主題層次。這個數據集基本涵蓋了RDF數據模型的主要特征。在比較結果表(如表1所示)中,一表示不支持,●表示完全支持,○表示部分支持。
3.1.1固形匹配能力
路徑表達用于遍歷—個圖。所有的查詢語言(不管采用何種語法)都支持路徑表達。RDF圖表示了一種半結構化的數據模型,能夠表示不規則的、不完整的信息,因此,RDF查詢語言應該提供處理不規則和不完整信息的方法,具備可選的路徑表達能力。但是只有兩種RDF查詢語言(versa和SeRQL)提供了內嵌的方法來處理不完整的信息。例如,SeRQL提供了opfionalpath expressions(由方括號來表示)來匹配不規則路徑。

3.1.2關系操作
RDF常用來對關系結構進行建模。在關系數據模型中,有了幾個基本的代數運算:選擇(select)、投影(pmjection)、廣義笛卡爾積(cartesian product)、差(set difference)、并(set union),可以將這些基本的操作組合起來表達其他操作,如交(intersection)和一些形式的連接等。這些操作的重要性體現在關系完整性的定義上。
所有的查詢語言都支持三種基本的代數操作:選擇、投影、笛卡爾積,并用于路徑表達查詢。因此,我們集中討論其他兩個基本操作:并和差。
并(union),如表1所示,RQL支持并,Versa也包含一個明確的并操作。N3和Triple也用規則仿真了并操作。在Versa中描述了差,但沒有具體實現,RQL也支持差操作。
3.1.3聚合和分組功能
聚集功能可從一個多值集合中計算一個數量值。例如,找出集合中的最小值或最大值。分類(Grouping)則可以實現按組計算。從檢驗結果來看:N3、Versa和RQL支持計數功能,六種RDF查詢語言都不支持分組功能。
3.1.4遞歸
在信息系統中常常會用到遞歸查詢。需要注意的是RDF查詢引擎必須能夠處理模式遞歸,即子類(subClassOf)關系的遞歸性。Triple和N3是基于規則的系統,能夠通過附屬的規則支持所需的遞歸。Versa不支持一般意義上的遞歸,但提供了一個關鍵詞\"traverse\",可用于遞歸查詢。
3.1.5具體化
具體化(Reification)是RDF的特征。它為RDF圖增加了一個元數據層,可以將RDF聲明看作資源本身。SeRQL和Triple用一種特殊的語法支持具體化。N3不能從語法上表示具體化,RDQL、RQL和Versa把具體化的聲明看作是圖中的結點。
3.1.6集合和容器
RDF可以用集合和容器(即包容器、序容器、替換容器)定義一組實體。RDF查詢語言應該能夠檢索到這些容器中的元素。實驗表明,所有的查詢語言都可以在特殊的斷言
3.1.7命名空間
命名空間是Web數據查詢語言的一個必不可少的組成部分。目前為止,各種實例都表明了語言如何引入命名空間縮寫來保持查詢的簡潔。SeRQL、RQL和N3支持對URI的模式匹配斷言。在RDQL中,雖然在語法中定義了字符串匹配操作,但執行起來卻不完整。
3.1.8語言
RDF能夠使用XML風格的語言標簽。包含RDF字符的XML標簽可以帶一個xrnl:lang屬性,可能的屬性值包括:ell代表English,或de代表German。
在所有的比較語言中,SeRQL是惟一明確地支持特定語言信息查詢的語言。
3.1.9字符和數據類型
RDF支持XML模式的各種類型的字符。RDF查詢語言應支持XML模式的數據類型,一個數據類型包括一個詞匯空間、一個值空間和詞匯到值的映射。所有的查詢語言都能查詢詞匯空間,但大多數查詢語言不支持或只是初步支持值空間。RDQL和seRQL使用特殊的語法顯示數據類型來提供對數據類型的支持。
3.1.10繼承
RDF模式詞匯支持明確信息的繼承。對RDF-S繼承的支持,各種查詢語言采用了不同的方法:RQL和SeRQL本身就支持繼承,甚至能夠區分子類和直接子類。N3和Triple需要RDF—s語義公理,即一組規則。Versa不支持。
3.2進一步研究
Renzo Angles等研究者認為圖論中的度(Degree)、路徑(Path)和直徑(Diameter)等概念對于涉及RDF查詢的應用程序具有重要意義。他們將目前的RDF查詢語言對相鄰結點(Adjacent nodes)、相鄰邊(Adjacent edges)、結點的度(Degree 0fa node)、路徑(Path)、兩個資源間的距離(Distance between tworesources)、圖形的直徑(Diameter of a graph)等圖形特征的支持能力進行了測量和比較,比較結果如表2所示(+表示支持、±表示部分支持、一表示不支持)。
美國加州大學的Li Chen等研究者認為目前的RDF查詢研究存在著兩個缺陷:(1)RDF輸入不僅僅是一個主題一謂詞一對象的圖形結構,而且也應當包括RDF模式。而目前的許多RDF查詢語言都缺乏完善的推理功能來對顯性知識進行推理而獲得隱性知識。(2)缺乏一種像關系數據庫的關系代數那樣的綜合、全面的RDF查詢代數來提供一組語義明確的操作,作為RDF查詢的形式化基礎。針對這些問題,他們設計了一個新的RDF查詢代數和其解釋規則,用來將隱性的推理語義轉換為顯性的模式匹配。
4結束語
目前,越來越多的組織和個人使用RDF來發布信息,RDF查詢語言也成為了研究熱點,出現了許多查詢語言。本文介紹了具有代表性的七種RDF查詢語言:RQL、RDQL、Triple、N3、Versa、SeRQL和最近興起的SPARQL,并介紹了國外研究者對這些查詢語言的比較研究。值得注意的是,SPARQL作為W3C的候選推薦標準正被越來越多的研究者所采用,將具有很好的應用前景。
(注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。)