2014-08-28 57 views
3

有沒有一個快速和容易查找只是維基百科光澤文本在DBpedia爲DBpedia JSON API的特定URI?使用JSON API查找DBpedia的光澤

例如我可以通過下載http://dbpedia.org/data/Cat.json獲得DBpedia對貓的所有三元組,但我想要的是與{"type" : "literal" ...}三元組。我可以在不下載和解析整個JSON輸出的情況下得到這個結果嗎? JSON API似乎不支持任何類型的過濾,並且我找不到任何文檔。

回答

5

聽起來你正在尋找的是所有形式的三元組[dbpedia:Cat?p?o]其中?o是一個文字。您可以通過針對public DBpedia endpoint的SPARQL CONSTRUCT查詢獲得這些查詢,並以RDF/JSON請求結果。

construct where { 
    dbpedia:Cat ?p ?o 
    filter isLiteral(?o) 
} 

SPARQL results

構建查詢是SPARQL標準的一部分,並在16.2 CONSTRUCT中描述。 如果您使用的sparql-client for Python(有關於這個問題沒有語言標籤了,所以沒有理由認爲一般讀者會),注意its documentation說:

sparql-client是SPARQL查詢庫執行SELECTASK通過HTTP針對SPARQL端點進行查詢。

由於此特定客戶端不支持CONSTRUCT查詢,您需要改爲使用SELECT查詢。您可以使用:

select ?p ?o { 
    dbpedia:Cat ?p ?o 
    filter isLiteral(?o) 
} 

SPARQL results

產生的JSON是不太一樣的形式,但它仍然是相當有規律,你就可以處理它沒有太多的麻煩:

{ "head": { "link": [], "vars": ["p", "o"] }, 
    "results": { "distinct": false, "ordered": true, "bindings": [ 
    { "p": { "type": "uri", "value": "http://dbpedia.org/ontology/abstract" } , "o": { "type": "literal", "xml:lang": "nl", "value": "De kat of huiskat (Felis catus) is een van de oudste huisdieren van de mens. De gedomesticeerde kat behoort tot de familie der katachtigen (Felidae). De oude soortnaam was Felis domesticus, tegenwoordig is deze vervangen door Felis catus. Eind 2009 waren in Nederland ongeveer 3,6 miljoen katten aanwezig." }}, 
    … 
    { "p": { "type": "uri", "value": "http://dbpedia.org/ontology/conservationStatus" } , "o": { "type": "literal", "xml:lang": "en", "value": "DOM" }}, 
    { "p": { "type": "uri", "value": "http://dbpedia.org/ontology/synonym" } , "o": { "type": "literal", "xml:lang": "en", "value": "Felis catus domestica (invalid junior synonym)" }}, 
    { "p": { "type": "uri", "value": "http://dbpedia.org/ontology/synonym" } , "o": { "type": "literal", "xml:lang": "en", "value": "Felis silvestris catus (subjective synonym)" }}, 
    { "p": { "type": "uri", "value": "http://dbpedia.org/ontology/wikiPageID" } , "o": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#integer", "value": "6678" }}, 
    { "p": { "type": "uri", "value": "http://dbpedia.org/ontology/wikiPageRevisionID" } , "o": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#integer", "value": "547667240" }}, 
    { "p": { "type": "uri", "value": "http://www.w3.org/2000/01/rdf-schema#label" } , "o": { "type": "literal", "xml:lang": "zh", "value": "\u732B" }}, 
    { "p": { "type": "uri", "value": "http://www.w3.org/2000/01/rdf-schema#label" } , "o": { "type": "literal", "xml:lang": "de", "value": "Hauskatze" }}, 
    … 
+0

奇怪的是,當我嘗試從Python [sparql客戶端](https://pypi.python.org/pypi/sparql-client/)執行查詢時,出現「sparql.SparqlException」。 「構造」命令是非標準的Sparql嗎? – Cerin 2014-08-31 00:12:55

+0

@Cerin CONSTRUCT是標準的,但你的客戶不支持整個標準。我已經更新了我的答案。如果您需要特定語言的解決方案,您應該考慮在問題中添加[tag:python]標記。 – 2014-08-31 02:23:45