如this question所示,它有一個類似的標題,我想通過了解其名稱的一部分來檢索dbpedia資源。我是SPARQL等的初學者,但作爲搜索「羅馬尼亞」的作者,這個問題中的例子幫了我很大的忙,而接聽Sparql的人請他來完成這項工作。這很好,但這是事情。通過SPARQL的字符串名稱檢索DBpedia資源,但不知道其類型
在這個例子中,他們已經「知道」,羅馬尼亞是一個國家,因此
?c a dbpedia-owl:Country ;
在WHERE子句中
。完整的SPARQL請求是
SELECT ?c
WHERE {
?c a dbpedia-owl:Country ;
foaf:name "Romania"@en .
FILTER NOT EXISTS {?c dbpedia-owl:dissolutionYear ?y}
}
但是,這個問題並不十分完整地回答我們的需求,因此尋找其名,「名」是一個資源的實際名稱,或部分的任何資源它,不管它(rdf:)類型。目標是搜索「任何東西」,只知道名稱或其中的一部分。
在問你們這個問題之前,我一直在做一些研究,而且我已經知道「名稱的一部分」問題可以用bif函數解決(壞方法,因爲它不符合sparql),或者CONTAINS子句,但我找不到任何示例顯示如何使用它。
現在讓我們假設在dbpedia資源中有一個「單詞」要搜索,那麼這個單詞將會是某個用戶的輸入。我們稱之爲「INPUT」。
請求,我會想象,看起來像:
SELECT ?something WHERE
{
?something a (dbpedia Resource).
CONTAINS(?something,"INPUT")
}
我的主要問題是關於兩個主要方面:
- 有什麼事情描述類型DBpedia中的資源?我不認爲這是在本體或任何東西。通過knwoing,我想搜索所有資源中找到一個匹配...
- 我會提供一個特定的名稱,或一些字符串。我考慮過FILTER選項,但這意味着獲取所有的資源,然後在他們被回收之後用他們的名字過濾它們,這可能不是那麼理想。
那麼,有沒有人知道這個「主查詢」通過提供其名稱或其中的一部分來獲取資源? (一個例子是提供「奧巴馬」,並且不僅爲Barrack取得成果,而且爲Michelle取得成果)。
預先感謝您。
實際上我們必須經歷一個「詭計」(dcterms:subject),但嘿,我的請求只適用於dbpedia資源。所以你的答案是絕對驚人的,並節省了我頭痛的負擔。非常感謝。至於bif函數,我知道它們不符合SPARQL,這就是爲什麼我尋找CONTAINS的原因,儘管我想我仍然在尋找他們使用這個子句的例子。所以再次感謝您的回答,我的dbpedia&rdf的旅程剛剛開始,但您剛剛給我一個我需要的開始。 – 2011-12-27 16:46:11
這種方法有一些痛苦的限制。它不允許空格。因此,如果您試圖獲取「Barak Obama」的規範實體表示(或者以編程方式獲取您遇到的任何名稱字符串,這是我的情況),則不能使用bif:contains。 然後我想,也許URL編碼的字符串? '?標籤bif:包含「barak%20obama」.' 沒有骰子那裏。也許兩個單獨的聲明來捕獲組成部分?不。 :( '炫技37000錯誤SP031:SPARQL編譯:超過一個BIF:包括()或單一group'類似的斷言對於 '$標籤' 變量 任何想法 – sands 2013-03-15 20:32:15
@sands你可以做標籤BIF?:包含''barak obama''(注意多餘的引號) – MrM 2015-02-12 14:49:56