2014-09-26 39 views
0

我使用從PHP以下SPARQL查詢,其中$title是5個查詢相同的三元組:在DBpedia中的SPARQL查詢合併相同科目

SELECT * WHERE { 
    { <http://dbpedia.org/resource/$title> rdfs:label ?pageTitle . } 
    UNION 
    { <http://dbpedia.org/resource/$title> owl:sameAs ?sameAs . } 
    UNION 
    { <http://dbpedia.org/resource/$title> dbpedia-owl:abstract ?abstract . } 
    UNION 
    { <http://dbpedia.org/resource/$title> dbpedia-owl:thumbnail ?thumbnail . } 
    UNION 
    { <http://dbpedia.org/resource/$title> dbpedia-owl:wikiPageID ?wikiID . } 
} 

有沒有讓$title只可在規定的方式來簡化這個一次在查詢中?我想在某個地方可能會涉及匿名節點?也許? :-)

+0

提到是否有一個原因,你想在這裏工會,特別是?看起來你的結果似乎是一個包含五列(每個變量一列)的表格,但是在每一行中,其中的一列將具有一個值。你願意有兩列的解決方案:一個表示屬性,一個表示值? – 2014-09-26 13:56:41

+0

@JoshuaTaylor你說的對,在http://dbpedia.org/sparql的HTML輸出中(使用web瀏覽器),你得到你所描述的內容,但是JSON輸出給了我更少的無用功能:o)是否有一種獲得輸出的方式,不需要做這些聯合的事情(例如,jimkont的答案 - 我正要試試) – 2014-09-26 17:04:50

回答

3
SELECT * WHERE { 
<http://dbpedia.org/resource/$title> ?p ?o . 
FILTER (?p IN (rdfs:label, owl:sameAs, dbpedia-owl:abstract, dbpedia-owl:thumbnail, dbpedia-owl:wikiPageID)) 

相反的FILTER (?x IN())你也可以用VALUES (?x) {<...>, <...> }作爲另一個答覆

+0

我接受了這個答案,因爲它消除了那些醜陋的'UNION's – 2014-09-26 17:08:46

+0

謝謝!我做了一個小修改,使其更簡單 – jimkont 2014-09-27 17:20:37

1

嘗試重寫查詢,如下所示:

SELECT * WHERE { 
    { ?id rdfs:label ?pageTitle . } 
    UNION 
    { ?id owl:sameAs ?sameAs . } 
    UNION 
    { ?id dbpedia-owl:abstract ?abstract . } 
    UNION 
    { ?id dbpedia-owl:thumbnail ?thumbnail . } 
    UNION 
    { ?id dbpedia-owl:wikiPageID ?wikiID . } 
} values (?id) { (<http://dbpedia.org/resource/$title>) } 

這是一個非常好的SPARQL 1.1功能。