2013-03-03 166 views
9

似乎我不讚賞SPARQL DESCRIBE查詢。我需要檢索符合條件的資源的完整圖形。在一個SPARQL端點我已經試過(挪威RådataNA,http://data.bibsys.no/data/query_authority.html)這工作得很好:SPARQL DESCRIBE查詢

PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX owl: <http://www.w3.org/2002/07/owl#> 

DESCRIBE ?person WHERE { 
    ?person rdf:type foaf:Person . 
    FILTER EXISTS { ?person owl:sameAs ?sameAs } 
} 
LIMIT 100 

我得到的是有一隻貓頭鷹人資源的結果:sameAs的三倍。

在其他SPARQL端點,Onki光(http://sparql.onki.fi/sparql.tpl)和DBpedia中(http://dbpedia.org/sparql)類似的查詢

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX skos: <http://www.w3.org/2004/02/skos/core#> 

DESCRIBE ?x WHERE { 
    ?x rdf:type skos:Concept . 
    FILTER EXISTS { ?x skos:prefLabel ?prefLabel } 
} 
LIMIT 100 

返回大量具有既不RDF資源:種類= SKOS:概念,也沒有一個SKOS:prefLabel,所以我顯然沒有正確地進行查詢。應該如何陳述這種查詢來產生我需要的結果?

回答

10

沒有skos:prefLabelskos:Concept的「收到資源」可能是與滿足您的要求的資源。

SPARQL DESCRIBE查詢實際上並不返回與查詢的圖形模式相匹配的資源,而是一個「描述」這些資源的RDF圖形。由sparql服務決定選擇哪些三元組來描述資源。 (見下面的標準)

W3C Proposed Recommendation on SPARQL 1.1的說:

的DESCRIBE形式,返回含有約資源RDF數據的單個結果RDF圖。 [...] 描述由查詢服務確定。

所以,資源,你意外地收到也許描述你真正想要的資源。調查您的問題:檢查您應該實際收到的與您想要的資源的關係的三元組。一個好方法是從LIMIT 1開始查看DESCRIBE查詢的效果。

也許SELECT查詢是你所需要的?它只返回圖形模式匹配的資源。

+0

謝謝!我嘗試了DESCRIBE ,並獲得了期望的資源和一堆相關資源,就像你寫的一樣。因爲我不知道數據的實際結構,所以SELECT或CONSTRUCT在手邊的情況下不是可行的選項。但是,知道「額外」資源是什麼,當我處理結果時,我可以忽略它們。 – 2013-03-04 10:09:31

1

選擇或構建還沒有在手的情況下可行的選擇,因爲我不知道數據

的實際結構爲什麼這麼說?我認爲你要麼想只有資源:

select ?x WHERE { 
    ?x rdf:type skos:Concept . 
    FILTER EXISTS { ?x skos:prefLabel ?prefLabel } 
} 
LIMIT 100 

或全部傳出三元:

select ?x ?p ?y WHERE { 
    ?x rdf:type skos:Concept. 
    FILTER EXISTS { ?x skos:prefLabel ?prefLabel } 
    ?x ?p ?y 
} 
LIMIT 100 
+0

謝謝!我嘗試過類似的東西,但是卻破壞了SPARQL的語法。下一個問題是從SPARQL XML結果構建實際圖形的最佳方法。 – 2015-01-08 20:37:20

1

正如@Thomas指出,DESCRIBE由標準尚未得以確認的一點,因此你會得到不一致的結果。但是,使用CONSTRUCT,您可以返回許多引擎返回的內容,即DESCRIBE,即SPO加上OPS,並在服務中一致地執行此操作。這裏的查詢,這是否:

CONSTRUCT { 
    ?person ?p ?o . 
    ?s ?p1 ?person . 
} 
WHERE { 
    ?person rdf:type foaf:Person . 
    FILTER EXISTS { ?person owl:sameAs ?sameAs } . 
    ?person ?p ?o . 
    ?s ?p1 ?person . 
} 

這可以讓你的RDF圖「描述」的資源勢必?person,即?person所有屬性,所有的屬性,它的值(對象)是人嗎?

+0

有趣!我在dbpedia上試了這個(RådataNåSPARQL端點目前不工作): PREFIX rdf: PREFIX skos: CONSTRUCT {0}概念?p?o。 ?s?p1?的概念。 } 其中概念rdf:類型skos:概念。 FILTER EXISTS {?concept skos:prefLabel?prefLabel}。 ?概念?p?o。 ?s?p1?的概念。 } LIMIT 100 結果不一。有些數據正是我想要的,有些則不符合條件。 – 2016-05-02 09:02:36

+0

嘗試增加LIMIT。 SPARQL不會以任何特定順序獲取數據,因此您還可以嘗試使用ORDER BY的LIMIT/OFFSET組合。 – scotthenninger 2016-05-02 13:07:14