2011-12-26 57 views
9

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") 
    } 

我的主要問題是關於兩個主要方面:

  1. 有什麼事情描述類型DBpedia中的資源?我不認爲這是在本體或任何東西。通過knwoing,我想搜索所有資源中找到一個匹配...
  2. 我會提供一個特定的名稱,或一些字符串。我考慮過FILTER選項,但這意味着獲取所有的資源,然後在他們被回收之後用他們的名字過濾它們,這可能不是那麼理想。

那麼,有沒有人知道這個「主查詢」通過提供其名稱或其中的一部分來獲取資源? (一個例子是提供「奧巴馬」,並且不僅爲Barrack取得成果,而且爲Michelle取得成果)。

預先感謝您。

回答

15

我假設在你的第一個問題中,你有興趣查看實例資源。我不知道在一般情況下是否可以明確提出實例資源,因爲在RDF中,所有東西都是資源。如果您特別需要DBpedia數據集,可以查詢具有dcterms的資源:subject作爲屬性(在DBPedia中,只有實例資源具有dcterms:subject)。所以,你可以有這樣的查詢:

SELECT DISTINCT ?s ?label WHERE { 
      ?s rdfs:label ?label . 
      FILTER (lang(?label) = 'en'). 
      ?label bif:contains "Obama" . 
      ?s dcterms:subject ?sub 
} 

同樣,對於你的第二個問題 - 如果你只是使用DBpedia的數據集,你可能需要使用「BIF:包含」雖然不是SparQL兼容。我不認爲有這樣做的另一個最佳方法,正如你所說,使用FILTER將是次優的,特別是如果你需要快速執行查詢。我認爲關鍵字搜索和索引是由每個三重商店臨時處理的,目前還沒有一種標準化的方法可供全文搜索者使用。因此,總而言之,如果您只使用dbpedia,只需使用存儲的功能和數據集的具體信息來解決您的問題。

+0

實際上我們必須經歷一個「詭計」(dcterms:subject),但嘿,我的請求只適用於dbpedia資源。所以你的答案是絕對驚人的,並節省了我頭痛的負擔。非常感謝。至於bif函數,我知道它們不符合SPARQL,這就是爲什麼我尋找CONTAINS的原因,儘管我想我仍然在尋找他們使用這個子句的例子。所以再次感謝您的回答,我的dbpedia&rdf的旅程剛剛開始,但您剛剛給我一個我需要的開始。 – 2011-12-27 16:46:11

+0

這種方法有一些痛苦的限制。它不允許空格。因此,如果您試圖獲取「Barak Obama」的規範實體表示(或者以編程方式獲取您遇到的任何名稱字符串,這是我的情況),則不能使用bif:contains。 然後我想,也許URL編碼的字符串? '?標籤bif:包含「barak%20obama」.' 沒有骰子那裏。也許兩個單獨的聲明來捕獲組成部分?不。 :( '炫技37000錯誤SP031:SPARQL編譯:超過一個BIF:包括()或單一group'類似的斷言對於 '$標籤' 變量 任何想法 – sands 2013-03-15 20:32:15

+3

@sands你可以做標籤BIF?:包含''barak obama''(注意多餘的引號) – MrM 2015-02-12 14:49:56

相關問題