2013-05-28 32 views
1

我想SPARQL查詢融入Prolog程序(我使用SWI-Prolog的)爲什麼這個SPARQL查詢不能用於Prolog?

爲了測試它,我做以下操作:

  1. 進入SWI-Prolog的殼我執行此命令:use_module(庫(semweb/sparql_client))。時裝載SPARQL客戶端庫

  2. 然後,在SWI-Prolog的殼,我執行以下SPARQL查詢:

    - sparql_query(「SELECT COUNT(*),其中{人一個http://dbpedia.org/ontology/Person?。? person'http://it.dbpedia.org/property/nome?name.filter regex(?name,「Leonardo」)。}',Row,[host('dbpedia.org'),path('/ sparql /')])。 Row = row(literal(type('http://www.w3.org/2001/XMLSchema#integer','0')))。

我不知道還有SPARQL,但我認爲這是非常簡單,這樣的工作:

該查詢詢問那些在RDF認爲是個人的名字對象的實例數本體稱爲dbpedia,通過輸入參數「Leonardo」。

正如你所看到的問題似乎沒有發現這種類型的任何實例(我也試圖與其他個人姓名)

爲什麼?我錯過了什麼?

回答

5

您的查詢不會返回您希望它返回的內容。您可以使用DBpedia SPARQL endpoint以交互方式使用SPARQL。我建議你使用它來調試你的查詢,並確保它返回你想要的,然後將它複製到你的Prolog程序中。你可以把它建立起來,以確保它給出合適的結果。例如,開始像下面這樣:

select * where { 
    ?person a <http://dbpedia.org/ontology/Person> . 
} 
LIMIT 10 

SPARQL results

然後展開它一塊一塊:

select * where { 
    ?person a <http://dbpedia.org/ontology/Person> . 
    ?person <http://it.dbpedia.org/property/nome> ?name . 
} 
LIMIT 10 

SPARQL results

此查詢不返回任何東西,所以最好在繼續進行FILTER或COUNT之前進行調試。

在與終端玩了一段時間後,似乎使用REGEX會像其他字符串操作一樣昂貴。如果你可以直接查詢你想要的字符串,你可能會更好。不幸的是,你也需要開始使用語言標籤。例如,下面是一個用給定名稱或姓氏"Leonardo"計數人的查詢。

select COUNT(?person) where { 
    ?person a dbpedia-owl:Person . 
    { ?person foaf:givenName "Leonardo" } 
    UNION 
    { ?person foaf:surname "Leonardo" } 
} 

SPARQL results

它返回0。然而,如果我們增加(英文)語言標記這些字符串,我們得到不同的結果(133):

select COUNT(?person) where { 
    ?person a dbpedia-owl:Person . 
    { ?person foaf:givenName "Leonardo"@en } 
    UNION 
    { ?person foaf:surname "Leonardo"@en } 
} 

SPARQL results

+0

OK,TNX這麼多,但我仍然有問題,運行這個新查詢到SWI- Prolog外殼 – AndreaNobili

+0

是否有錯誤?數字與你期望的不同嗎? ...沒有更多的細節,很難給出任何更多的建議... –

+0

啊沒有okok ...我剛剛進入sparql_query swi prolog謂詞,並很好地工作 – AndreaNobili

相關問題