2016-06-21 143 views
1

我想形成SPARQL查詢,它將從下面的RDF中爲給定的Java類提供域名和方法名稱。例如SPARQL選擇查詢條件?

選擇DomainNames,MethodName其中JavaClass ='MyJavaClass'。 這只是一個僞查詢。我需要幫助在SPARQL中形成類似的查詢。謝謝。

<rdf:RDF 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns:DOL="http://www.MyOnt.com/something/v1#" 
    xmlns:DC="http://purl.org/dc/dcmitype/" 
    xmlns:foaf="http://xmlns.com/foaf/0.1/"> 
    <rdf:Description rdf:about="http://www.MyOnt.com/something/data/MyJavaClass"> 
    <DOL:belongsTo> 
     <rdf:Description rdf:about="http://www.MyOnt.com/something/data/MyDomain"> 
     <DOL:domainName>MyDomainValue2</DOL:domainName> 
     <DOL:domainName>MyDomainValue</DOL:domainName> 
     </rdf:Description> 
    </DOL:belongsTo> 
    <DOL:hasMethod> 
     <rdf:Description rdf:about="http://www.MyOnt.com/something/data/MyMethod"> 
     <DOL:returnType>MethodReturnType</DOL:returnType> 
     </rdf:Description> 
    </DOL:hasMethod> 
    <foaf:name>MyJavaClass</foaf:name> 
    </rdf:Description> 
</rdf:RDF> 

回答

2

它通常更容易理解SPARQL查詢應該是什麼樣子,如果你第一次把數據轉換成龜,它有非常相似的SPARQL語法。這是你的數據是什麼烏龜:

@prefix DOL: <http://www.MyOnt.com/something/v1#> . 
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 
@prefix foaf: <http://xmlns.com/foaf/0.1/> . 
@prefix DC: <http://purl.org/dc/dcmitype/> . 

<http://www.MyOnt.com/something/data/MyDomain> 
     DOL:domainName "MyDomainValue2" , "MyDomainValue" . 

<http://www.MyOnt.com/something/data/MyJavaClass> 
     DOL:belongsTo <http://www.MyOnt.com/something/data/MyDomain> ; 
     DOL:hasMethod <http://www.MyOnt.com/something/data/MyMethod> ; 
     foaf:name  "MyJavaClass" . 

<http://www.MyOnt.com/something/data/MyMethod> 
     DOL:returnType "MethodReturnType" . 

一旦你做到了這一點,查詢看起來幾乎完全一樣的數據,除了與它的變量。這裏唯一的問題是,既然你正在尋找域和方法,你需要使用聯合(假設你想將域和方法綁定爲不同的變量)。

prefix DOL: <http://www.MyOnt.com/something/v1#> 
prefix foaf: <http://xmlns.com/foaf/0.1/> 

select ?domain ?method { 
    ?class foaf:name "MyJavaClass" . 
    { ?class DOL:belongsTo ?domain } 
    union 
    { ?class DOL:hasMethod ?method } 
} 
--------------------------------------------------------------------------------------------------- 
| domain           | method           | 
=================================================================================================== 
| <http://www.MyOnt.com/something/data/MyDomain> |            | 
|            | <http://www.MyOnt.com/something/data/MyMethod> | 
--------------------------------------------------------------------------------------------------- 

如果你願意有綁定到同一個可變域和方法,你可以使用一個交替屬性路徑選擇要麼域或方法:

prefix DOL: <http://www.MyOnt.com/something/v1#> 
prefix foaf: <http://xmlns.com/foaf/0.1/> 

select ?domainOrMethod { 
    ?class foaf:name "MyJavaClass" ; 
     DOL:belongsTo|DOL:hasMethod ?domainOrMethod 
} 
-------------------------------------------------- 
| domainOrMethod         | 
================================================== 
| <http://www.MyOnt.com/something/data/MyDomain> | 
| <http://www.MyOnt.com/something/data/MyMethod> | 
-------------------------------------------------- 

作爲另一種替代方法,您可以使用塊來指定要遵循的屬性(hasMethod屬於關聯),在這種情況下,你可以爲了選擇最好知道你有哪種類型的值:

prefix DOL: <http://www.MyOnt.com/something/v1#> 
prefix foaf: <http://xmlns.com/foaf/0.1/> 

select ?property ?value { 
    values ?property { DOL:belongsTo DOL:hasMethod } 
    ?class foaf:name "MyJavaClass" ; 
     ?property ?value 
} 
------------------------------------------------------------------ 
| property  | value           | 
================================================================== 
| DOL:belongsTo | <http://www.MyOnt.com/something/data/MyDomain> | 
| DOL:hasMethod | <http://www.MyOnt.com/something/data/MyMethod> | 
------------------------------------------------------------------ 
+1

,我看主要是,很多人在這裏做的問題不要試圖首先學習或理解至少一些SPARQL基礎知識。從你身邊做出很多努力和出色的工作,但我不認爲下一個查詢可以由他們自己編寫。 – AKSW

+0

@Joshua:謝謝你的詳細解釋。它確實幫了很多忙。我的目標是顯示域值和返回類型。我修改了您的查詢並獲得了期望的結果。事實上,我保持你的查詢相同,並增加了兩個變量「dValues」和「rType」。它工作正常,但我只是不明白,我必須使用不同的變量爲上述兩個變量:這是一個代碼片段: '{?class2 DOL:domainName?dValues}' 它的工作原理我使用「class2」,但不適用於「class」。它看起來像「類」已經定義,這有衝突嗎? – Viki