專利名稱:一種基于關(guān)系數(shù)據(jù)庫(kù)的資源描述框架查詢方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及語(yǔ)義網(wǎng)數(shù)據(jù)檢索技術(shù),具體涉及ー種基于關(guān)系數(shù)據(jù)庫(kù)的資源描述框架(RDF)查詢方法和系統(tǒng)。
背景技術(shù):
語(yǔ)義網(wǎng)(Semantic Web)成為近幾年來(lái)互聯(lián)網(wǎng)發(fā)展的ー個(gè)熱點(diǎn),代表智能網(wǎng)絡(luò)未來(lái)的語(yǔ)義網(wǎng)是ー個(gè)以知識(shí)為中心的模型。除了人類可讀的文檔和XML消息格式之外,它還增加了機(jī)器可以理解和處理的數(shù)據(jù)。資源描述框架(ResourceDescription Framework, RDF)是描述 Web 資源的標(biāo)準(zhǔn)數(shù)據(jù)模型。由于Web數(shù)據(jù)的半結(jié)構(gòu)化特性,RDF查詢語(yǔ)言應(yīng)該支持對(duì)半結(jié)構(gòu)化數(shù)據(jù)的查詢。萬(wàn)維網(wǎng)聯(lián)盟(W3C)提出的 SRARQL(SPARQL Protocol and RDF Query Language, SPARQL 協(xié)定與RDF查詢語(yǔ)言)語(yǔ)言就是這樣一種針對(duì)RDF圖的半結(jié)構(gòu)化查詢語(yǔ)言。SPARQL對(duì)于語(yǔ)義網(wǎng)就像SQL對(duì)于關(guān)系數(shù)據(jù)庫(kù)ー樣重要。SPARQL跟其他查詢語(yǔ)言的不同之處在于它能夠融合不同的異構(gòu)數(shù)據(jù)源來(lái)進(jìn)行查詢。它基于RDF圖模式進(jìn)行查詢,允許應(yīng)用程序?qū)Ψ植际絉DF數(shù)據(jù)庫(kù)進(jìn)行復(fù)雜的查詢,從RDF圖中查詢信息,并根據(jù)要求返回不同形式的結(jié)果,并得到了互相競(jìng)爭(zhēng)的多種框架的支持。目前SPARQL還僅僅只是ー個(gè)協(xié)議標(biāo)準(zhǔn),沒(méi)有開(kāi)發(fā)出成熟的數(shù)據(jù)庫(kù)系統(tǒng)對(duì)其進(jìn)行完全的支持??紤]到SPARQL是ー種沿襲傳統(tǒng)數(shù)據(jù)庫(kù)查詢模式的語(yǔ)言,采用“select-from-where”查詢模式,便于用戶掌握和理解;但是它僅支持遍歷查詢RDF文件,其查詢效率是相當(dāng)?shù)托У?。而現(xiàn)有傳統(tǒng)數(shù)據(jù)庫(kù)在查詢優(yōu)化等技術(shù)方面已經(jīng)相當(dāng)成熟,查詢數(shù)據(jù)的效率相對(duì)高效,但是其查詢語(yǔ)言SQL不具有語(yǔ)義性。因此,需要在用戶和關(guān)系數(shù)據(jù)庫(kù)之間建立ー個(gè)透明的查詢引擎,接受用戶提交的SPARQL查詢語(yǔ)句并將其轉(zhuǎn)換為關(guān)系數(shù)據(jù)庫(kù)可以處理的SQL語(yǔ)句,SQL語(yǔ)句直接對(duì)關(guān)系數(shù)據(jù)庫(kù)進(jìn)行操作,最后該引擎將SQL查詢結(jié)果按照SPARQL查詢語(yǔ)句轉(zhuǎn)換為用戶所需的RDF查詢結(jié)果;這樣RDF查詢語(yǔ)言不僅具有本身語(yǔ)義性的優(yōu)點(diǎn),而且同時(shí)具有對(duì)海量數(shù)據(jù)查詢的高效性?,F(xiàn)有技術(shù)采用三元組(垂直表)的形式對(duì)RDF數(shù)據(jù)進(jìn)行存儲(chǔ),這種存儲(chǔ)方式具體實(shí)現(xiàn)是將RDF三元組的主語(yǔ)、謂語(yǔ)、賓語(yǔ)分離出來(lái),分別存在數(shù)據(jù)庫(kù)的statements表的subject、predicate、object 列中。將SPARQL轉(zhuǎn)化為SQL語(yǔ)句后,即可使用SQL語(yǔ)言對(duì)存儲(chǔ)有三元組數(shù)據(jù)的數(shù)據(jù)庫(kù)進(jìn)行查詢。SPARQL查詢的核心是RDF圖匹配方式,該方式用SPARQL查詢中描述的RDF圖模式來(lái)對(duì)數(shù)據(jù)庫(kù)中原始RDF圖數(shù)據(jù)進(jìn)行完全匹配。完全匹配要求所有的RDF圖分支均匹配才輸出結(jié)果。SPARQL可以由很復(fù)雜的RDF圖模式表示,但其中最基本的是基本RDF圖模式,復(fù)雜的SPARQL查詢就是在基本圖模式的基礎(chǔ)上進(jìn)行一些交并操作來(lái)進(jìn)行結(jié)果的選擇。汪錦嶺等人提出ー種采用“與或匹配樹(shù)”的主頂點(diǎn)方式來(lái)進(jìn)行高效RDF圖匹配。該方法的主要思想是根據(jù)元語(yǔ)句中節(jié)點(diǎn)的深度關(guān)系來(lái)進(jìn)行多次匹配。其先由與或樹(shù)判斷各節(jié)點(diǎn)的深度,避免環(huán)結(jié)構(gòu)。然后將RDF圖模式根基節(jié)點(diǎn)加入主頂點(diǎn)集中,然后匹配以所有主頂點(diǎn)集中的頂點(diǎn)為主語(yǔ)的三元組,若有匹配,則將該三元組的賓語(yǔ)加入主頂點(diǎn)集中,所有匹配嘗試完以后刪除原先的主頂點(diǎn)。如此依次循環(huán)。主要體現(xiàn)的是一個(gè)路徑的思想,對(duì)原RDF圖按路徑逐級(jí)進(jìn)行匹配。,但是該方法主要應(yīng)用于模糊匹配或者本體推理方面會(huì)比較有效,對(duì)于SPARQL這種完全匹配方法存在一定的局限性。由于該方法在毎次匹配以后需要跟主程序進(jìn)行交互,并修改數(shù)據(jù)結(jié)構(gòu)中的內(nèi)容以生成下一輪匹配條件,過(guò)程復(fù)雜且時(shí)間開(kāi)銷較大,效率相對(duì)低下。 同時(shí),Artem Chebotko等人提出的“模式樹(shù)”方法針對(duì)可選圖模式(optionalpattern)創(chuàng)建了模式樹(shù),通過(guò)父子節(jié)點(diǎn)的關(guān)系來(lái)表示可選圖模式依附的主模式。若加入并圖模式,由于其子圖模式不存在主從之分,無(wú)法直接在兩個(gè)模式間建立這種父子關(guān)系,并且跟可選圖模式無(wú)法做區(qū)分。劉靜也提出過(guò)“模式樹(shù)”的方法,基本上與Artem Chebotko的方法一致,但是其方法中關(guān)于平行可選圖模式的理解有待討論。由此,亟需ー種簡(jiǎn)單高效的RDF查詢方法和系統(tǒng)使得在保持查詢語(yǔ)言語(yǔ)義性的前提下提聞查詢效率。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一套完整可行的機(jī)制來(lái)支持SPARQL查詢轉(zhuǎn)換成SQL查詢,并將SQL語(yǔ)句返回的結(jié)果進(jìn)行語(yǔ)義包裝的方法和系統(tǒng)。本發(fā)明公開(kāi)了ー種基于關(guān)系數(shù)據(jù)庫(kù)的資源描述框架(RDF)查詢方法,用于利用SPARQL語(yǔ)句對(duì)以三元組形式存儲(chǔ)于關(guān)系數(shù)據(jù)庫(kù)中的RDF數(shù)據(jù)進(jìn)行查詢,所述方法包括步驟100、根據(jù)用戶輸入的SPARQL查詢語(yǔ)句建立結(jié)果變量表、分離所述SPARQL查詢語(yǔ)句獲得各基本圖模式,建立與各基本圖模式對(duì)應(yīng)的常量表、變量表和空節(jié)點(diǎn)表以及標(biāo)識(shí)各基本圖模式之間邏輯關(guān)系的模式串;步驟200、根據(jù)模式串生成模式樹(shù),其中,模式樹(shù)用樹(shù)的結(jié)構(gòu)來(lái)表示各圖模式之間的關(guān)系,其中葉子節(jié)點(diǎn)表示基本圖模式,其值為基本圖模式的編號(hào);非葉子節(jié)點(diǎn)表示模式間的關(guān)系,其值為optional、union和join ;其中join表示不帶關(guān)鍵詞的組圖模式的ー個(gè)分支;步驟300、根據(jù)各基本圖模式對(duì)應(yīng)的常量表、變量表和空節(jié)點(diǎn)表分別生成各基本圖模式的SQL子查詢片段,根據(jù)模式樹(shù)表示的各基本圖模式之間的關(guān)系將各SQL子查詢片段連接成完整的SQL查詢語(yǔ)句段;步驟400、利用轉(zhuǎn)換獲得的SQL查詢語(yǔ)句段對(duì)關(guān)系數(shù)據(jù)庫(kù)中的RDF數(shù)據(jù)進(jìn)行查詢;步驟500、根據(jù)SPARQL結(jié)果集的限定以及用戶設(shè)定對(duì)對(duì)查詢結(jié)果進(jìn)行語(yǔ)義包裝向用戶返回查詢結(jié)果。本發(fā)明還公開(kāi)了ー種基于關(guān)系數(shù)據(jù)庫(kù)的資源描述框架(RDF)查詢系統(tǒng),用于利用SPARQL語(yǔ)句對(duì)以三元組形式存儲(chǔ)于關(guān)系數(shù)據(jù)庫(kù)中的RDF數(shù)據(jù)進(jìn)行查詢,所述系統(tǒng)包括查詢語(yǔ)句處理裝置,用于根據(jù)用戶輸入的SPARQL查詢語(yǔ)句建立結(jié)果變量表、分離所述SPARQL查詢語(yǔ)句獲得各基本圖模式,建立與各基本圖模式對(duì)應(yīng)的常量表、變量表和空節(jié)點(diǎn)表以及標(biāo)識(shí)各基本圖模式之間邏輯關(guān)系的模式串;模式樹(shù)生成裝置,用于根據(jù)模式串生成模式樹(shù),其中,模式樹(shù)用樹(shù)的結(jié)構(gòu)來(lái)表示各圖模式之間的關(guān)系,其中葉子節(jié)點(diǎn)表示基本圖模式,其值為基本圖模式的編號(hào);非葉子節(jié)點(diǎn)表示模式間的關(guān)系,其值為optional、union和join ;其中join表示不帶關(guān)鍵詞的組圖模式的一個(gè)分支;SQL轉(zhuǎn)換裝置,根據(jù)各基本圖模式對(duì)應(yīng)的常量表、變量表和空節(jié)點(diǎn)表分別生成各基本圖模式的SQL子查詢片段,根據(jù)模式樹(shù)表示的各基本圖模式之間的關(guān)系將各SQL子查詢片段連接成完整的SQL查詢語(yǔ)句段;
數(shù)據(jù)庫(kù)查詢裝置,利用轉(zhuǎn)換獲得的SQL查詢語(yǔ)句段對(duì)關(guān)系數(shù)據(jù)庫(kù)中的RDF數(shù)據(jù)進(jìn)行查詢;語(yǔ)義包裝裝置,根據(jù)SPARQL結(jié)果集的限定以及用戶設(shè)定對(duì)對(duì)查詢結(jié)果進(jìn)行語(yǔ)義包裝向用戶返回查詢結(jié)果。本發(fā)明所述的基于關(guān)系數(shù)據(jù)的RDF查詢方法和系統(tǒng)支持SPARQL查詢轉(zhuǎn)換成SQL查詢,并將SQL語(yǔ)句返回的結(jié)果進(jìn)行語(yǔ)義包裝,即保留了 SPARQL查詢的語(yǔ)義性,又充分利用了傳統(tǒng)數(shù)據(jù)庫(kù)的高效優(yōu)勢(shì)。
圖I是本發(fā)明實(shí)施例的資源描述框架查詢方法的流程圖;圖2是本發(fā)明實(shí)施例中進(jìn)行基本圖模式信息提取的具體流程圖;圖3是本發(fā)明實(shí)施例中SPARQL查詢的基本RDF圖模式的示例圖;圖4是圖3中所述RDF圖模式分解為三元組集合的示意圖;圖5為本發(fā)明實(shí)施例中元素結(jié)構(gòu)表的示意圖;圖6為本發(fā)明實(shí)施例中對(duì)示例三元組集合生成的變量表的示意圖;圖7為本發(fā)明實(shí)施例中生成模式樹(shù)的過(guò)程示意圖;圖8為本發(fā)明實(shí)施例中生成模式樹(shù)所用的optional、union和join模板的示意圖;圖9為本發(fā)明實(shí)施例中所生成得到的模式樹(shù)的示意圖;圖10為本發(fā)明實(shí)施例的嵌套樹(shù)的optional節(jié)點(diǎn)屬性值添加過(guò)程的示意圖;圖11是本發(fā)明實(shí)施例基于關(guān)系數(shù)據(jù)庫(kù)的資源描述框架(RDF)查詢系統(tǒng)的系統(tǒng)框圖。
具體實(shí)施例方式下面結(jié)合附圖并通過(guò)具體實(shí)施方式
來(lái)進(jìn)ー步說(shuō)明本發(fā)明的技術(shù)方案。資源描述框架(RDF)使用Web標(biāo)識(shí)符來(lái)標(biāo)識(shí)事物,并通過(guò)屬性和屬性值來(lái)描述資源。其中,資源是可擁有URI的任何事物,比如http://www. w3school. com, cn/rdf :屬性是擁有名稱的資源,比如"author"或"hom印age";而屬性值是某個(gè)屬性的值,比如"David"或〃http://www. w3school. com. cn〃(請(qǐng)注意ー個(gè)屬性值可以是另外ー個(gè)資源)。資源、屬性和屬性值三者構(gòu)成了 RFD表達(dá)式的三元組(triples)的基本結(jié)構(gòu)。在三元組中,資源本身是主語(yǔ)(subject),屬性名稱是謂語(yǔ)(predicate),屬性值是賓語(yǔ)(object)。一組這樣的三元組被稱為RDF圖,這可以用具有一個(gè)節(jié)點(diǎn)和有向邊的圖來(lái)表示,在圖中每個(gè)三元組對(duì)應(yīng)于節(jié)點(diǎn)-邊-節(jié)點(diǎn)的連接,對(duì)應(yīng)于邊的謂語(yǔ)表示ー個(gè)關(guān)系,邊的方向很重要,它總是指向賓語(yǔ)。且這個(gè)的起始節(jié)點(diǎn)和終止節(jié)點(diǎn)分別對(duì)應(yīng)三元組的主語(yǔ)和賓語(yǔ)。圖模式是描述RDF圖的一種有效方法,用RDF詞匯和查詢變量描述所要查詢RDF圖的ー個(gè)子圖,它在結(jié)構(gòu)上與RDF圖類似,只不過(guò)構(gòu)成它的基本元素除了可以是RDF詞匯也
可以是變量。 SPARQL查詢語(yǔ)言采用RDF圖模式來(lái)描述ー個(gè)RDF查詢,一般由四個(gè)部分組成聲明部分(prefix/base)、結(jié)果集部分(select/construct/describe/ask)、數(shù)據(jù)源部分(from)和查詢模式部分(where)。聲明部分主要進(jìn)行前綴的聲明,以簡(jiǎn)短的詞匯來(lái)表示URI信息,使得查詢模式的部分書(shū)寫(xiě)較為簡(jiǎn)単;結(jié)果集部分給出所需的結(jié)果變量以及返回的結(jié)果形式,跟SQL中的選擇投影一致;數(shù)據(jù)源部分指定RDF圖進(jìn)行查詢,多數(shù)情況下均省略了 ;查詢模式部分提供多種復(fù)雜的查詢圖模式來(lái)組合查詢,包括基本圖模式、組圖模式、可選圖模式(optional)、并圖模式(union)、命名圖模式(graph)以及值約束(filter),是SPARQL查詢的核心部分。其中,對(duì)各類圖模式具體說(shuō)明如下(I)基本圖模式是由ー個(gè)或多個(gè)三元組(triples)組成,描述ー個(gè)基本的RDF圖,用符號(hào)P來(lái)表不。(2)組圖模式{PI} {P2}簡(jiǎn)單地將幾個(gè)基本圖模式并列在一起,組圖模式的任何一個(gè)解都要滿足組成組圖模式的所有子圖模式。(3)可選圖模式P1 optional {P2}其表示在圖模式Pl的基礎(chǔ)上,若有滿足P2的RDF圖結(jié)果,則Pl的模式解被P2橫向地?cái)U(kuò)充;若沒(méi)有滿足條件的RDF圖結(jié)果,也不會(huì)對(duì)Pl的模式解產(chǎn)生影響。其中Pl稱為主模式,P2稱為從模式。(4)并圖模式{Pl}union{P2}。匹配的圖模式只要滿足Pl或P2即可,若兩者都滿足,則生成兩個(gè)相同的結(jié)果。(5)命名圖模式為查詢模式指定RDF圖,或查找符合搜索條件的匹配結(jié)果所在RDF 圖。(6)值約束對(duì)變量進(jìn)行限制,對(duì)查詢結(jié)果進(jìn)一歩地篩選。一般合并到基本圖模式里進(jìn)行。模式解(pattern solution)是當(dāng)圖模式匹配到RDF圖的某個(gè)子圖時(shí),查詢變量與之所對(duì)應(yīng)RDF詞匯之間的綁定關(guān)系就是圖模式匹配RDF圖模式的解。用符號(hào)S表示。其中命名圖模式相當(dāng)于在限制的RDF圖上做查詢,跟查詢模式的語(yǔ)義沒(méi)有關(guān)系,其操作原理跟一般的圖模式并無(wú)ニ義,因此本發(fā)明僅針對(duì)不帶命名圖模式的處理進(jìn)行。上述第(2)、(3)、(4)三種圖模式是在基本圖模式的基礎(chǔ)之上建立的,并且可以互相嵌套。其中可選圖模式存在的平行關(guān)系或嵌套關(guān)系。平行可選圖模式的基本形式是Ploptional {P2} optional {P3}。根據(jù) SPARQL 規(guī)范,此關(guān)系等價(jià)于{PI optional P2} optionalP3。該過(guò)程匹配方式為P2先擴(kuò)充Pl的模式解SI,得到中間解S1>2。再用P3來(lái)擴(kuò)充S1>2得到最終解S,匹配前提是P1。劉靜的“模式樹(shù)”方法關(guān)于平行可選圖模式擴(kuò)充模式解的原則如下P3只是擴(kuò)充在P2中沒(méi)有的變量,對(duì)于P2己有的變量,除非這個(gè)變量的沒(méi)有綁定值(值為空),否則不進(jìn)行擴(kuò)充。雖然從人類的說(shuō)話習(xí)慣來(lái)看似乎合情合理,但是規(guī)范中將Ploptional {P2}封裝為ー個(gè)整體作為P3的主模式,依據(jù)最基本的可選圖模式的求解情況可知,從模式是不能改變主模式中的任何解的,因此P3擴(kuò)充時(shí)只是建立在Pl的基礎(chǔ)上,而跟P2是沒(méi)有關(guān)系的。相應(yīng)地,嵌套可選圖模式的基本形式是Pl optional {P2 optional {P3}}。由于optional關(guān)鍵詞是左相關(guān)的,因此此處不能把P2 optional {P3}當(dāng)成整體,而是先Ploptional {P2},得到中間解S1,2。然后在圖模式Pl,P2的基礎(chǔ)之上,若有滿足P3的RDF圖模式,則S1>2被P3橫向地?cái)U(kuò)充。
由以上分析可知,平行可選圖模式與嵌套可選圖模式的匹配順序是一致的,所不同的是在平行圖模式中的P3是建立在Pl的基礎(chǔ)之上,不管P2是否有匹配,P3都會(huì)根據(jù)其自身匹配情況對(duì)S1>2進(jìn)行擴(kuò)充。P3的參照模式是Pl,匹配條件是P3與Pl中的共同變量要有相同的值。而嵌套可選圖模式的P3是建立在Pl和P2的基礎(chǔ)上,必須在Pl和P2都有匹配的基礎(chǔ)之上,對(duì)Sli2進(jìn)行擴(kuò)充。由于P2是在Pl的基礎(chǔ)之上進(jìn)行匹配的,也就是只要記錄在P2擴(kuò)充的屬性列上不為空,則Pl —定存在匹配。所以,實(shí)現(xiàn)的時(shí)候P3的參照模式是P2,而匹配條件是P3與P1、P2中的共同變量要有相同的值??蛇x圖模式的兩種情況平行可選圖模式或者嵌套可選圖模式采用不同的方式進(jìn)行左外連接操作,但兩者的共性是同一 optional節(jié)點(diǎn)的非最左節(jié)點(diǎn)都要依賴于最左節(jié)點(diǎn),并且匹配順序是從左到右。這是由optional的左相關(guān)性決定的。本發(fā)明實(shí)施例所提出的基本原理在于將用戶提交的SPARQL查詢語(yǔ)句分塊進(jìn)行處理,對(duì)where語(yǔ)句中包含的所有基本圖模式進(jìn)行主語(yǔ)、謂語(yǔ)、賓語(yǔ)的分離,提取出含有變量的成分存入“變量表”,記錄其出現(xiàn)的三元組編號(hào)以及角色(主語(yǔ)、謂語(yǔ)、賓語(yǔ))形成鏈表,通過(guò)這個(gè)鏈表來(lái)表示基本圖模式中各個(gè)三元組之間的關(guān)系,將其轉(zhuǎn)化成SQL語(yǔ)句段;將SPARQL的查詢模式部分用模式樹(shù)的方法表示出來(lái),并依據(jù)模式樹(shù)所代表的基本圖模式之間的關(guān)系來(lái)完成SQL語(yǔ)句段之間的連接聯(lián)合操作,此過(guò)程中同時(shí)完成的還有SQL語(yǔ)句段的補(bǔ)全,最終形成完整的SQL查詢,提交給數(shù)據(jù)庫(kù);將從關(guān)系數(shù)據(jù)庫(kù)中獲得的查詢結(jié)果進(jìn)行語(yǔ)義包裝并返回給用戶。圖I是本發(fā)明實(shí)施例的資源描述框架查詢方法的流程圖。如圖I所示,所述方法包括步驟100、根據(jù)用戶輸入的SPARQL查詢語(yǔ)句建立結(jié)果變量表、分離所述SPARQL查詢語(yǔ)句獲得各基本圖模式,建立與各基本圖模式對(duì)應(yīng)的常量表、變量表和空節(jié)點(diǎn)表以及標(biāo)識(shí)各基本圖模式之間邏輯關(guān)系的模式串。要對(duì)SPARQL查詢轉(zhuǎn)換到SQL,就必須進(jìn)行SPARQL查詢語(yǔ)義的解讀,根據(jù)其語(yǔ)法意義來(lái)選用相對(duì)應(yīng)的SQL操作。SPARQL提供了四種查詢形式,分別為 select、ask、construct 和 describe。Select用于返回查詢的變量及其綁定;ask的查詢過(guò)程與select —致,但僅返回查詢是否存在模式解的布爾值construct用于根據(jù)限定帶有變量的RDF圖模式模板返回帶有該變量查詢結(jié)果的RDF圖describe用于返回與查詢資源相關(guān)的RDF數(shù)據(jù)集。其中,select子句跟SQL中的select子句一致,直接對(duì)應(yīng)于投影操作即可,只需將變量名轉(zhuǎn)換成列名。另外幾種結(jié)果集方式(construct、describe、ask)都是建立在select查詢之上的,只需要在select查詢結(jié)果基礎(chǔ)上進(jìn)行相應(yīng)的結(jié)果集處理獲得需要形式的返回結(jié)果即可。SPARQL查詢模式的核心是三元組語(yǔ)句,因此將SPARQL中的查詢模式分解為多個(gè)語(yǔ)句模式的集合,將語(yǔ)句模式作為匹配的基本単元。進(jìn)ー步將SPARQL查詢模式轉(zhuǎn)換到SQL,實(shí)際上就是將SPARQL查詢模塊中的三元組語(yǔ)句在數(shù)據(jù)庫(kù)中一一進(jìn)行匹配,匹配條件為語(yǔ)句中所提供的已知數(shù)據(jù)對(duì)象的值,未知的變量以及帶有部分變量含義的空結(jié)點(diǎn)起到橋梁的作用來(lái)聯(lián)系各三元組,使其成為有機(jī)整體,而且變量還作為查詢結(jié)果的輸出源。在不引起混淆的情況下,不妨將查詢模式中三元組的數(shù)據(jù)元素(主語(yǔ)、謂語(yǔ)、賓語(yǔ))統(tǒng)稱為結(jié)點(diǎn),原SPARQL查詢模式到RDF圖的匹配就由樹(shù)或網(wǎng)結(jié)構(gòu)的匹配到被分解成多個(gè)節(jié)點(diǎn)到關(guān)系表中三元組之間的匹配了。數(shù)據(jù)單元?jiǎng)澐值迷叫?,匹配難度系數(shù)就越低,就能更準(zhǔn)確快捷地找到匹配項(xiàng)。 圖2是本發(fā)明一個(gè)實(shí)施例中進(jìn)行基本圖模式信息提取的具體流程圖。如圖2所示,在該實(shí)施例中,步驟100進(jìn)ー步包括步驟101、提取申明部分并利用申明部分內(nèi)容替換SPARQL語(yǔ)句中的前綴。關(guān)鍵詞prefix/base、select/ask/describe/constructs from、where {}(可省略where)等將SPARQL查詢語(yǔ)句段分離成四個(gè)部分,即申明部分、結(jié)果集部分、數(shù)據(jù)源部分、查詢模式部分。根據(jù)申明部分prefix/bases所記錄的前綴,還原查詢模式中的前綴。如用prefixfoaf:<http://xmlns. com/foaf/0. l/> JdS 原 foaf:name 的結(jié)果為 <http://xmlns. com/foaf/0. I/name>步驟102、從SPARQL查詢語(yǔ)句段提取結(jié)果集部分的語(yǔ)句,根據(jù)結(jié)果集部分語(yǔ)句建立結(jié)果變量表及結(jié)果集約束條件。其中,步驟102可細(xì)分為如下步驟步驟1021、從SPARQL查詢語(yǔ)句段提取結(jié)果集部分語(yǔ)句。步驟1022、判斷查詢形式是否select,如果是則轉(zhuǎn)向步驟1023,如果否則轉(zhuǎn)向步驟 1024。步驟1023、直接根據(jù)結(jié)果集部分的變量建立結(jié)果變量表,結(jié)束步驟102。步驟1024、判斷查詢形式是ask/construct/describe中的哪一種,如果為construct則轉(zhuǎn)向步驟1025,如果為describe則轉(zhuǎn)向步驟1026,如果為ask則轉(zhuǎn)向步驟1027。步驟1025、根據(jù)結(jié)果集部分語(yǔ)句限定構(gòu)建construct模板,即采用RDF文件格式構(gòu)建成RDF的基本單元模板,作為結(jié)果集返回約束條件,轉(zhuǎn)向步驟1023。步驟1026、根據(jù)結(jié)果集部分語(yǔ)句限定將具體資源值記錄到describe表作為結(jié)果集返回約束條件,轉(zhuǎn)向步驟1023.步驟1027、直接建立僅包含的空結(jié)果變量表,結(jié)束步驟102。當(dāng)然,本領(lǐng)域技術(shù)人員也能夠了解可以采用一次判斷后根據(jù)判斷結(jié)果是select/ask/construct/describe中的哪ー種分別采取上述不同處理方式的流程來(lái)執(zhí)行步驟102。步驟103、將SPARQL查詢語(yǔ)句段中的查詢模式部分根據(jù)關(guān)鍵詞union、optional以及成對(duì)的“ H”劃分為多個(gè)基本模式。將基本圖模式編號(hào),替換原有具體的圖模式(RDF圖形式),形成最初的模式串。如“ Pl optional {{P2} optional {P3}} union {P4} {P5} ”。
步驟104、對(duì)步驟103中的劃分得到的基本圖模式進(jìn)行處理以得到符合“主謂賓”
三元組模板的三元組集合。提取數(shù)據(jù)對(duì)象需要對(duì)基本圖模式進(jìn)行三元組的提取和分離。SPARQL查詢語(yǔ)言允許很多的省略和嵌套,根據(jù)相關(guān)語(yǔ)義將隱含的完整三元組恢復(fù)出來(lái)。如[dc: title “tomorrow” ] dc: creator “John”.等價(jià)于aO dc:title “tomorrow,,·aO dc:creator “John,,·
不僅要找出省略的空結(jié)點(diǎn)a0,還找到聯(lián)系兩個(gè)三元組的紐帶——共同主語(yǔ)aO.根據(jù)SPARQL語(yǔ)言規(guī)范,這里需要找出的還包括的省略成分有共享主語(yǔ)、共享主謂、空結(jié)點(diǎn)的填充、容器collection的解釋等。提取出來(lái)的三元組符合采用標(biāo)準(zhǔn)turtle語(yǔ)法的“主謂賓”三元組模板,有利于后面步驟的進(jìn)行。步驟105、對(duì)姆ー個(gè)規(guī)范三元組集合構(gòu)建常量表mach_i、查詢變量表verset_i、空節(jié)點(diǎn)表blank」。SPARQL查詢語(yǔ)句的基本模式中每個(gè)三元組會(huì)對(duì)SQL進(jìn)行一次獨(dú)立的完全匹配,實(shí)際操作過(guò)程是捜索在對(duì)應(yīng)屬性列上與給定定值相等的記錄,并按要求返回該記錄的部分或全部屬性值。因此,SPARQL查詢語(yǔ)句的每個(gè)三元組可以近似看成為已知值和變量的集合。稱其為“近似”是因?yàn)榭战Y(jié)點(diǎn)也含有不完全變量的作用,具體見(jiàn)實(shí)施方案中的描述。其中已知值成為單次匹配的條件,變量以多次匹配的橋梁作為匹配條件,同時(shí)也是返回結(jié)果的來(lái)源。下述過(guò)程描述了將RDF基本圖模式轉(zhuǎn)換成節(jié)點(diǎn)信息的過(guò)程。該方法先將SPARQL查詢語(yǔ)句分解成三元組。如圖3所示SPARQL查詢基本圖模式,其中陰影節(jié)點(diǎn)表示已知量,非陰影節(jié)點(diǎn)表示變量,標(biāo)向箭頭表示謂語(yǔ),謂語(yǔ)的箭頭方向由主語(yǔ)指向賓語(yǔ)。從謂語(yǔ)的角度來(lái)看,很明顯的看出該三元組可以拆分成7個(gè)三元組如圖4中所示。其中,各三元組中至少有ー個(gè)節(jié)點(diǎn)與其他三元組中的某個(gè)節(jié)點(diǎn)相同,這樣才能體現(xiàn)ー個(gè)RDF圖有機(jī)整體。在這些相同節(jié)點(diǎn)中,由于已知量是定值,在匹配中生成各自的匹配條件,互相之間不需要存在聯(lián)系,使得查詢過(guò)程簡(jiǎn)潔。而變量由于沒(méi)有指定值,從單個(gè)三元組來(lái)說(shuō),屬于查詢的返回結(jié)果,而從RDF圖查詢整體來(lái)說(shuō),卻又成為了查詢匹配的約束以及聯(lián)系所在,表示采用相同標(biāo)識(shí)的節(jié)點(diǎn)具有同一值,需要建立相應(yīng)的等價(jià)關(guān)系。因此,根據(jù)這些變量節(jié)點(diǎn)的信息,將相關(guān)三元組匹配串聯(lián)起來(lái),在圖4中用虛線部分表示。根據(jù)圖4所示的三元組集合信息進(jìn)ー步可以生成表示該信息的常量表、變量表和空節(jié)點(diǎn)表。上述三種表在本發(fā)明中由相同的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn),稱為元素結(jié)構(gòu)表。圖5是元素結(jié)構(gòu)表的示意圖。如圖5所示元素結(jié)構(gòu)表包括數(shù)組部分和鏈表部分,其中數(shù)組部分的數(shù)據(jù)元素包含value、count和鏈表指針三個(gè)數(shù)據(jù)項(xiàng)。鏈表部分包括表示元素位置的自由節(jié)點(diǎn)。在元素結(jié)構(gòu)表中,value —項(xiàng)記錄各類型元素的有效值。即在常量表中記錄的是完整的常量值,在變量表中記錄變量名稱,空節(jié)點(diǎn)表中表示空節(jié)點(diǎn)標(biāo)識(shí)。Countー項(xiàng)表示該元素所出現(xiàn)過(guò)的次數(shù),同時(shí)該數(shù)字也表示了其后所帶的鏈表的長(zhǎng)度。Locationー項(xiàng)存儲(chǔ)的是元素出現(xiàn)的位置。由于RDF圖模式的多個(gè)三元組之間相互擁有共同的元素,以將三元組聯(lián)系成一個(gè)圖的形式。于是中間節(jié)點(diǎn)(度大于2的節(jié)點(diǎn))就成為了聯(lián)系各三元組的紐帶。
生成元素結(jié)構(gòu)表的主要步驟如下步驟1051、根據(jù)正則表達(dá)式,依次提取出RDF圖模式中的主語(yǔ)、謂語(yǔ)和賓語(yǔ)。同時(shí)在處理過(guò)程中能夠判斷出當(dāng)前元素是常量、變量還是空節(jié)點(diǎn)。根據(jù)類型選擇即將存入的元素結(jié)構(gòu)表。步驟1052、在相應(yīng)元素結(jié)構(gòu)表中搜尋■數(shù)組部分存儲(chǔ)的主記錄,即value部分。如果捜索到與當(dāng)前元素有效值相同的數(shù)據(jù)項(xiàng),則將該元素的當(dāng)前位置(所在的三元組編號(hào)以及所充當(dāng)?shù)闹髦^賓成分)存入對(duì)應(yīng)數(shù)據(jù)項(xiàng)所帶鏈表的表頭位置,同時(shí)將count自增I ;如果沒(méi)有找到相同的數(shù)據(jù)項(xiàng),則將該元素有效值存入數(shù)組中,count部分置為I,將元素的當(dāng)前位置記錄在后置鏈表中。常量“a”的有效值就為a,變量“?b”的有效值為b,空節(jié)點(diǎn)“_:c”的有效值為C。
圖6示出了根據(jù)上述步驟對(duì)圖4所示三元組集合生成的變量表。此處在不引起誤解的情況下,借用謂語(yǔ)的標(biāo)識(shí)來(lái)表示各個(gè)三元組,S表示主語(yǔ),O表示賓語(yǔ)。實(shí)際過(guò)程中,由于謂語(yǔ)通常是ー個(gè)URI,不便于用來(lái)做標(biāo)識(shí),可以靈活采用其他方式來(lái)表示。很明顯的可以看出,用與或匹配樹(shù)來(lái)逐層進(jìn)行處理的方式,上述RDF圖的匹配需要經(jīng)過(guò)“ABE”、“ACFE”、“ACG”、“AD”四條路徑來(lái)進(jìn)行逐層匹配,而經(jīng)過(guò)我們的處理過(guò)程以后僅僅只需生成三條SQL中的where子句(D只出現(xiàn)在ー個(gè)三元組中,不構(gòu)成關(guān)鍵變量節(jié)點(diǎn))“PL 0=P4. S,,“Ρ2· 0=P5. S=P6. S”“Ρ5· 0=P7. S”而且整個(gè)處理過(guò)程清晰易懂,不需要進(jìn)行遞歸、跳轉(zhuǎn)等處理對(duì)于空間點(diǎn),實(shí)際上空節(jié)點(diǎn)不帶有任何具體的信息,可以指代與其本身具有不同名字的空節(jié)點(diǎn),而空節(jié)點(diǎn)名字的作用實(shí)際上是對(duì)不同的空節(jié)點(diǎn)進(jìn)行區(qū)分,如同一個(gè)RDF文件里“」a”與“」b”表示指代的是不同的頂點(diǎn),而在不同地方若均出現(xiàn)了“_:a”,則說(shuō)明“_:a”所表示的成分指代的是同一個(gè)頂點(diǎn)。而在查詢中,“_:c”只用來(lái)匹配RDF圖中為空節(jié)點(diǎn)的頂點(diǎn),并不要求該空節(jié)點(diǎn)的名字也為“C”。從某種程度上來(lái)說(shuō),空節(jié)點(diǎn)實(shí)際上是具有某些限制的變量,即要求該變量是空節(jié)點(diǎn)的形式,但不用來(lái)作為結(jié)果的返回源。建立空結(jié)點(diǎn)表bnode_i的具體方法與varset_i表的建立一致,針對(duì)的是“形式的空結(jié)點(diǎn)。主要用來(lái)約束用同一個(gè)空結(jié)點(diǎn)表示的不同位置的數(shù)據(jù)對(duì)象,要求值一致。三元組其他非變量非空節(jié)點(diǎn)的元素即用來(lái)提供匹配的基本條件,將這些元素的出現(xiàn)的基本模式編號(hào)、所在三元組中位置記錄下來(lái),最終形成常量表match_i。步驟106、判斷基本圖模式中是否存在filter關(guān)鍵字,如果存在轉(zhuǎn)步驟107,否則,轉(zhuǎn)步驟108。步驟107、根據(jù)filter關(guān)鍵詞,提取出濾值條件,并記錄模式編號(hào)。步驟108、判斷基本圖模式中是否存在結(jié)果集修飾,如果存在轉(zhuǎn)步驟107否則,結(jié)束步驟100。步驟109、查詢模式部分由結(jié)果集修飾符limit等與ー個(gè)或多個(gè)基本模式依靠關(guān)鍵詞的搭配組合而成,將結(jié)果集修飾符分離,并記錄進(jìn)modifier表基本圖模式信息處理完畢后,會(huì)得到結(jié)果變量表var_set、describe表/construct模板、結(jié)果集修飾符單元modifier表、模式串、濾值表filter、各基本圖模式的變量表varset_i和空結(jié)點(diǎn)表bnode_i表、常量表match_i。除了模式串是用來(lái)生成模式樹(shù)所需,其余表格都被用在查詢轉(zhuǎn)換為SQL的時(shí)候。步驟200、根據(jù)模式串生成模式樹(shù)。模式樹(shù)用樹(shù)的結(jié)構(gòu)來(lái)表示各圖模式之間的關(guān)系,其中葉子節(jié)點(diǎn)表示基本圖模式,其值為基本圖模式的編號(hào)。非葉子節(jié)點(diǎn)表示模式間的關(guān)系,其值為optional、union和join。其中join表示不帶關(guān)鍵詞的組圖模式的ー個(gè)分支。optional節(jié)點(diǎn)用來(lái)描述可選圖模式,其第一個(gè)節(jié)點(diǎn)表示主模式,其余子節(jié)點(diǎn)表示從模式,模式按從左到右的順序?qū)?yīng)于SQL中的左外連接(left outer join)操作。其中某個(gè)optional的子節(jié)點(diǎn)也為optional,則說(shuō)明存在嵌套可選圖模式;若某個(gè)optional關(guān)鍵詞有三個(gè)以上的子節(jié)點(diǎn),則說(shuō)明存在平行可選圖模式。Union節(jié)點(diǎn)用來(lái)描述并圖模式,且互相為并列關(guān)系,對(duì)應(yīng)于SQL中的union操作。Join節(jié)點(diǎn)表示組圖模式,其子節(jié)點(diǎn)之間也是并列關(guān)系,對(duì)應(yīng)于SQL中的join操作 。在SPARQL的查詢模式被明確劃分成多個(gè)基本圖模式以后,整個(gè)where子句片段所含有的信息量就是各模式間的關(guān)系,形式類似于“PI optional {{P2} optional {P3}}union {P4}. {P5}”,稱為模式串。由于optional關(guān)鍵詞的特殊性,需要根據(jù)大括號(hào)“ ”來(lái)區(qū)分平行或嵌套關(guān)系。而基本圖模式可能本身就帶有大括號(hào),如一個(gè)簡(jiǎn)單的基本圖模式查詢Pl與基本圖模式{P1}的查詢結(jié)果是一致的。為了使模式串僅簡(jiǎn)潔地表示模式的關(guān)系,在生成模式樹(shù)時(shí)不需要做過(guò)多的判斷操作,需要對(duì)基本圖模式的括號(hào)進(jìn)行清理。具體操作原則是若ー個(gè)基本圖模式如Pl直接被一対“ H ”包圍,則自動(dòng)消去這對(duì)大括號(hào)。如此反復(fù)多次對(duì)每個(gè)基本圖模式進(jìn)行檢查,直到不存在一対“ H ”里只有ー個(gè)基本圖模式的情況。如“ Pl optional {{P2} optional {P3}} union {P4} {P5} ” 清理后就變成了“ Pl optional {P2optional P3} union P4 P5,,。清理過(guò)后的新模式串的每ー個(gè)字符都是創(chuàng)建模式樹(shù)所不可缺少的部分,包括大括號(hào)“ H ”。依照optional、union、以及join模式樣板創(chuàng)建模式樹(shù)。步驟200具體包括如下步驟步驟201、創(chuàng)建初始空節(jié)點(diǎn)N。此空節(jié)點(diǎn)并非SPARQL查詢中的空結(jié)點(diǎn),而僅僅表示尚未賦值而已。設(shè)置當(dāng)前模式指針current,指示當(dāng)前處理的有效模式,簡(jiǎn)記為current節(jié)點(diǎn)。此時(shí)current節(jié)點(diǎn)為N。步驟202、讀取模式串;步驟203、判斷讀取的模式串元素是模式Px、optional/union關(guān)鍵詞、“ {”符號(hào)和“} ”符號(hào)中的哪ー種,如果是模式Px,則轉(zhuǎn)步驟204 ;如果是optionalAmion關(guān)鍵詞,貝Ij轉(zhuǎn)步驟205 ;如果是符號(hào),則轉(zhuǎn)步驟206 ;如果是符號(hào),則轉(zhuǎn)步驟207 ;步驟204、判斷current節(jié)點(diǎn)類型;如果current節(jié)點(diǎn)為空節(jié)點(diǎn),則將該空節(jié)點(diǎn)賦值為Px,并判斷current節(jié)點(diǎn)上是否存在父節(jié)點(diǎn),如果有,則將current指針指向當(dāng)前current節(jié)點(diǎn)的父節(jié)點(diǎn)current =current, parent,若current節(jié)點(diǎn)沒(méi)有父節(jié)點(diǎn),則保持原來(lái)的current節(jié)點(diǎn)不做處理。如果current節(jié)點(diǎn)為jo in節(jié)點(diǎn),則生成一個(gè)新節(jié)點(diǎn)Px作為jo in節(jié)點(diǎn)的最右孩子。current節(jié)兒小變。如果current節(jié)點(diǎn)為其他類型,則提取join模板,將current節(jié)點(diǎn)作為join節(jié)點(diǎn)的左孩子,Px作為join節(jié)點(diǎn)的右孩子,current指針指向join節(jié)點(diǎn)。
處理完畢轉(zhuǎn)步驟208。步驟205、判斷current節(jié)點(diǎn)類型;如果current節(jié)點(diǎn)為空節(jié)點(diǎn)將該空節(jié)點(diǎn)賦值為一致的關(guān)鍵詞,并生成一個(gè)新的空節(jié)點(diǎn)作為該關(guān)鍵詞節(jié)點(diǎn)的右孩子,current指向該最右孩子。如果current節(jié)點(diǎn)值與讀取的關(guān)鍵詞一致,則創(chuàng)建一個(gè)空節(jié)點(diǎn),添加為current節(jié)點(diǎn)的最右孩子,并將該空節(jié)點(diǎn)設(shè)置為current節(jié)點(diǎn);如果current節(jié)點(diǎn)為其他類型,則提取ー個(gè)與關(guān)鍵詞相對(duì)應(yīng)的模板,將current節(jié)點(diǎn)作為模板中根節(jié)點(diǎn)(與該關(guān)鍵詞一致)的左孩子,current指向模板根節(jié)點(diǎn)的空節(jié)點(diǎn)右孩 子。處理完畢轉(zhuǎn)步驟208。步驟206、生成一個(gè)空節(jié)點(diǎn),作為current節(jié)點(diǎn)的左孩子,current指向該左孩子。由于簡(jiǎn)化后的模式串中,“ {”符號(hào)只可能出現(xiàn)在optional或union關(guān)鍵詞后表示模式中存在嵌套模式,因此current —定指向某個(gè)空節(jié)點(diǎn),再生成一個(gè)空節(jié)點(diǎn),作為current節(jié)點(diǎn)的左孩子,current指向該左孩子。步驟207、“} ”符號(hào)與“ {”相對(duì)應(yīng),表示從當(dāng)前嵌套模式中跳出,current指向當(dāng)前current 節(jié)兒的父節(jié)點(diǎn)current = current, parent 步驟208、判斷是否以及讀取到模式串尾部,如果否則轉(zhuǎn)步驟202,如果是則模式串讀取完畢,模式樹(shù)生成完畢。圖8示出了上述步驟中使用的optional、union和join模板樣式。圖7 不出了由前例中模式串“ Pl optional {P2 optional P3} union P4.P5”生成模式樹(shù)的過(guò)程。圖9 不出了圖 7 最終由“ Pl optional {P2 optional P3} union P4.P5” 生成的模式樹(shù)。構(gòu)建模式樹(shù)以后,根據(jù)模式樹(shù)所表達(dá)出來(lái)的關(guān)系就可以生成查詢條件了。整個(gè)過(guò)程大體上是由葉結(jié)點(diǎn)上溯至根節(jié)點(diǎn)的過(guò)程,生成完整SQL查詢語(yǔ)言。本例中的模式樹(shù)表示Pl和P2的模式解進(jìn)行聯(lián)合union操作,共同作為P3的主模式,根據(jù)P3是否有匹配RDF圖進(jìn)行模式解的添加,采用左外連接left join操作;所得結(jié)果與P4做連接操作,說(shuō)明最終匹配既要滿足前面的整體解,又要滿足P4。步驟300、根據(jù)結(jié)果變量表var_set、結(jié)果集修飾符單元modifier表、模式串、濾值表filter、各基本圖模式的變量表varset_i和空結(jié)點(diǎn)表bnode_i表、常量表match_i分別生成各基本圖模式的SQL子查詢片段,根據(jù)模式樹(shù)表示的各基本圖模式之間的關(guān)系將各SQL子查詢片段連接成完整的SQL查詢語(yǔ)句段。上述步驟100中生成的各獨(dú)立表多對(duì)應(yīng)的SQL片段關(guān)系如下表所示。
權(quán)利要求
1.一種基于關(guān)系數(shù)據(jù)庫(kù)的資源描述框架(RDF)查詢方法,用于利用SPARQL語(yǔ)句對(duì)以三元組形式存儲(chǔ)于關(guān)系數(shù)據(jù)庫(kù)中的RDF數(shù)據(jù)進(jìn)行查詢,所述方法包括 步驟100、根據(jù)用戶輸入的SPARQL查詢語(yǔ)句建立結(jié)果變量表、分離所述SPARQL查詢語(yǔ)句獲得各基本圖模式,建立與各基本圖模式對(duì)應(yīng)的常量表、變量表和空節(jié)點(diǎn)表以及標(biāo)識(shí)各基本圖模式之間邏輯關(guān)系的模式串; 步驟200、根據(jù)模式串生成模式樹(shù),其中,模式樹(shù)用樹(shù)的結(jié)構(gòu)來(lái)表示各圖模式之間的關(guān)系,其中葉子節(jié)點(diǎn)表示基本圖模式,其值為基本圖模式的編號(hào);非葉子節(jié)點(diǎn)表示模式間的關(guān)系,其值為optional、union和join ;其中join表示不帶關(guān)鍵詞的組圖模式的一個(gè)分支;步驟300、根據(jù)各基本圖模式對(duì)應(yīng)的常量表、變量表和空節(jié)點(diǎn)表分別生成各基本圖模式的SQL子查詢片段,根據(jù)模式樹(shù)表示的各基本圖模式之間的關(guān)系將各SQL子查詢片段連接成完整的SQL查詢語(yǔ)句段; 步驟400、利用轉(zhuǎn)換獲得的SQL查詢語(yǔ)句段對(duì)關(guān)系數(shù)據(jù)庫(kù)中的RDF數(shù)據(jù)進(jìn)行查詢; 步驟500、根據(jù)SPARQL結(jié)果集的限定以及用戶設(shè)定對(duì)對(duì)查詢結(jié)果進(jìn)行語(yǔ)義包裝向用戶返回查詢結(jié)果。
2.如權(quán)利要求I所述的基于關(guān)系數(shù)據(jù)庫(kù)的資源描述框架(RDF)查詢方法,其特征在干,所述步驟100包括 步驟101、提取申明部分并利用申明部分內(nèi)容替換SPARQL語(yǔ)句中的前綴; 步驟102、從SPARQL查詢語(yǔ)句段提取結(jié)果集部分的語(yǔ)句,根據(jù)結(jié)果集部分語(yǔ)句建立結(jié)果變量表及結(jié)果集約束條件; 步驟103、將SPARQL查詢語(yǔ)句段中的查詢模式部分根據(jù)關(guān)鍵詞unioruoptional以及成對(duì)的“ H”劃分為多個(gè)基本圖模式;將基本圖模式編號(hào),替換原有具體圖模式,形成模式串;步驟104、對(duì)于劃分得到的基本圖模式進(jìn)行預(yù)處理以獲得符合“主謂賓”三元組模板的三元組集合; 步驟105、對(duì)每ー個(gè)三元組集合分辨構(gòu)建常量表、查詢變量表、空節(jié)點(diǎn)表,其中,所述常量表用于存儲(chǔ)所述三元組集合中常量的常量值、出現(xiàn)次數(shù)和位置,所述變量表用于所述三元組集合中變量的變量名稱、出現(xiàn)次數(shù)和位置,所述空節(jié)點(diǎn)表用于存儲(chǔ)所述三元組集合中空節(jié)點(diǎn)的空節(jié)點(diǎn)標(biāo)識(shí)、出現(xiàn)次數(shù)和位置。
3.如權(quán)利要求2所述的基于關(guān)系數(shù)據(jù)庫(kù)的資源描述框架(RDF)查詢方法,其特征在干,所述步驟105包括 根據(jù)正則表達(dá)式,依次提取出所述三元組集合中各三元組的主語(yǔ)、謂語(yǔ)和賓語(yǔ);同時(shí)在處理過(guò)程中判斷當(dāng)前元素是常量、變量還是空節(jié)點(diǎn),井根據(jù)類型選擇即將存入的元素結(jié)構(gòu)表; 在對(duì)應(yīng)的元素結(jié)構(gòu)表中搜尋數(shù)組部分存儲(chǔ)的元素有效值,如果搜索到與當(dāng)前元素有效值相同的數(shù)據(jù)項(xiàng),則將該元素的當(dāng)前位置存入對(duì)應(yīng)數(shù)據(jù)項(xiàng)所帶鏈表的表頭位置,同時(shí)將出現(xiàn)次數(shù)自增I ;如果沒(méi)有找到相同的數(shù)據(jù)項(xiàng),則將該元素有效值存入數(shù)組中,出現(xiàn)次數(shù)部分置為1,將元素的當(dāng)前位置記錄在后置鏈表中。
4.如權(quán)利要求I所述的基于關(guān)系數(shù)據(jù)庫(kù)的資源描述框架(RDF)查詢方法,其特征在干,所述步驟200包括 步驟201、創(chuàng)建初始模式樹(shù)空白節(jié)點(diǎn),其表示尚未賦值的模式樹(shù)節(jié)點(diǎn),設(shè)置當(dāng)前模式指針,用于指示當(dāng)前處理的有效模式樹(shù)節(jié)點(diǎn)current節(jié)點(diǎn); 步驟202、讀取模式串; 步驟203、判斷讀取的模式串元素是模式PX、optional/union關(guān)鍵詞、“ {”符號(hào)和“} ”符號(hào)中的哪ー種,如果是基本圖模式PX,則轉(zhuǎn)步驟204 ;如果是optionalAinion關(guān)鍵詞,貝U轉(zhuǎn)步驟205 ;如果是符號(hào),則轉(zhuǎn)步驟206 ;如果是符號(hào),則轉(zhuǎn)步驟207 ; 步驟204、判斷current節(jié)點(diǎn)類型; 如果current節(jié)點(diǎn)為空節(jié)點(diǎn),則將該空節(jié)點(diǎn)賦值為所述基本圖模式PX,并判斷current節(jié)點(diǎn)上是否存在父節(jié)點(diǎn),如果有,則將當(dāng)前模式指針指向current節(jié)點(diǎn)的父節(jié)點(diǎn)若current節(jié)點(diǎn)沒(méi)有父節(jié)點(diǎn),則保持原來(lái)的current節(jié)點(diǎn)不做處理; 如果current節(jié)點(diǎn)為join節(jié)點(diǎn),則生成一個(gè)新節(jié)點(diǎn)作為join節(jié)點(diǎn)的最右孩子;current節(jié)兒小變; 如果current節(jié)點(diǎn)為其他類型的節(jié)點(diǎn),則提取join模板,將current節(jié)點(diǎn)作為join節(jié)點(diǎn)的左孩子,所述基本圖模式PX作為join節(jié)點(diǎn)的右孩子,當(dāng)前模式指針指向join節(jié)點(diǎn);處理完畢轉(zhuǎn)步驟208 ; 步驟205、判斷current節(jié)點(diǎn)類型; 如果current節(jié)點(diǎn)為空節(jié)點(diǎn)將該空節(jié)點(diǎn)賦值為一致的關(guān)鍵詞,并生成ー個(gè)新的空節(jié)點(diǎn)作為該關(guān)鍵詞節(jié)點(diǎn)的右孩子,當(dāng)前模式指針指向該最右孩子; 如果current節(jié)點(diǎn)值與讀取的關(guān)鍵詞一致,則創(chuàng)建一個(gè)空節(jié)點(diǎn),添加為current節(jié)點(diǎn)的最右孩子,并將該空節(jié)點(diǎn)設(shè)置為current節(jié)點(diǎn); 如果current節(jié)點(diǎn)為其他類型,則提取ー個(gè)與關(guān)鍵詞相對(duì)應(yīng)的模板,將current節(jié)點(diǎn)作為模板中根節(jié)點(diǎn)的左孩子,當(dāng)前模式指針指向模板根節(jié)點(diǎn)的空節(jié)點(diǎn)右孩子; 處理完畢轉(zhuǎn)步驟208 ; 步驟206、生成一個(gè)空節(jié)點(diǎn),作為current節(jié)點(diǎn)的左孩子,current指向該左孩子; 步驟207、當(dāng)前模式指針指向當(dāng)前current節(jié)點(diǎn)的父節(jié)點(diǎn); 步驟208、判斷是否以及讀取到模式串尾部,如果否則轉(zhuǎn)步驟202,如果是則模式串讀取完畢,模式樹(shù)生成完畢。
5.如權(quán)利要求I所述的基于關(guān)系數(shù)據(jù)庫(kù)的資源描述框架(RDF)查詢方法,其特征在干,所述步驟300中生成各基本圖模式的SQL子查詢片段包括 步驟301、根據(jù)結(jié)果變量表,建立select子句,選取后續(xù)生成的from集中跟所述結(jié)果變量表中的變量名一致的屬性列; 步驟302、根據(jù)SPARQL中提供的已知量建立每個(gè)基本圖模式的SQL查詢匹配;由于每個(gè)三元組是對(duì)數(shù)據(jù)庫(kù)中三元組記錄的一次匹配,因此需要對(duì)每個(gè)三元組與數(shù)據(jù)庫(kù)的匹配建立別名,則根據(jù)已知量構(gòu)建的SQL約束語(yǔ)句; 步驟303、根據(jù)該基本圖模式的變量表,捜索出現(xiàn)次數(shù)大于I的単元,對(duì)以該単元為頭結(jié)點(diǎn)的鏈表,建立等價(jià)關(guān)系; 步驟304、根據(jù)該基本模式的空白節(jié)點(diǎn)表,捜索出現(xiàn)次數(shù)大于I的単元,對(duì)以該單元為頭結(jié)點(diǎn)的鏈表,建立等價(jià)關(guān)系; 步驟305、對(duì)每個(gè)基本圖模式,執(zhí)行一次完整的Select — Where查詢,其中select子句是根據(jù)每個(gè)基本圖模式的變量表與全局的結(jié)果變量表來(lái)進(jìn)行選取,選取在結(jié)果變量表和變量表中均出現(xiàn)過(guò)的變量,在變量表找到這些變量出現(xiàn)的任意ー個(gè)位置,構(gòu)造select子句,并以變量名對(duì)其進(jìn)行重命名。
6.如權(quán)利要求I所述的基于關(guān)系數(shù)據(jù)庫(kù)的資源描述框架(RDF)查詢方法,其特征在干,所述步驟300中根據(jù)模式樹(shù)表示的各基本圖模式之間的關(guān)系將各SQL子查詢片段連接成完整的SQL查詢語(yǔ)句段包括 步驟310、提取當(dāng)前最近葉結(jié)點(diǎn)處的union或join關(guān)鍵詞節(jié)點(diǎn),提取其下所屬的子樹(shù); 步驟320、根據(jù)各基本圖模式對(duì)應(yīng)的SQL子查詢片段將僅包含optional關(guān)鍵詞節(jié)點(diǎn)或不包括任何關(guān)鍵詞節(jié)點(diǎn)的子樹(shù)轉(zhuǎn)換為與該子樹(shù)對(duì)應(yīng)的子樹(shù)SQL查詢片段; 步驟330、將子樹(shù)的SQL片段聯(lián)合或連接起來(lái)所生成的SQL查詢,新生成的SQL查詢當(dāng)成基本圖模式的SQL子查詢片段替代整棵以u(píng)nion或join為根節(jié)點(diǎn)的子樹(shù)獲得更新的模式樹(shù); 步驟340、判斷所述更新的模式樹(shù)是否僅剩下ー個(gè)基本圖模式節(jié)點(diǎn)或剩下可選圖模式子樹(shù),如果是轉(zhuǎn)步驟350,否則轉(zhuǎn)步驟310 ; 步驟350、步驟350、如果只剩下ー個(gè)基本圖模式節(jié)點(diǎn),則直接提取該節(jié)點(diǎn)對(duì)應(yīng)的SQL查詢片段,如果僅剩下可選圖模式字?jǐn)?shù),則可選圖模式子樹(shù)再進(jìn)行一次與子樹(shù)SQL片段一致的操作即生成了整棵模式樹(shù)的SQL轉(zhuǎn)換。
7.一種基于關(guān)系數(shù)據(jù)庫(kù)的資源描述框架(RDF)查詢系統(tǒng),用于利用SPARQL語(yǔ)句對(duì)以三元組形式存儲(chǔ)于關(guān)系數(shù)據(jù)庫(kù)中的RDF數(shù)據(jù)進(jìn)行查詢,所述系統(tǒng)包括 查詢語(yǔ)句處理裝置,用于根據(jù)用戶輸入的SPARQL查詢語(yǔ)句建立結(jié)果變量表、分離所述SPARQL查詢語(yǔ)句獲得各基本圖模式,建立與各基本圖模式對(duì)應(yīng)的常量表、變量表和空節(jié)點(diǎn)表以及標(biāo)識(shí)各基本圖模式之間邏輯關(guān)系的模式串; 模式樹(shù)生成裝置,用于根據(jù)模式串生成模式樹(shù),其中,模式樹(shù)用樹(shù)的結(jié)構(gòu)來(lái)表示各圖模式之間的關(guān)系,其中葉子節(jié)點(diǎn)表示基本圖模式,其值為基本圖模式的編號(hào);非葉子節(jié)點(diǎn)表示模式間的關(guān)系,其值為optional、union和join ;其中join表示不帶關(guān)鍵詞的組圖模式的一個(gè)分支; SQL轉(zhuǎn)換裝置,根據(jù)各基本圖模式對(duì)應(yīng)的常量表、變量表和空節(jié)點(diǎn)表分別生成各基本圖模式的SQL子查詢片段,根據(jù)模式樹(shù)表示的各基本圖模式之間的關(guān)系將各SQL子查詢片段連接成完整的SQL查詢語(yǔ)句段; 數(shù)據(jù)庫(kù)查詢裝置,利用轉(zhuǎn)換獲得的SQL查詢語(yǔ)句段對(duì)關(guān)系數(shù)據(jù)庫(kù)中的RDF數(shù)據(jù)進(jìn)行查詢; 語(yǔ)義包裝裝置,根據(jù)SPARQL結(jié)果集的限定以及用戶設(shè)定對(duì)對(duì)查詢結(jié)果進(jìn)行語(yǔ)義包裝向用戶返回查詢結(jié)果。
全文摘要
本發(fā)明公開(kāi)了一種基于關(guān)系數(shù)據(jù)庫(kù)的資源描述框架查詢方法和系統(tǒng),其中,所述方法包括根據(jù)用戶輸入的SPARQL查詢語(yǔ)句建立結(jié)果變量表、分離所述SPARQL查詢語(yǔ)句獲得各基本圖模式,建立與各基本圖模式對(duì)應(yīng)的常量表、變量表和空節(jié)點(diǎn)表以及標(biāo)識(shí)各基本圖模式之間邏輯關(guān)系的模式串;根據(jù)模式串生成模式樹(shù);根據(jù)各基本圖模式對(duì)應(yīng)的元素結(jié)構(gòu)表分別生成各基本圖模式的SQL子查詢片段,根據(jù)模式樹(shù)表示的各基本圖模式之間的關(guān)系將各SQL子查詢片段連接成完整的SQL查詢語(yǔ)句段;利用轉(zhuǎn)換獲得的SQL查詢語(yǔ)句段對(duì)關(guān)系數(shù)據(jù)庫(kù)中的RDF數(shù)據(jù)進(jìn)行查詢;根據(jù)SPARQL結(jié)果集的限定以及用戶設(shè)定對(duì)對(duì)查詢結(jié)果進(jìn)行語(yǔ)義包裝向用戶返回查詢結(jié)果。
文檔編號(hào)G06F17/30GK102693310SQ20121016777
公開(kāi)日2012年9月26日 申請(qǐng)日期2012年5月28日 優(yōu)先權(quán)日2012年5月28日
發(fā)明者吳少智, 吳躍, 陳佳, 黎明 申請(qǐng)人:無(wú)錫成電科大科技發(fā)展有限公司