2014-01-08 55 views
0

我是新來的語義網,我想弄清楚如何編寫SPARQL查詢從dbpedia中提取有關特定主題的所有信息。不僅僅是禮貌,還包括與之相關的一切。Sparql關於dbpedia:World_Wide_Web

我甚至不知道如何啓動這樣的查詢。我想獲得萬維網的所有三元組。

PREFIX dbpedia: <http://dbpedia.org/resource/> 

SELECT DISTINCT ?s ?p ?o 
WHERE { 
    ?s ?p ?o . 
    ?s ?p dbpedia:World_Wide_Web 

    # FILTER(lang(?s) = "en") -- doesn't work with filter 

}Limit 100 

這隻返回一些三元與貓頭鷹:sameAs的謂語

你能幫助我嗎?

+0

據你所說的 「一切與之相關的」 的意思不是真的清楚。 RDF約爲三倍。對事物的唯一描述是它的主體或客體的三元組。你的查詢只是要求所有包含'dbpedia:World_Wide_Web'的主題作爲對象。 –

+0

你的過濾器工作得很好。然而,只有文字有語言,文字不能成爲RDF中三元組的主語,所以你不會得到任何結果。 –

+0

我想了解用於網絡的編程語言以及爲WWW開發WWW和事件的人的東西......類似的東西 –

回答

1

你可以通過這樣的查詢獲得所有具有dbpedia:World_Wide_Web作爲主題或對象的三元組(這當然只能給出1000)。對於文字的任何對象,我們可以限制他們的語言值:

select ?s ?p ?o where { 
    values ?web { dbpedia:World_Wide_Web } 
    { ?web ?p ?o bind(?web as ?s) } union 
    { ?s ?p ?web bind(?web as ?o) } 

    # for literal objects, take only English ones 
    filter(!isLiteral(?o) || langMatches(lang(?o),'en')) 
} 
limit 1000 

SPARQL results

這包括像下面這樣,這似乎與你在評論中提到什麼一致的結果:

http://dbpedia.org/resource/World_Wide_Web http://dbpedia.org/property/company http://dbpedia.org/resource/CERN 
http://dbpedia.org/resource/World_Wide_Web http://dbpedia.org/property/inventor http://dbpedia.org/resource/Tim_Berners-Lee 

這將產生一個lot的結果,所以你可能想限制你可以使用的屬性。你應該能夠做到以下,但在當前的DBpedia端點,它會導致一個錯誤。

select ?s ?p ?o where { 
    values ?web { dbpedia:World_Wide_Web } 
    values ?p { rdf:type dbpedia-owl:abstract } 

    { ?web ?p ?o bind(?web as ?s) } union 
    { ?s ?p ?web bind(?web as ?o) } 
} 
limit 1000 
Virtuoso 37000 Error SP031: SPARQL compiler: Internal error: sparp_gp_attach_filter_cbk(): attempt to attach a filter with used variable 

SPARQL query: 
define sql:big-data-const 0 
#output-format:text/html 
define sql:signal-void-variables 1 define input:default-graph-uri <http://dbpedia.org> select ?s ?p ?o where { 
    values ?web { dbpedia:World_Wide_Web } 
    values ?p { rdf:type dbpedia-owl:abstract } 

    { ?web ?p ?o bind(?web as ?s) } union 
    { ?s ?p ?web bind(?web as ?o) } 
} 
limit 1000 

相反,作爲一種解決方法,你可以這樣做:

select ?s ?p ?o where { 
    values ?web { dbpedia:World_Wide_Web } 

    { ?web ?p ?o bind(?web as ?s) } 
    union 
    { ?s ?p ?web bind(?web as ?o) } 

    filter(?p in (rdf:type, dbpedia-owl:abstract)) ### 
} 
limit 1000 

SPARQL results

+0

Woow!非常感謝Joshua!我從來沒有想過這樣。我還可以插入我想允許的謂詞列表嗎?這是否像值?p {rdf:type,dc:terms/alternative} bind {你做了什麼}? –

+0

真棒!我怎麼能限制一個查詢只有幾個(我的類型列表)的屬性? –

+0

太棒了!非常感謝!如果你曾經在羅馬尼亞,我會給你一杯啤酒!你已經幫了我很多。我會試着看看爲什麼這不起作用,我會發布答案,如果我發現。再次感謝! –