• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于查詢(xún)轉(zhuǎn)換的RDF高效查詢(xún)方法

    2015-06-14 07:38:28程經(jīng)緯張麗麗馬宗民
    關(guān)鍵詞:子句元組三元組

    佟 強(qiáng),程經(jīng)緯,張 富,張麗麗,馬宗民

    (1.東北大學(xué) 軟件學(xué)院,沈陽(yáng)110819;2.東北大學(xué) 信息科學(xué)與工程學(xué)院,沈陽(yáng)110819)

    0 引 言

    語(yǔ)義Web的核心是通過(guò)為Web資源添加能夠被計(jì)算機(jī)理解的語(yǔ)義元數(shù)據(jù),使Web成為一個(gè)通用的信息交換媒介。資源描述框架(RDF,Resource description framework)是語(yǔ)義Web資源標(biāo)注的推薦標(biāo)準(zhǔn)[1]。現(xiàn)有的大部分RDF 管理系統(tǒng)都采用DBMS來(lái)存儲(chǔ)和管理RDF 數(shù)據(jù)。這樣,就可以利用關(guān)系數(shù)據(jù)庫(kù)成熟的數(shù)據(jù)查詢(xún)和優(yōu)化技術(shù)來(lái)達(dá)到高效查詢(xún)RDF 數(shù)據(jù)集的目的。RDF 的 標(biāo) 準(zhǔn) 查 詢(xún) 語(yǔ) 言 是SPARQL[2](Simple protocol and RDF query language),而關(guān)系數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)查詢(xún)語(yǔ)言是SQL,因此需要將SPARQL查詢(xún)轉(zhuǎn)換為SQL查詢(xún)。

    Kiminki等通過(guò)在SPARQL 語(yǔ)言與SQL 語(yǔ)言中間定義了一種新的過(guò)渡性語(yǔ)言AQL,實(shí)現(xiàn)了SPARQL查詢(xún)到SQL 查詢(xún)方法實(shí)現(xiàn)[3]。這類(lèi)方法由于需要定義中間語(yǔ)言,并且需要進(jìn)行兩次語(yǔ)言的轉(zhuǎn)換,所以相對(duì)復(fù)雜、費(fèi)時(shí)。采用直接映射轉(zhuǎn)換的 方 法 相 對(duì) 較 多,Chebotko 等[4]通 過(guò) 研 究SPARQL查詢(xún)的匹配原理,推理出了三元組圖模式匹配原理的SQL 表示,提出了SPARQL 查詢(xún)中不同圖模式到SQL查詢(xún)的轉(zhuǎn)換實(shí)現(xiàn)方法,該方法采用的主要思想是對(duì)基本圖模式實(shí)行邊轉(zhuǎn)換邊查詢(xún)的策略,并且一個(gè)SPARQL查詢(xún)中的多個(gè)圖模式之間采用順序處理的方式完成。Elliott等人在文獻(xiàn)[4]的基礎(chǔ)上提出了全面轉(zhuǎn)換SPARQL到SQL的算法[5],實(shí)現(xiàn)了包含在SELECT 查詢(xún)模式內(nèi)大部分查詢(xún)到SQL 查詢(xún)的轉(zhuǎn)換,與文獻(xiàn)[4]不同的是,該方法不是順序處理每個(gè)基本圖模式,而是采用類(lèi)似樹(shù)模型存儲(chǔ)關(guān)系操作符,遞歸完成FlatSPARQLtoSQL實(shí)驗(yàn)系統(tǒng)的設(shè)計(jì)。國(guó)內(nèi)浙江大學(xué)的Zhou 等通過(guò)重寫(xiě)用戶(hù)提供的SPARQL語(yǔ)義查詢(xún),提供更多的查詢(xún)信息,由此提出了重寫(xiě)后 的SPARQL 查 詢(xún) 到SQL 查 詢(xún) 的 實(shí) 現(xiàn) 方 法[6]。吳濤等對(duì)SPARQL查詢(xún)機(jī)制進(jìn)行了分析,基于圖模式的實(shí)現(xiàn)方式提出了語(yǔ)義Web查詢(xún)語(yǔ)言的轉(zhuǎn)換方法,但轉(zhuǎn)換范圍只限于圖模式的轉(zhuǎn)換,不能接受SELECT 之外的其他查詢(xún)模式[7]。雷云飛等通過(guò)在關(guān)系表之間添加鍵值約束聯(lián)系,使關(guān)系表具有一定語(yǔ)義,進(jìn)而分析關(guān)系表的查詢(xún)與SPARQL 查詢(xún)的聯(lián)系,但是并沒(méi)有給出SPARQL 語(yǔ)言到SQL 語(yǔ)言的轉(zhuǎn)換方法和規(guī)則[8]。王 進(jìn) 鵬 等[9]給 出 了 圖 模 式 關(guān) 系 代 數(shù) 與SQL語(yǔ)句之間的轉(zhuǎn)換方法。該方法需要首先將SPARQL轉(zhuǎn)換為關(guān)系代數(shù),再執(zhí)行關(guān)系代數(shù)到SQL的轉(zhuǎn)換。此外,ASK 和DESCRIBE 等其他查詢(xún)形式的轉(zhuǎn)換還沒(méi)有實(shí)現(xiàn)。

    本文提出的查詢(xún)轉(zhuǎn)換方法采用了一次轉(zhuǎn)換后再執(zhí)行的策略,能夠有效地降低查詢(xún)轉(zhuǎn)換的時(shí)間,提高執(zhí)行效率。此外,包含了不同的查詢(xún)模式和圖模式,擴(kuò)展了可接受查詢(xún)的范圍。

    1 轉(zhuǎn)換基本思想

    從形式上看,一個(gè)SPARQL查詢(xún)一般由五部分組成:聲明、查詢(xún)形式與結(jié)果集、數(shù)據(jù)集、圖模式和結(jié)果修飾。

    聲明:將一個(gè)用IRI表示的資源縮寫(xiě)成一個(gè)簡(jiǎn)單的命名空間的形式,目的就是為了方便標(biāo)記和節(jié)省存儲(chǔ)空間。這部分在查詢(xún)轉(zhuǎn)換中并不涉及。

    查詢(xún)形式與結(jié)果集:SPARQL 包含四類(lèi)查詢(xún)模 式 SELECT、CONSTRUCT、ASK 和DECRIBLE,模式匹配的結(jié)果形成結(jié)果集或RDF圖。

    數(shù)據(jù)集:在SPARQL查詢(xún)中,采用FROM 子句和FROM NAMED 子句對(duì)數(shù)據(jù)集進(jìn)行描述。數(shù)據(jù)集中可以包括一個(gè)沒(méi)有名字的默認(rèn)圖,以及零個(gè)或者多個(gè)通過(guò)URI進(jìn)行識(shí)別的具名圖。

    圖模式:SPARQL 查詢(xún)基于圖模式匹配實(shí)現(xiàn)[10],最簡(jiǎn)單的圖模式是三元組模式,類(lèi)似于RDF三元組,但主語(yǔ)、謂語(yǔ)或賓語(yǔ)位置允許出現(xiàn)變量。復(fù)雜圖模式包括:基本圖模式、組圖模式、可選圖模式和多圖模式。

    結(jié)果修飾:結(jié)果修飾符能夠影響查詢(xún)的返回結(jié)果,使查詢(xún)?cè)谧饔梅秶膹V度和作用效果的程度上都有顯著增強(qiáng)。

    例1 給定一個(gè)圖模式為三元組模式的SPARQL查詢(xún):

    01 SELECT?name

    02 FROM <http://example.org/foaf/aliceFoaf>

    03 WHERE{?x name?name.}轉(zhuǎn)換為下面的SQL查詢(xún):

    SELECT tri_1.o

    FROM Triple AS tri_1

    WHERE tri_1.p=“name”AND tri_1.res=“http://example.org/foaf/aliceFoaf”

    SELECT:SPARQL 中SELECT 關(guān) 鍵 字 之后跟隨的是變量名集合,SQL 中則是屬性列集合,需要將這兩種名字在形式上進(jìn)行轉(zhuǎn)換。這里定義函數(shù)label(?a)為SPARQL 查詢(xún)中變量?a的名字到SQL 屬性列名的映射。在得到的SELECT 列選擇中需要指定屬性列來(lái)自于哪個(gè)具體的關(guān)系表,如例1 中name屬性列來(lái)自于關(guān)系表tri_1。

    FROM:SQL 中FROM 關(guān) 鍵 字 后 給 出 的 是查詢(xún)數(shù)據(jù)所在的源表,可以包含關(guān)系表的別名形式,例1中為T(mén)riple表分配了別名tri_1。本文中所有的三元組都存儲(chǔ)在一個(gè)關(guān)系表中,所以在進(jìn)行每一步的查詢(xún)操作時(shí),都需要對(duì)關(guān)系表進(jìn)行分配別名操作,避免直接修改源數(shù)據(jù)。

    WHERE:SPARQL查詢(xún)中WHERE中包含的是RDF 三元組需要滿(mǎn)足的圖匹配條件集合。SQL查詢(xún)中WHERE 后面是檢索記錄需要滿(mǎn)足的條件集合。例1 中SPARQL 查詢(xún)中出現(xiàn)的WHERE條件約束{?x name?name.},轉(zhuǎn)換到SQL查詢(xún)的形式為:{tri_1.p=”name”AND tri_1.res =”http://example.org/ foaf/aliceFoaf”}。

    可以看出,在轉(zhuǎn)換過(guò)程中將SPARQL三元組圖模式中的常量術(shù)語(yǔ)轉(zhuǎn)換成了SQL 查詢(xún)中的關(guān)系屬性列值的約束條件,并且將原SPARQL查詢(xún)的FROM 轉(zhuǎn)換到了對(duì)SQL 關(guān)系表屬性列res的值約束上。所以,SQL 查詢(xún)中的WHERE 約束條件主要根據(jù)SPARQL查詢(xún)中FROM 中規(guī)定的RDF圖約束以及WHERE 中的圖模式匹配條件生成。

    2 圖模式轉(zhuǎn)換

    2.1 基本圖模式轉(zhuǎn)換

    基本圖模式是三元組圖模式的有限集合。對(duì)于包含在WHERE約束條件中的SPARQL 三元組圖模式進(jìn)行SQL轉(zhuǎn)換,主要是對(duì)其中的各個(gè)項(xiàng)(sp,op,pp)進(jìn)行分析,根據(jù)項(xiàng)是常量還是變量分別給出不同的處理策略。此外還要判斷在SPARQL查詢(xún)中是否給定了RDF圖的限制。

    項(xiàng)為常量:這時(shí)需要針對(duì)該位置的屬性列名添加是約束條件到生成的WHERE約束條件中;

    項(xiàng)為變量:這時(shí)需要比較該項(xiàng)與其他項(xiàng)是否相同,如果相同,則在生成的WHERE 約束條件中添加相應(yīng)位置屬性列名的等值約束;

    含有對(duì)RDF圖的限制:這時(shí)需要在WHERE條件集合中添加res等于相應(yīng)RDF 圖URI的屬性值約束條件。

    下面給出函數(shù)genWhere(tp,G)。該函數(shù)根據(jù)對(duì)SPARQL 查詢(xún)中三元組圖模式的形式進(jìn)行分析,形成SQL 查詢(xún)中WHERE 約束條件的表達(dá)式。其具體實(shí)現(xiàn)如下:

    函數(shù):genWhere(tp,G)

    輸入:三元組圖模式tp(sp,pp,op),RDF 數(shù)據(jù)集G

    輸出:SQL查詢(xún)WHERE條件約束

    01 初始化where=””,alias=tri_(++i)

    02 if tp.sp?var

    03 then where+=“And”+alias+“.s=tp.sp”

    04 if tp.pp?var

    05 then where+=“And”+alias+“.p=tp.pp”

    06 if tp.op?var

    07 then where+=“And”+alias+“.o=tp.op”

    08 if tp.sp = =tp.pp

    09 then where+=“And”+alias+“.s=”+alias+“.p”

    10 if tp.sp==tp.op

    11 then where+=“And”+alias+“.s=”+alias+“.o”

    12 if tp.pp=tp.op

    13 then where+=“And”+alias+“.p=”+alias+“.o”

    14 where+=“And(”

    15 for each g in G

    16 where+=“OR”+alias+“.res=g”

    17 where +=“)”

    18 return where

    在genWhere(tp,G)的函數(shù)實(shí)現(xiàn)中,分別對(duì)上述三種情況進(jìn)行了分析,并對(duì)where值進(jìn)行了相應(yīng)的條件添加。在第02到07行中,處理了第一種情況,分別對(duì)圖模式中的每個(gè)常量項(xiàng)進(jìn)行判斷,并對(duì)where添加屬性值約束條件;在第08到13行中,處理了第二種情況,分別判斷了三元組中任意兩個(gè)變量項(xiàng)相同的情況,并在where中添加了屬性列間的約束條件;在第14 至17 行,對(duì)SPARQL 查詢(xún)中指定RDF 圖的情況進(jìn)行了處理,在where條件中添加了屬性列res的值約束條件。在形成的where條件表達(dá)式中每個(gè)項(xiàng)約束條件都是以AND 為連接,RDF 圖約束之間用OR 連接。

    根據(jù)以上的分析進(jìn)而提出只包含基本圖模式的SPARQL查詢(xún)到SQL 的轉(zhuǎn)換方法,現(xiàn)定義一個(gè)函數(shù)trans(m,G)以實(shí)現(xiàn)該功能。該函數(shù)對(duì)基本圖模式的構(gòu)成進(jìn)行分析,并將其轉(zhuǎn)換為SQL 查詢(xún)。

    函數(shù):trans(bgp,G)

    輸入:基本圖模式bgp,RDF數(shù)據(jù)集G

    輸出:SQL查詢(xún)

    01 初始化select=“”,from=“”,where=“”,first=true

    02 for each?a in bgp

    a)if first==true then first=false else select+=“,”

    b)select+=label(?a)

    03 from+=“Triple AS”+tri_i

    04 for each tp in bgp

    05 where+=genWhere(tp,G)

    06 return query=“SELECT”+select+“FROM”+

    from+ “WHRER”+

    where+ “AS T_”+(++j)

    SQL 查 詢(xún) 的 結(jié) 構(gòu) 是“SELECT+FROM +WHERE”形式,所以trans函數(shù)要實(shí)現(xiàn)這三個(gè)基本結(jié)構(gòu)的生成。在該算法中,第02 行生成SELECT 語(yǔ)句,第03 行 生 成FROM 子 句,為 要查詢(xún)的數(shù)據(jù)表分配別名,第06 行將genWhere(tp,G)產(chǎn)生的約束條件添加到生成的SQL 查詢(xún)中。

    2.2 SPARQL復(fù)雜圖模式的分解

    這里用m 表示復(fù)雜圖模式,將其表示為子模式連接形式為m.leftchild op m.rightchild,其中op可以為AND、OPT 和UNION,分別代表組圖模式、可選圖模式和多圖模式。

    復(fù)雜圖模式分解的基本思想是:首先分別對(duì)復(fù)雜圖模式中每個(gè)子模式進(jìn)行轉(zhuǎn)換,得到相應(yīng)的SQL子查詢(xún),然后根據(jù)子模式之間的邏輯關(guān)系,將子查詢(xún)結(jié)果按照不同的連接形式添加到最終的FROM 源表約束中。

    2.2.1 組圖模式到SQL語(yǔ)言的轉(zhuǎn)換

    滿(mǎn)足組圖模式的每一個(gè)結(jié)果必須對(duì)該組圖模式內(nèi)的每個(gè)基本圖模式都匹配成功。假定r為存儲(chǔ)RDF數(shù)據(jù)集的關(guān)系表中的一條記錄。對(duì)于任意滿(mǎn)足trans(m.leftchild AND m.rightchild,G)的記錄r,r必定同時(shí)滿(mǎn)足trans(m.leftchild,G)和trans(m.rightchild,G)。在關(guān)系代數(shù)中,這種同時(shí)滿(mǎn)足的關(guān)系可以用表之間的內(nèi)連接來(lái)表示。

    具體地說(shuō),首先轉(zhuǎn)換子模式,得到SQL 查詢(xún)trans(m.leftchild,G)的結(jié)果集合R1 和trans(m.rightchild,G)的結(jié)果集合R2;然后根據(jù)m.leftchild和m.rightchild之間的AND 關(guān)系,對(duì)結(jié)果關(guān)系表R1和R2進(jìn)行內(nèi)連接操作。

    下面給出組圖模式到SQL 轉(zhuǎn)換的函數(shù)trans(m,AND,G)。連接條件設(shè)定為“TRUE AND(m.leftchild.a =m.rightchild.a OR m.leftchild.a is null OR m.rightchild.a is null)”,其中“m.leftchild.a=m.rightchild.a”代表兩個(gè)關(guān)系表之間的自然連接條件,“m.leftchild.a is null”代表的是當(dāng)m.leftchild中含有可選圖模式時(shí),變量?a未被綁定的情況。

    函數(shù):trans(m,AND,G)

    輸入:組圖模式m,RDF數(shù)據(jù)集G

    輸出:SQL查詢(xún)

    01 query+=“(”+trans(m.leftchild,G)+“INNER JOIN”+trans(m.rightchild,G)

    02 first=true

    03 for m.leftchild與m.rightchild的相同屬性列a

    04 if first=true

    05 then first=false

    06 else query+=“AND(m.leftchild.a= m.rightchild.a OR m.leftchild.a is null OR m.rightchild.a is null)”

    07 query+=“ON TRUE”

    08 query+=“)AS T_”+(++j)

    09 return query

    2.2.2 可選圖模式到SQL語(yǔ)言的轉(zhuǎn)換

    可選圖模式由OPTIONAL 子句構(gòu)成,其功能是對(duì)OPTIONAL 子句內(nèi)的圖模式可選匹配,如果匹配失敗,就用NULL來(lái)代替變量綁定。在關(guān)系代數(shù)中,這種選擇的概念可以用左連接體現(xiàn)。

    可選圖模式中包含著兩類(lèi)OPTIONAL 子句,一類(lèi)是平行OPTIONAL 子句,一類(lèi)是嵌套OPTIONAL子句。

    嵌套 OPTIONAL 子句是指在一個(gè)OPTIONAL 子 句 中 還 包 含 至 少 一 個(gè)OPTIONAL 子句。嵌套OPTIONAL 子句的轉(zhuǎn)換方式為:先使用基本圖模式進(jìn)行查詢(xún),然后再將得出的關(guān)系表與整個(gè)嵌套OPTIONAL子句的查詢(xún)結(jié)果進(jìn)行左連接操作。

    下面分析平行OPTIONAL 子句,如例2 所示。

    例2 (平行OPTIONAL 子句)給定一個(gè)包含平行OPTIONAL子句的SPARQL查詢(xún)?nèi)缦拢?/p>

    01 SELECT?a,?n,?ew

    02 WHERE{

    03 {?a name?n.}

    04 OPTIONAL{?a email?ew.}

    05 OPTIONAL{?a web?ew.}

    06 }

    此查詢(xún)共包含三個(gè)基本圖模式gp1、gp2、gp3,分別在第03、04、05行內(nèi)。對(duì)應(yīng)的圖模式查詢(xún)結(jié)果分別為:R1(a,n),R2(a,ew),R3(a,ew)。

    首先,gp1與gp2的查詢(xún)結(jié)果合并表示為:

    然后進(jìn)行Rres與R3的連接,其連接條件分為兩種情況:

    (1)如果共享變量在Rres中已經(jīng)綁定,則R3中同一變量必須綁定相同的值。

    (2)如果共享變量在Rres中未被綁定,即值為NULL,則R3可以對(duì)該變量進(jìn)行任意值的綁定。

    根據(jù)以上的分析,可以將Rres與R3的連接表示為:Rres(a,n,ew)=

    因?yàn)樵赗res與R3之間存在著兩個(gè)相關(guān)聯(lián)變量?a和?ew。在Rres中變量?a必須綁定,所以在連接條件中需判斷Rres.a=R3.a。第04 行可選圖模式中變量?ew 如果未被綁定(Rres.ew is NULL),則在第05行的可選圖模式中進(jìn)行綁定操作。

    根據(jù)以上對(duì)各種情況的分析,給出OPTIONAL子句到SQL 的轉(zhuǎn)換函數(shù)trans(m,OPT,G)。

    函數(shù):trans(m,OPT,G)

    輸入:組圖模式m,RDF數(shù)據(jù)集G

    輸出:SQL查詢(xún)

    01 query+=“(”+trans(m.leftchild,G)+ “LEFT OUTER JOIN”+

    02trans(m.rightchild,G)

    03 first=true

    04 for m.leftchild與m.rightchild的相同屬性列a

    05 if first=true then first=false else query+=“AND(m.leftchild.a= m.rightchild.a OR m.leftchild.a is null OR m.rightchild.a is null)”

    06 query+=“ON true”

    07 query+=“)AS T_”+(++j)

    08 return query

    該轉(zhuǎn)換方法的原理是:首先利用trans(m,G)將m.leftchild 和m.rightchild 轉(zhuǎn) 換 為SQL 查詢(xún);然后利用關(guān)系代數(shù)中左連接操作上述SQL 查詢(xún)的結(jié)果表。如果m.leftchild 與m.rightchild中存在相同的變量屬性列a,則m.leftchild:∝m.rightchild的連接條件為“m.leftchild.a=m.rightchild.a ?m.leftchild.a is NULL ?m.rightchild.a is NULL”。

    2.2.3 多圖模式到SQL語(yǔ)言的轉(zhuǎn)換

    多圖模式中子模式之間由UNION 關(guān)鍵字連接,表示滿(mǎn)足任一子模式的查詢(xún)結(jié)果都是多圖模式的查詢(xún)結(jié)果。文獻(xiàn)[4]為解決UNION 多圖模式到基本圖模式的方法,引入了操作符。該操作符對(duì)結(jié)果關(guān)系表的操作用關(guān)系代數(shù)的形式表示如下:

    R1∪R2=(R1:∝R2)UNION(R2:∝R1)

    在處理多表連接操作時(shí),連接條件設(shè)定為false,目的是只進(jìn)行兩表屬性列的合并,屬性值不參與表的合并,使得生成兩個(gè)關(guān)系表的屬性結(jié)構(gòu)相同,能夠直接執(zhí)行SQL中的UNION 操作。該處理方法可以用函數(shù)trans(m,UNION,G)表示。

    函數(shù):trans(m,UNION,G)

    輸入:組圖模式m,RDF數(shù)據(jù)集G

    輸出:SQL查詢(xún)

    01 query+=”((”+trans(m.leftchild,G)+”

    LEFT OUTER JOIN”+

    trans(m.rightchild,G)+”O(jiān)n(false))”

    +”UNION(”+trans(m.rightchild,G)+”

    LEFT OUTER JOIN”+

    trans(m.leftchild,G)+”O(jiān)n(false))”+”AS

    T_”+(++j)

    02 return query

    3 結(jié)果修飾符與其他查詢(xún)模式

    SPARQL語(yǔ)言包含多個(gè)結(jié)果修飾符和查詢(xún)模式,影響結(jié)果返回的形式和順序。在轉(zhuǎn)換過(guò)程中,需要將這些結(jié)果修飾符和查詢(xún)模式映射到SQL語(yǔ)言中相應(yīng)的關(guān)鍵字。

    3.1 結(jié)果修飾符到SQL的映射

    3.1.1 相同關(guān)鍵字結(jié)果修飾符的映射

    SPARQL 中 結(jié) 果 修 飾 符 DISTINCT、ORDER BY、LIMIT n 和OFFSET m 在SQL中同樣存在,且用法和功能相同,因此可以直接映射。當(dāng)SPARQL 查詢(xún)中出現(xiàn)這些關(guān)鍵字時(shí),在SQL查詢(xún)中SELECT 關(guān)鍵字后添加該關(guān)鍵字即可。

    3.1.2 FILTER 到SQL的映射

    FILTER(expr(r))實(shí)現(xiàn)對(duì)結(jié)果集的限制,只有使expr(r)為真的數(shù)據(jù)記錄或者三元組才可以在結(jié)果集中表現(xiàn)出來(lái)。其中的布爾型表達(dá)式expr(r)會(huì)涉及到很多方面,包括邏輯符號(hào)(Error!Objects cannot be created from editing field codes.),數(shù)字運(yùn)算符號(hào)(<,≤,≥,>,=),一元運(yùn)算符包括bound,isIRI和一些其他運(yùn)算符等。

    當(dāng)SPARQL 查詢(xún)中出現(xiàn)FILTER 關(guān)鍵字時(shí),只需在轉(zhuǎn)換后的SQL 查詢(xún)的WHERE 條件集合中添加FILTER 內(nèi)的限制條件即可。當(dāng)變量出現(xiàn)在關(guān)系表中時(shí),在WHERE 中添加對(duì)變量值的約束。另外需要考慮的是其中涉及到的數(shù)據(jù)類(lèi)型的轉(zhuǎn)換,以及String字符串的轉(zhuǎn)換和比較操作。

    在轉(zhuǎn)換中需要以下幾個(gè)替換規(guī)則:將變量var用變量名代替,如?a的變量名為a;文字型和URI都轉(zhuǎn)換為字符型,數(shù)值型轉(zhuǎn)換成”l”型;邏輯運(yùn)算符?、?和?分別替換成NOT、AND 和OR;expr為“bound(?x)”替換成“x is not NULL”。

    3.2 SPARQL查詢(xún)模式轉(zhuǎn)換

    SPARQL查詢(xún)語(yǔ)言中包含著四種查詢(xún)模式:SELECT、CONSTRUCT、DESCRIBE和ASK。

    3.2.1 SELECT 查詢(xún)模式轉(zhuǎn)換方法

    首先定義包含SELECT 查詢(xún)模式的SPARQL查詢(xún)Q={Ssel,G,Tree},其中Ssel表示查詢(xún)變量集合;G 代表SPARQL查詢(xún)中指定的RDF圖;參數(shù)Tree就是包含了所有圖模式和限定約束條件的SPARQL結(jié)構(gòu)樹(shù)的根節(jié)點(diǎn)。

    SELECTtoSQL 算法的主要思想是:根據(jù)WHERE中包含的圖模式,分別對(duì)每個(gè)圖模式進(jìn)行轉(zhuǎn)換,得到相應(yīng)的SQL 子查詢(xún),然后根據(jù)各個(gè)圖模式之間的邏輯關(guān)系,將得到的SQL子查詢(xún)按照不同的連接形式添加到最終的FROM 源表約束中。

    算法:SELECTtoSQL

    輸入:SPARQL查詢(xún)Q={Ssel,G,Tree}

    輸出:SQL查詢(xún)

    01 初始化select=“”,from=“”,i=1,query=“”

    02 for 先序遍歷SPARQL 結(jié)構(gòu)樹(shù)Tree中的每個(gè)節(jié)點(diǎn)m

    03 if m 為基本圖模式(組圖模式)節(jié)點(diǎn)then trans(m,AND,G)

    04 if m 為可選圖模式節(jié)點(diǎn)then trans(m,OPT,G)

    05 if m 為多圖模式節(jié)點(diǎn)then trans(m,UNION,G)

    06 first=true

    07 for each?aError!Objects cannot be created from editing field codes.Ssel

    08 if first=true then first=false

    09 else select+=“,”

    10 select+=label(?a)

    11 from+=query+“AS T_”+(++j)

    12 return“SELECT”+select+“FROM”+from其中select代表需要投影的屬性列集合,from 代表源表選擇,query 表示條件約束條件集合。算法使用子查詢(xún)生成的關(guān)系表作為源數(shù)據(jù)表,也就是將query查詢(xún)生成的關(guān)系表作為FROM 中的數(shù)據(jù)源部分。因?yàn)榻M圖模式是由基本圖模式通過(guò)AND 連接而成,第03行對(duì)基本圖模式的判斷和對(duì)組圖模式的判斷合并在一起。R 作為一個(gè)臨時(shí)關(guān)系表用于存儲(chǔ)基本圖模式轉(zhuǎn)換后的查詢(xún)結(jié)果。第04行和05行分別是對(duì)可選圖模式和多圖模式進(jìn)行處理。第07至10行形成了select需要投影的屬性列集合。最后第12行對(duì)結(jié)果關(guān)系表進(jìn)行投影操作,選擇在Ssel中出現(xiàn)并且以其中的變量名命名的屬性列,最終返回V,完成SELECT 查詢(xún)。

    3.2.2 CONSTRUCT 查詢(xún)模式轉(zhuǎn)換

    CONSTRUCT 查詢(xún)模式按照用戶(hù)指定的圖模板返回一個(gè)RDF圖,其中查詢(xún)結(jié)果置換圖模板中的變量。

    CONSTRUCT 查詢(xún)模式會(huì)先按照WHERE約束條件對(duì)數(shù)據(jù)集進(jìn)行查詢(xún)操作,然后將結(jié)果以CONSTRUCT 中指定的RDF 三元組形式輸出。由于RDF圖存儲(chǔ)在關(guān)系數(shù)據(jù)庫(kù)中,所以只能用關(guān)系表近似地表示作為查詢(xún)結(jié)果的RDF圖。

    將CONSTRUCT 查詢(xún)轉(zhuǎn)換為SQL 查詢(xún)的主要思想是:以RDF圖G 和Tree結(jié)構(gòu)樹(shù)的根節(jié)點(diǎn)作為參數(shù)調(diào)用SELECTtoSQL 算法,返回CONSTRUCT 中要求的變量綁定。為了使關(guān)系表包含CONSTRUCT 中的所有屬性,包括常量屬性列和變量屬性列,需要對(duì)擁有變量屬性列的關(guān)系表和擁有常量屬性列的關(guān)系表進(jìn)行笛卡爾積操作。針對(duì)形成的全屬性列關(guān)系表,根據(jù)CONSTRUCT 中出現(xiàn)的每個(gè)基本圖模式的屬性結(jié)構(gòu),投影出相應(yīng)的屬性列,并把相應(yīng)的元組加入到結(jié)果關(guān)系表中。最后,依據(jù)元組所屬圖和元組的主語(yǔ)使用GROUP BY 關(guān)鍵字對(duì)結(jié)果關(guān)系表的元組進(jìn)行分組排序,將結(jié)果集返回給用戶(hù)。上述轉(zhuǎn)換思想形式化表示為以下算法:

    算法:CONSTRUCTtoSQL

    輸入:CONSTRUCT query Q =(Sty,G,Tree)

    輸出:SQL query result

    01 建立一個(gè)臨時(shí)表X,擁有Sty 中常量屬性列Adcol=(literal1,literal2,…)

    02 設(shè)Ssel為Sty中要求表示的變量集合

    03 CREATE VIEW V/*建立視圖V 作為結(jié)果關(guān)系表*/

    04 視圖Y=exec(SELECTtoSQL(Ssel,G,Tree))

    05 Y=Y(jié)×X /*兩個(gè)關(guān)系表的笛卡爾積*/

    06 for Sty中每個(gè)gpi

    07 確定該圖模式的屬性結(jié)構(gòu)

    08 從Y 中投影出圖模式中包含的屬性列,并將元組加入到V 中

    09 對(duì)V 中的元組進(jìn)行分類(lèi)(GROUP BY(res,s))

    10 return V

    其中Sty 表示CONSTRUCT 內(nèi)的結(jié)果輸出格式,可以包含多個(gè)基本圖模式;參數(shù)Tree是包含了所有圖模式和限定約束條件的結(jié)構(gòu)樹(shù)的根節(jié)點(diǎn);G 代表要查詢(xún)的RDF 圖集合。第01行中建立臨時(shí)表X,包含了CONSTRUCT 中要返回格式的常量屬性列。第02 行的Ssel 代表著CONSTRUCT 中需要返回的變量集合。第04行以G 和Tree作為參數(shù)調(diào)用SELECTtoSQL函數(shù),將中間結(jié)果集存儲(chǔ)在視圖Y 中。第05 行將擁有變量屬性列的Y 與擁有常量屬性列的X 進(jìn)行笛卡爾積操作,并以此更新視圖Y,目的是使關(guān)系表中每條記錄都包含CONSTRUCT 要求返回的全部屬性列。第06 到08 行將Y 中記錄按照CONSTRUCT 的要求把相應(yīng)的屬性列進(jìn)行重新排列,加入到結(jié)果關(guān)系表V 中。第09 行是對(duì)V中的記錄進(jìn)行分組排列,主分組詞為res,即RDF圖的URI,次分組詞為三元組的主語(yǔ)。最后將結(jié)果關(guān)系表返回給用戶(hù),完成從CONSTRUCT 查詢(xún)模式到SQL的轉(zhuǎn)換。

    3.2.3 DESCRIBE查詢(xún)模式轉(zhuǎn)換

    DESCRIBE查詢(xún)返回關(guān)于某個(gè)變量?descri的全部描述。首先,找到每個(gè)滿(mǎn)足Where條件的?descri的變量綁定bind。然后,尋找以bind為主語(yǔ)的元組和以bind為主語(yǔ)的元組中的謂詞為主語(yǔ)的元組,以及以bind為賓語(yǔ)的元組。最后,將所有的元組按照RDF 圖IRI和主體進(jìn)行分組排列返回給用戶(hù)。DESCRIBE 查詢(xún)轉(zhuǎn)換形式化表示為以下算法:

    算法:DESCRIBEtoSQL

    輸入:SPARQL query Q=(Descri,G,Tree)

    輸出:SQL query result

    01 CREATE VIEW V

    02 if(isIRI(Descri))

    03 V=exec(SELECTtoSQL(*,Descri,Tree)))

    04 if(isVAR(Descri))

    05 X=exec(SELECTtoSQL(Descri,G,Tree))

    06 for X 中的每個(gè)變量綁定xi

    07 添加exec(SELECTtoSQL(*,G,(s=xi)))的返回結(jié)果到表V 中

    08 for V 中的每個(gè)記錄行提取出謂詞pi和賓語(yǔ)oi

    09 添加exec(SELECTtoSQL(*,G,((s=pi)UNION(s=oi))))的返回結(jié)果到V 中

    10 根據(jù)res和s進(jìn)行結(jié)果排序

    11 return V

    其中Descri為要查詢(xún)的變量或者IRI,WHERE為約束條件,G 為指定的RDF 圖集合。第02、03行處理DESCRIBE 關(guān)鍵字后面描述的是一個(gè)RDF圖IRI的情況,此時(shí)將該IRI內(nèi)的所有元組存入 視 圖 V 中。第04 到10 行 處 理 的 是DESCRIBE關(guān)鍵字后面要描述的是某一個(gè)變量的情況,此時(shí)將滿(mǎn)足圖模式匹配的變量綁定存放到臨時(shí)表X 中。接下來(lái)查找以X 中任意的變量綁定為主語(yǔ)的元組并將其添加到V 中。第08、09行查找以V 中元組的謂詞或者賓語(yǔ)為主語(yǔ)的元組,并且不斷地將元組加入到V 中,直到V 中所有元組都被訪問(wèn)過(guò)。最后對(duì)V 中的元組進(jìn)行分組排列返回給用戶(hù)。

    3.2.4 ASK 查詢(xún)模式轉(zhuǎn)換

    ASK 查詢(xún)模式用于檢測(cè)符合Where條件約束的變量匹配是否存在,若存在則返回true,否則返回false。根據(jù)其含義,若執(zhí)行SELECTtoSQL(*,G,Where)得到的結(jié)果集不為空,則返回true;否則返回false。其中G 為所有RDF 圖的集合,Where為ASK 查詢(xún)模式中的圖模式集合。

    算法:ASKtoSQL

    輸入:SPARQL query Q={G,WHERE}

    輸出:BOOLEAN(true/false)

    01 if(exec((SELECTtoSQL(*,G,WHERE)))返回結(jié)果不為空)

    02 return true

    03 else

    04 return false

    3.3 SPARQL查詢(xún)到SQL查詢(xún)的實(shí)現(xiàn)方法

    綜上,給出SPARQLtoSQL 算法,該算法根據(jù)不同查詢(xún)模式,分別作出不同函數(shù)調(diào)用,實(shí)現(xiàn)任一SPARQL查詢(xún)到SQL查詢(xún)的轉(zhuǎn)換。

    算法:SPARQLtoSQL

    輸入:SPARQL query Q={Pattern,Ssel,G,Tree}

    輸出:結(jié)果關(guān)系表V 或者布爾值

    01 Switch(Pattern){

    02 Case SELECT:

    03 query=SELECTtoSQL(Ssel,G,Tree);輸出V=exec(query);

    04 Case CONSTRUCT:

    05 V =exec(CONSTRUCTtoSQL(Ssel,G,Tree));輸出V;

    06 Case(DESCRIBE):

    07 V=exec(DESCRIBEtoSQL(Ssel,G,Tree));輸出V;

    08 Case(ASK):

    09 b=exec(ASKtoSQL(G,Tree));輸出b;

    10 }

    4 實(shí)驗(yàn)及結(jié)果分析

    根據(jù)上述分析,實(shí)現(xiàn)了SPARQLtoSQL查詢(xún)轉(zhuǎn)換系統(tǒng),以Wine本體作為實(shí)驗(yàn)數(shù)據(jù)對(duì)系統(tǒng)進(jìn)行評(píng)測(cè),選擇12個(gè)具有代表性的SPARQL 查詢(xún)作為輸入(如表1所示),并對(duì)實(shí)驗(yàn)結(jié)果與其他兩種 現(xiàn) 有 的 轉(zhuǎn) 換 方 法 SparqlTOSql[4]和FlatSqlJoinMySQL[5]進(jìn)行了分析和比較。

    表1 查詢(xún)實(shí)例Table 1 Query examples

    圖1給出了三種不同查詢(xún)策略的查詢(xún)響應(yīng)時(shí)間。查詢(xún)響應(yīng)時(shí)間是指從輸入SPARQL查詢(xún),經(jīng)過(guò)查詢(xún)轉(zhuǎn)換,到查找出滿(mǎn)足匹配條件的RDF數(shù)據(jù)所用的時(shí)間。由于前兩種方法不支持Q9到Q12的查詢(xún)模式,所以不對(duì)這四個(gè)查詢(xún)實(shí)例的查詢(xún)響應(yīng)時(shí)間做對(duì)比。由圖可知本文提出的查詢(xún)轉(zhuǎn)換策略的查詢(xún)響應(yīng)時(shí)間最短。與FlatSqlJoinMySQL方法相比,由于該方法使用的方法是延續(xù)SparqlToSql方法中的多次轉(zhuǎn)換多次查詢(xún)的策略,所以與本文提出的多次轉(zhuǎn)換一次查詢(xún)的方法相比查詢(xún)響應(yīng)時(shí)間略長(zhǎng)。

    圖1 查詢(xún)響應(yīng)時(shí)間對(duì)比圖Fig.1 The query response time of different systems

    5 結(jié)束語(yǔ)

    本文提出了SPARQL查詢(xún)到SQL查詢(xún)的轉(zhuǎn)換方法,給出了圖模式、結(jié)果修飾符和不同查詢(xún)模式到SQL 的轉(zhuǎn)換規(guī)則,構(gòu)建了SPARQLtoSQL查詢(xún)轉(zhuǎn)換系統(tǒng)。以往轉(zhuǎn)換算法通常采用邊轉(zhuǎn)換邊執(zhí)行的方式,導(dǎo)致轉(zhuǎn)換耗時(shí)、效率低。本文采用一次轉(zhuǎn)換再執(zhí)行的方式,顯著提高了轉(zhuǎn)換效率。

    [1]RDF 1.1Concepts and Abstract Syntax[EB/OL].2014.http://www.w3.org/TR/rdf11-concepts/.

    [2]SPARQL 1.1Query Language[EB/OL].2013.http://www.w3.org/TR/sparql11-query/

    [3]Kiminki S,Knuuttila J,Hirvisalo V.SPARQL to SQL translation based on an intermediate query language[C]∥Proc of 6th International Workshop on Scalable Semantic Web Knowledge Base Systems,Shanghai,China,2010:32-47.

    [4]Chebotko A,Lu S,F(xiàn)otouhi F.Semantics preserving SPARQL-to-SQL translation[J].Data &Knowledge Engineering(DKE),2009,68(10):973-1000.

    [5]Elliott B,Cheng E,Thomas-Ogbuji C.A complete translation from SPARQL into efficient SQL[C]∥Proc of 2009International Database Engineering Applications Symposium,Cetraro(Calabria),Italy,2009:31-42.

    [6]Zhou C Y,Zheng Y W.Query rewriting from SPARQL to SQL for relational database integration[J].IEIT Journal of Adaptive &Dynamic Computing,2010,1(1):1-8.

    [7]吳濤.語(yǔ)義網(wǎng)本體查詢(xún)語(yǔ)言轉(zhuǎn)換技術(shù)的研究與實(shí)現(xiàn)[D].北京:北京工業(yè)大學(xué)計(jì)算機(jī)學(xué)院,2009.Wu Tao.Research and implementation of translation techniques of semantic Web ontology query language[D].Beijing:College of Computer Science,Beijing University of Technology,2009.

    [8]雷云飛,黃劉生,陳國(guó)良.RDF 查詢(xún)語(yǔ)言到SQL 語(yǔ)言的轉(zhuǎn)換原理及其實(shí)現(xiàn)方法[J].計(jì)算機(jī)研究與發(fā)展,2004,41(7):1251-1257.Lei Yun-fei,Huang Liu-sheng,Chen Guo-liang.Principle of converting RDF query language to SQL and its implementation[J].Journal of Computer Research and Development,2004,41(7):1251-1257.

    [9]王進(jìn)鵬,張亞非,苗壯.SPARQL 查詢(xún)的關(guān)系代數(shù)表示與轉(zhuǎn)換方法[J].計(jì)算機(jī)工程與應(yīng)用,2011,47(22):110-113.Wang Jin-peng,Zhang Ya-fei,Miao Zhuang.Algebra representation and transformation for SPARQL query[J].Computer Engineering and Application,2011,47(22):110-113.

    [10]Chen Y.Using SPARQL to query RDF data[J].Technological Development of Enterprise,2007,26(7):6-10.

    猜你喜歡
    子句元組三元組
    基于語(yǔ)義增強(qiáng)雙編碼器的方面情感三元組提取
    軟件工程(2024年12期)2024-12-28 00:00:00
    基于帶噪聲數(shù)據(jù)集的強(qiáng)魯棒性隱含三元組質(zhì)檢算法*
    命題邏輯中一類(lèi)擴(kuò)展子句消去方法
    Python核心語(yǔ)法
    命題邏輯可滿(mǎn)足性問(wèn)題求解器的新型預(yù)處理子句消去方法
    關(guān)于余撓三元組的periodic-模
    海量數(shù)據(jù)上有效的top-kSkyline查詢(xún)算法*
    西夏語(yǔ)的副詞子句
    西夏學(xué)(2018年2期)2018-05-15 11:24:42
    基于減少檢索的負(fù)表約束優(yōu)化算法
    命題邏輯的子句集中文字的分類(lèi)
    精品电影一区二区在线| 真人做人爱边吃奶动态| 制服诱惑二区| 亚洲人成77777在线视频| 嫁个100分男人电影在线观看| 两人在一起打扑克的视频| 精品国内亚洲2022精品成人 | 精品国内亚洲2022精品成人 | 人妻丰满熟妇av一区二区三区 | netflix在线观看网站| 国产精品久久电影中文字幕 | 性少妇av在线| 男女下面插进去视频免费观看| 国产成人精品在线电影| 午夜福利乱码中文字幕| 三上悠亚av全集在线观看| 又紧又爽又黄一区二区| 激情在线观看视频在线高清 | 大型av网站在线播放| 久久天躁狠狠躁夜夜2o2o| 最近最新免费中文字幕在线| 狠狠婷婷综合久久久久久88av| 99国产精品免费福利视频| 人妻 亚洲 视频| 欧美在线黄色| 国产精品影院久久| 国产在线一区二区三区精| 中文字幕制服av| 麻豆成人av在线观看| 精品福利观看| 国产高清videossex| 美女高潮到喷水免费观看| 一进一出好大好爽视频| a级片在线免费高清观看视频| 国产一区在线观看成人免费| 大片电影免费在线观看免费| 欧美大码av| 欧美日韩精品网址| 国产精品免费一区二区三区在线 | 亚洲精品国产色婷婷电影| 老司机在亚洲福利影院| 国产真人三级小视频在线观看| 他把我摸到了高潮在线观看| 国产主播在线观看一区二区| 搡老岳熟女国产| 岛国毛片在线播放| 亚洲成a人片在线一区二区| netflix在线观看网站| 国产在线一区二区三区精| 久久精品人人爽人人爽视色| 国产成人欧美在线观看 | 久久久久久久久久久久大奶| 在线播放国产精品三级| 婷婷成人精品国产| 亚洲精品美女久久久久99蜜臀| 一区二区三区精品91| 欧美大码av| 丰满饥渴人妻一区二区三| 久久中文看片网| 免费看十八禁软件| 50天的宝宝边吃奶边哭怎么回事| 999久久久国产精品视频| 日韩三级视频一区二区三区| 99久久国产精品久久久| 成人永久免费在线观看视频| 在线观看免费视频网站a站| 亚洲av熟女| 99久久综合精品五月天人人| 在线观看www视频免费| 丰满的人妻完整版| 男人操女人黄网站| 午夜91福利影院| av天堂在线播放| 成在线人永久免费视频| 久久精品国产99精品国产亚洲性色 | 亚洲熟妇熟女久久| x7x7x7水蜜桃| 国产成+人综合+亚洲专区| 国产亚洲精品第一综合不卡| 交换朋友夫妻互换小说| 精品第一国产精品| 国产99白浆流出| √禁漫天堂资源中文www| 老司机在亚洲福利影院| 午夜福利在线观看吧| 中文字幕最新亚洲高清| 五月开心婷婷网| 国产极品粉嫩免费观看在线| 无限看片的www在线观看| 免费少妇av软件| cao死你这个sao货| 黄片播放在线免费| 欧美另类亚洲清纯唯美| 亚洲成人免费电影在线观看| 老汉色av国产亚洲站长工具| 十分钟在线观看高清视频www| 一本大道久久a久久精品| 国产在线观看jvid| 国产精品 国内视频| 在线播放国产精品三级| 国产精品综合久久久久久久免费 | 久久精品国产a三级三级三级| 精品久久久久久久毛片微露脸| 亚洲免费av在线视频| 欧美人与性动交α欧美软件| 黄色女人牲交| 女警被强在线播放| 亚洲一区二区三区不卡视频| 波多野结衣av一区二区av| 亚洲国产精品一区二区三区在线| 精品第一国产精品| av天堂在线播放| 亚洲欧美一区二区三区黑人| 欧美久久黑人一区二区| 黑人巨大精品欧美一区二区蜜桃| 99国产精品一区二区蜜桃av | 岛国毛片在线播放| 欧美丝袜亚洲另类 | 亚洲成人手机| 天天影视国产精品| 两性夫妻黄色片| 国产99久久九九免费精品| 日韩制服丝袜自拍偷拍| 亚洲精华国产精华精| 丰满迷人的少妇在线观看| 欧美 日韩 精品 国产| 国产精品一区二区在线观看99| 国产亚洲欧美98| 美女国产高潮福利片在线看| 成人影院久久| 日韩制服丝袜自拍偷拍| 亚洲五月天丁香| 丰满迷人的少妇在线观看| 纯流量卡能插随身wifi吗| 亚洲av电影在线进入| 成人国语在线视频| 欧美成人午夜精品| 精品久久久久久久毛片微露脸| 大码成人一级视频| 国产亚洲一区二区精品| 男女之事视频高清在线观看| 高潮久久久久久久久久久不卡| 久久精品国产a三级三级三级| 亚洲七黄色美女视频| 制服人妻中文乱码| 极品少妇高潮喷水抽搐| 18禁裸乳无遮挡免费网站照片 | 精品久久蜜臀av无| 国产精品香港三级国产av潘金莲| 最新的欧美精品一区二区| 免费观看精品视频网站| 99久久人妻综合| 精品免费久久久久久久清纯 | 国产亚洲欧美在线一区二区| 欧美日韩亚洲国产一区二区在线观看 | 国产一区有黄有色的免费视频| 夜夜爽天天搞| 国产成人av激情在线播放| av线在线观看网站| 色精品久久人妻99蜜桃| 亚洲欧美一区二区三区久久| 欧美午夜高清在线| 国产精品秋霞免费鲁丝片| 女性被躁到高潮视频| 国产精品免费一区二区三区在线 | 男女床上黄色一级片免费看| 国产成人一区二区三区免费视频网站| 免费在线观看视频国产中文字幕亚洲| 亚洲精品美女久久av网站| 在线av久久热| 国产精品久久久久久精品古装| 色94色欧美一区二区| 99久久综合精品五月天人人| 午夜精品国产一区二区电影| 亚洲av日韩在线播放| 国产精品一区二区在线不卡| 亚洲少妇的诱惑av| 母亲3免费完整高清在线观看| 人人澡人人妻人| 99国产极品粉嫩在线观看| 天天操日日干夜夜撸| 制服人妻中文乱码| 欧美av亚洲av综合av国产av| 两个人看的免费小视频| 国产亚洲精品第一综合不卡| 男人操女人黄网站| 国产精品国产高清国产av | 日韩免费高清中文字幕av| 精品人妻在线不人妻| 久久精品亚洲熟妇少妇任你| 国产午夜精品久久久久久| 老司机午夜十八禁免费视频| 亚洲成人免费电影在线观看| 久久久久久久久免费视频了| 午夜福利视频在线观看免费| a在线观看视频网站| 欧美日韩国产mv在线观看视频| 日韩欧美一区二区三区在线观看 | 国产亚洲精品久久久久久毛片 | 精品福利观看| 俄罗斯特黄特色一大片| 黑人欧美特级aaaaaa片| videos熟女内射| 一级,二级,三级黄色视频| 一级毛片精品| 99热只有精品国产| 熟女少妇亚洲综合色aaa.| ponron亚洲| 大型av网站在线播放| av国产精品久久久久影院| 欧美av亚洲av综合av国产av| 18禁黄网站禁片午夜丰满| 成年人午夜在线观看视频| 亚洲精品粉嫩美女一区| av天堂久久9| 精品亚洲成a人片在线观看| 久久天躁狠狠躁夜夜2o2o| 成人精品一区二区免费| 亚洲成av片中文字幕在线观看| 国产单亲对白刺激| 国产精品综合久久久久久久免费 | 国产蜜桃级精品一区二区三区 | 国产高清激情床上av| 国产精品美女特级片免费视频播放器 | 欧美激情久久久久久爽电影 | 久久中文看片网| 国产亚洲欧美98| 在线观看www视频免费| 少妇裸体淫交视频免费看高清 | 9热在线视频观看99| 日本黄色日本黄色录像| 高清av免费在线| 久久久久久人人人人人| 国产黄色免费在线视频| 曰老女人黄片| 老司机影院毛片| 两个人看的免费小视频| 久久精品aⅴ一区二区三区四区| 日韩有码中文字幕| 黑人巨大精品欧美一区二区mp4| 99精国产麻豆久久婷婷| 啦啦啦在线免费观看视频4| 国产精品香港三级国产av潘金莲| 亚洲一区高清亚洲精品| 亚洲av成人不卡在线观看播放网| 麻豆国产av国片精品| 亚洲色图av天堂| 欧美日韩中文字幕国产精品一区二区三区 | 天堂√8在线中文| 熟女少妇亚洲综合色aaa.| 伊人久久大香线蕉亚洲五| 最新的欧美精品一区二区| 中文字幕精品免费在线观看视频| 最近最新中文字幕大全免费视频| 亚洲av片天天在线观看| 精品人妻熟女毛片av久久网站| 真人做人爱边吃奶动态| 亚洲精品美女久久久久99蜜臀| 看黄色毛片网站| 日韩欧美一区二区三区在线观看 | 一级a爱片免费观看的视频| 成人手机av| 色老头精品视频在线观看| 国产亚洲欧美在线一区二区| 脱女人内裤的视频| 欧美黑人精品巨大| 精品国产一区二区久久| 黄色 视频免费看| 啪啪无遮挡十八禁网站| 欧美 亚洲 国产 日韩一| 捣出白浆h1v1| 9色porny在线观看| 少妇被粗大的猛进出69影院| 首页视频小说图片口味搜索| 极品少妇高潮喷水抽搐| 很黄的视频免费| 国产无遮挡羞羞视频在线观看| 交换朋友夫妻互换小说| 欧美日韩瑟瑟在线播放| 精品国产乱码久久久久久男人| 99精品在免费线老司机午夜| 免费观看a级毛片全部| 九色亚洲精品在线播放| 俄罗斯特黄特色一大片| 亚洲午夜理论影院| 成人亚洲精品一区在线观看| 50天的宝宝边吃奶边哭怎么回事| 国产蜜桃级精品一区二区三区 | 亚洲男人天堂网一区| 校园春色视频在线观看| 国产在线观看jvid| 18禁裸乳无遮挡动漫免费视频| 免费在线观看影片大全网站| 99riav亚洲国产免费| 岛国在线观看网站| 最近最新中文字幕大全免费视频| 欧美乱码精品一区二区三区| 国产成人精品在线电影| 看黄色毛片网站| 亚洲av成人av| 91老司机精品| 亚洲男人天堂网一区| 国产精品 欧美亚洲| 免费少妇av软件| 99热网站在线观看| 国产男靠女视频免费网站| 国产欧美日韩一区二区精品| 婷婷成人精品国产| 欧美色视频一区免费| 黄网站色视频无遮挡免费观看| 欧美精品人与动牲交sv欧美| 欧美精品亚洲一区二区| cao死你这个sao货| 亚洲午夜精品一区,二区,三区| 久久人妻福利社区极品人妻图片| 香蕉久久夜色| 欧美日韩乱码在线| 久久精品亚洲精品国产色婷小说| 久久久久国内视频| av免费在线观看网站| 亚洲国产精品一区二区三区在线| 咕卡用的链子| 香蕉丝袜av| 王馨瑶露胸无遮挡在线观看| 91成年电影在线观看| xxxhd国产人妻xxx| 免费看a级黄色片| 69精品国产乱码久久久| 亚洲成人免费电影在线观看| 亚洲五月天丁香| 激情在线观看视频在线高清 | 妹子高潮喷水视频| 91国产中文字幕| 变态另类成人亚洲欧美熟女 | 国产亚洲精品久久久久5区| 亚洲av成人一区二区三| 精品国产一区二区三区久久久樱花| 一区二区三区国产精品乱码| 午夜福利免费观看在线| 看黄色毛片网站| 女人久久www免费人成看片| 午夜免费鲁丝| 亚洲av成人av| 啦啦啦视频在线资源免费观看| 老汉色av国产亚洲站长工具| 国精品久久久久久国模美| 深夜精品福利| 夜夜躁狠狠躁天天躁| 美女高潮喷水抽搐中文字幕| 国产精品一区二区免费欧美| 少妇被粗大的猛进出69影院| 性少妇av在线| 麻豆乱淫一区二区| 国产欧美亚洲国产| 99热国产这里只有精品6| 成人精品一区二区免费| 国产不卡av网站在线观看| 丰满人妻熟妇乱又伦精品不卡| 亚洲精品久久成人aⅴ小说| 精品午夜福利视频在线观看一区| 国产真人三级小视频在线观看| 老司机午夜福利在线观看视频| 免费看a级黄色片| 中文字幕最新亚洲高清| 1024香蕉在线观看| 黄片播放在线免费| 啦啦啦 在线观看视频| 日日夜夜操网爽| 亚洲精品粉嫩美女一区| 色综合婷婷激情| 成人亚洲精品一区在线观看| 午夜福利影视在线免费观看| 黄频高清免费视频| 国产乱人伦免费视频| 亚洲av欧美aⅴ国产| 水蜜桃什么品种好| 嫁个100分男人电影在线观看| 亚洲熟女毛片儿| 高清毛片免费观看视频网站 | 好男人电影高清在线观看| 黄色片一级片一级黄色片| 三上悠亚av全集在线观看| 一进一出抽搐动态| videos熟女内射| 国产单亲对白刺激| 欧美黑人精品巨大| 两个人看的免费小视频| 91精品三级在线观看| 精品一区二区三区av网在线观看| 亚洲精品国产精品久久久不卡| 日日摸夜夜添夜夜添小说| 欧美日韩中文字幕国产精品一区二区三区 | 日本a在线网址| 国产精品乱码一区二三区的特点 | 91av网站免费观看| 岛国在线观看网站| 免费看十八禁软件| 亚洲精品中文字幕在线视频| 一级毛片精品| 久久久国产精品麻豆| 亚洲av片天天在线观看| 性色av乱码一区二区三区2| 757午夜福利合集在线观看| 亚洲黑人精品在线| 黑人巨大精品欧美一区二区mp4| 亚洲五月婷婷丁香| 精品电影一区二区在线| 水蜜桃什么品种好| 久久九九热精品免费| 妹子高潮喷水视频| 国产成人av教育| 乱人伦中国视频| 精品国产一区二区久久| 在线观看一区二区三区激情| 国产精品欧美亚洲77777| 亚洲视频免费观看视频| 精品国内亚洲2022精品成人 | 黄色怎么调成土黄色| 久久香蕉国产精品| 香蕉久久夜色| 老鸭窝网址在线观看| 久久香蕉精品热| 亚洲熟女精品中文字幕| 美女福利国产在线| 极品教师在线免费播放| 欧美激情久久久久久爽电影 | 狠狠狠狠99中文字幕| 美女国产高潮福利片在线看| 一区二区三区精品91| 12—13女人毛片做爰片一| 国产极品粉嫩免费观看在线| 午夜福利视频在线观看免费| 欧美国产精品一级二级三级| 欧美激情 高清一区二区三区| 搡老乐熟女国产| 亚洲av成人av| 国产亚洲精品一区二区www | 成人av一区二区三区在线看| 免费在线观看亚洲国产| 精品国产一区二区三区四区第35| 伦理电影免费视频| 欧美激情极品国产一区二区三区| 中文字幕精品免费在线观看视频| 中文欧美无线码| 午夜91福利影院| 狠狠狠狠99中文字幕| 侵犯人妻中文字幕一二三四区| 桃红色精品国产亚洲av| 自线自在国产av| 国产精品亚洲av一区麻豆| 亚洲片人在线观看| 亚洲精品久久午夜乱码| 黑丝袜美女国产一区| 超碰成人久久| 桃红色精品国产亚洲av| 日韩欧美国产一区二区入口| 久久久久国产一级毛片高清牌| 日韩欧美一区二区三区在线观看 | 国产精品国产av在线观看| 黑人欧美特级aaaaaa片| 老司机影院毛片| 国产亚洲精品一区二区www | 又黄又粗又硬又大视频| 岛国毛片在线播放| 超碰成人久久| 男人的好看免费观看在线视频 | 在线观看免费视频网站a站| 亚洲国产中文字幕在线视频| 一二三四社区在线视频社区8| 99国产精品99久久久久| 亚洲一码二码三码区别大吗| 超碰97精品在线观看| 极品人妻少妇av视频| 久久狼人影院| 免费观看精品视频网站| 狠狠婷婷综合久久久久久88av| 午夜91福利影院| 美女高潮到喷水免费观看| 亚洲国产欧美网| 久久久精品国产亚洲av高清涩受| 国产成人系列免费观看| xxx96com| 国产精品免费一区二区三区在线 | videos熟女内射| 国产精品欧美亚洲77777| 国产一区二区三区综合在线观看| 亚洲自偷自拍图片 自拍| 国产成人影院久久av| 亚洲 国产 在线| 老司机福利观看| av视频免费观看在线观看| 伦理电影免费视频| 久久精品国产清高在天天线| 欧美国产精品一级二级三级| 国产一区二区激情短视频| 欧美性长视频在线观看| 国产精华一区二区三区| 久久精品国产a三级三级三级| 国产男女内射视频| 精品人妻熟女毛片av久久网站| 看黄色毛片网站| 国产成人精品在线电影| 亚洲欧美一区二区三区久久| 日韩人妻精品一区2区三区| 每晚都被弄得嗷嗷叫到高潮| 两人在一起打扑克的视频| 久久精品国产亚洲av香蕉五月 | 18禁美女被吸乳视频| 一区二区三区激情视频| 最新在线观看一区二区三区| 18禁国产床啪视频网站| 亚洲中文日韩欧美视频| 高清黄色对白视频在线免费看| 成人特级黄色片久久久久久久| 老司机午夜十八禁免费视频| 他把我摸到了高潮在线观看| 亚洲午夜理论影院| 又大又爽又粗| 免费看a级黄色片| 欧美精品av麻豆av| 90打野战视频偷拍视频| 亚洲色图av天堂| 免费在线观看黄色视频的| 国产真人三级小视频在线观看| 人人妻人人添人人爽欧美一区卜| 51午夜福利影视在线观看| 久久久久久免费高清国产稀缺| 国产区一区二久久| 亚洲视频免费观看视频| 天天躁日日躁夜夜躁夜夜| 一边摸一边抽搐一进一小说 | 法律面前人人平等表现在哪些方面| 亚洲精品美女久久久久99蜜臀| 午夜福利影视在线免费观看| 国产色视频综合| 国产一区有黄有色的免费视频| 久久久久久久久免费视频了| 一夜夜www| 激情视频va一区二区三区| 国产精品亚洲av一区麻豆| 亚洲男人天堂网一区| 欧美人与性动交α欧美软件| 成人黄色视频免费在线看| 搡老岳熟女国产| 脱女人内裤的视频| 交换朋友夫妻互换小说| ponron亚洲| www.精华液| 成人亚洲精品一区在线观看| 精品少妇一区二区三区视频日本电影| 久久这里只有精品19| 午夜福利一区二区在线看| 9191精品国产免费久久| 亚洲五月婷婷丁香| 国产在线观看jvid| 日日夜夜操网爽| 电影成人av| 亚洲伊人色综图| 国产日韩一区二区三区精品不卡| 免费女性裸体啪啪无遮挡网站| 不卡一级毛片| 精品午夜福利视频在线观看一区| 国产午夜精品久久久久久| 老熟妇乱子伦视频在线观看| 美女 人体艺术 gogo| 午夜福利一区二区在线看| 亚洲欧美一区二区三区久久| 中文欧美无线码| 国产xxxxx性猛交| 免费一级毛片在线播放高清视频 | 国产伦人伦偷精品视频| 亚洲精品国产区一区二| 国产激情久久老熟女| 午夜福利在线免费观看网站| 建设人人有责人人尽责人人享有的| 久久精品国产99精品国产亚洲性色 | 99久久99久久久精品蜜桃| 超色免费av| 免费黄频网站在线观看国产| xxxhd国产人妻xxx| 母亲3免费完整高清在线观看| 亚洲伊人色综图| 国产在线精品亚洲第一网站| 精品免费久久久久久久清纯 | 大片电影免费在线观看免费| 国产免费现黄频在线看| 黄网站色视频无遮挡免费观看| 久久久久国产一级毛片高清牌| 国产精品九九99| 黑人巨大精品欧美一区二区mp4| 首页视频小说图片口味搜索| 国产欧美亚洲国产| 侵犯人妻中文字幕一二三四区| 国产精品亚洲av一区麻豆| 国产欧美亚洲国产| 一级黄色大片毛片| 久久久久视频综合| av有码第一页| 亚洲三区欧美一区| 91麻豆av在线| 亚洲av电影在线进入| 超碰97精品在线观看| 国产成人啪精品午夜网站| 黑丝袜美女国产一区| 久久婷婷成人综合色麻豆| 熟女少妇亚洲综合色aaa.| 天天添夜夜摸| 亚洲国产欧美日韩在线播放| 高清在线国产一区| 免费女性裸体啪啪无遮挡网站| 999久久久国产精品视频| 最新美女视频免费是黄的| 高清黄色对白视频在线免费看| 国产精品影院久久| 怎么达到女性高潮|