2015-04-29 62 views
2

我需要爲目標集中的每個資源檢索單個圖像,並使用優先級順序測試多個非獨佔謂詞。可選的備用SPARQL模式的替代方案?

我使用沿着

select ?r ?i where { 

    ?r a dbo:Automobile . 

    optional { ?r <http://dbpedia.org/ontology/thumbnail> ?i } 
    optional { ?r <http://xmlns.com/foaf/0.1/depiction> ?i } 
    optional { ?r <http://xmlns.com/foaf/0.1/logo> ?i } 
    optional { ?r <http://schema.org/image> ?i } 

} 

行一個標準的可選備用模式,但這種做法是談到了將一些後臺麻煩currently:是任何人都知道任何簡單的/有效的替代方案嗎?

+2

你見過[SPARQL(1.1)]的優先模式(http://answers.semanticweb.com/questions/20682/preference-patterns-for-sparql-11)嗎?這裏發佈的大多數答案似乎都適用於那些較舊的方法。 –

+0

唉,是的。我正在尋找一種解決方案,它是i)合理輕量級的,並且ii)可以跨不同的後端進行移植,而無需調整。不幸的是,當「?a dbo:Automobile」被複雜的實際模式所取代時,可選後備模式(無論是否使用合併)的兩種變體傾向於引發一系列特定於後端的查詢執行錯誤。我希望在SO上有新的東西;-) –

+0

那麼,你已經證明它的例子與已經得到解答的問題非常相似。如果您的實際問題存在差異,那麼它們很重要,我想您將不得不在這裏包含它們以獲得不同的答案。 –

回答

0

我認爲你只需要過濾你的謂詞。像這樣的東西可能會有所幫助:

prefix schema:<http://schema.org/> 
prefix foaf:<http://xmlns.com/foaf/0.1/> 
prefix dbpedia-owl:<http://dbpedia.org/ontology/> 
select distinct ?r ?i 
where { 
?r a dbpedia-owl:Automobile . 
?r ?p ?i. 
values ?p { foaf:logo foaf:depiction dbpedia-owl:thumbnail schema:image} 
} 
+0

我只需要檢索第一個匹配圖像的對象謂詞。編輯問題以澄清查詢要求。不管怎麼說,還是要謝謝你。 –

+0

你能提一下麻煩嗎?你的問題聽起來像你需要更換,但現在我不確定。所以你只需要thubmail?那麼剩下的可選要點是什麼? – Artemis

+0

我明白 - A'B想要一個縮略圖,如果存在的話,否則描述如果存在,否則...等等。因此,每次使用?i。這可能是棘手的,因爲有一個要遵守的命令(縮略圖>描述> ...)。嗯。 – user205512

0

這裏從原來的Artemis打高爾夫球,問題是謂詞的順序。因此,而不是簡單的值,我們可以使用下面的:

values (?p ?pref) { 
    (dbpedia-owl:thumbnail 1) 
    (foaf:depiction 2) 
    (foaf:logo 3) 
    (schema:image 4) 
} 

現在我們可以通過命令選擇:

prefix schema:<http://schema.org/> 
prefix foaf:<http://xmlns.com/foaf/0.1/> 
prefix dbpedia-owl:<http://dbpedia.org/ontology/> 
select distinct ?r ?i 
where { 
    ?r a dbpedia-owl:Automobile . 
    ?r ?p ?i. 
    values (?p ?pref) { 
     (dbpedia-owl:thumbnail 1) 
     (foaf:depiction 2) 
     (foaf:logo 3) 
     (schema:image 4) 
    } 
} 
order by ?r ?pref 

這給了我們幾乎需要什麼。我們所需要的就是用?r進行分組,並選擇最大的?pref。

不幸的是,這在SPARQL中並不簡單。

+0

這並不困難,但你確實需要在子查詢中進行圖像選擇。你已經幾乎徹底改變了[來自這裏]的答案(http://answers.semanticweb.com/questions/20682/preference-patterns-for-sparql-11/20696)。 –

3

什麼是可選項的問題?重複使用?i

另一種方法是獲取每個備選方案並挑選第一個方案。

select ?r ?i where { 

    ?r a dbo:Automobile . 
    optional { ?r <http://dbpedia.org/ontology/thumbnail> ?i1 } 
    optional { ?r <http://xmlns.com/foaf/0.1/depiction> ?i2 } 
    optional { ?r <http://xmlns.com/foaf/0.1/logo> ?i3 } 
    optional { ?r <http://schema.org/image> ?i4 } 
    BIND(COALESCE(?i1,?i2,?i3,?i4) AS ?i) 
} 
+0

此外,您的答案[this answers.semanticweb.com問題](http://answers.semanticweb。com/questions/20682/preference-patterns-for-sparql-11)地址提供了更多選項。 –

+0

@AndyS在上面看到我的評論 –