它通常更容易理解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> |
------------------------------------------------------------------
,我看主要是,很多人在這裏做的問題不要試圖首先學習或理解至少一些SPARQL基礎知識。從你身邊做出很多努力和出色的工作,但我不認爲下一個查詢可以由他們自己編寫。 – AKSW
@Joshua:謝謝你的詳細解釋。它確實幫了很多忙。我的目標是顯示域值和返回類型。我修改了您的查詢並獲得了期望的結果。事實上,我保持你的查詢相同,並增加了兩個變量「dValues」和「rType」。它工作正常,但我只是不明白,我必須使用不同的變量爲上述兩個變量:這是一個代碼片段: '{?class2 DOL:domainName?dValues}' 它的工作原理我使用「class2」,但不適用於「class」。它看起來像「類」已經定義,這有衝突嗎? – Viki