7

在 python 中使用 sparql\sparqlwrapper,我将如何查询某个 dbpedia 资源的值?例如,我将如何获得http://dbpedia.org/page/Asturias的 dbpedia-owl:wikiPageExternalLink 值?这是一个关于如何查询阿斯图里亚斯的 rdfs:label 的简单示例。但我不知道如何修改查询/查询参数以获取属性/本体的值,而不是 rdfs 模式中包含的值。这是示例:

from SPARQLWrapper import SPARQLWrapper, JSON, XML, N3, RDF
sparql = SPARQLWrapper("http://dbpedia.org/sparql")
sparql.setQuery("""
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    SELECT ?label
    WHERE { <http://dbpedia.org/resource/Asturias> rdfs:label ?label }
""")
print '\n\n*** JSON Example'
sparql.setReturnFormat(JSON)
results = sparql.query().convert()
for result in results["results"]["bindings"]:
    print result["label"]["value"]

希望收到反馈。提前致谢!

4

1 回答 1

7

不知道你在哪里卡住了——这真的很容易:

SELECT ?label
WHERE { <http://dbpedia.org/resource/Asturias>
            dbpedia-owl:wikiPageExternalLink ?label }

通常你需要声明命名空间前缀,rdfs:或者dbpedia-owl:如果你想在查询中使用它们,但在 DBpedia 端点上,即使没有它也可以工作。如果你愿意,你可以声明它们:

PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
SELECT ?label
WHERE { <http://dbpedia.org/resource/Asturias>
            dbpedia-owl:wikiPageExternalLink ?label }

您可以通过访问http://dbpedia.org/sparql并单击右上角附近的“命名空间前缀”来找到与前缀对应的完整 URI 。

如果要重命名变量(例如, from ?labelto ?link),请执行以下操作:

PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
SELECT ?link
WHERE { <http://dbpedia.org/resource/Asturias>
            dbpedia-owl:wikiPageExternalLink ?link }

并且您还必须更改"label""link"JSON 结果中获取值的 Python 代码。

于 2012-05-22T00:10:25.577 回答