【发布时间】:2012-03-08 21:22:59
【问题描述】:
我是 opendata 的新手,需要一些帮助。维基百科在这个 url 中有他们的 sparql 端点: http://dbpedia.org/sparql 现在我需要编写 webservice 来从 dbpedia 获取一些 rdf 文件。我应该向这个端点发送什么来获取 rdf 文件?
【问题讨论】:
标签: rdf sparql endpoint opendata
我是 opendata 的新手,需要一些帮助。维基百科在这个 url 中有他们的 sparql 端点: http://dbpedia.org/sparql 现在我需要编写 webservice 来从 dbpedia 获取一些 rdf 文件。我应该向这个端点发送什么来获取 rdf 文件?
【问题讨论】:
标签: rdf sparql endpoint opendata
发送CONSTRUCT 查询。一个小例子:
CONSTRUCT { ?s ?p ?o }
WHERE { ?s ?p ?o }
LIMIT 10
WHERE 子句的工作方式与 SELECT 类似,只是值填充了 CONSTRUCT 块作为一种模板。它非常灵活 - 您可以像这里一样复制语句,也可以将它们转换成完全不同的形状。
【讨论】:
丹尼回答的是正确的通用答案。但是我不建议你对外部服务执行这样的查询,因为预计得到结果的时间;在具体资源上执行此操作
当然,如果您想直接执行此操作而无需手动保存查询结果,例如使用 Python,代码将如下所示:
from SPARQLWrapper import SPARQLWrapper, XML
uri = "http://dbpedia.org/resource/Asturias"
query = "CONSTRUCT { <%s> ?p ?o } WHERE { <%s> ?p ?o }" % (uri, uri)
sparql = SPARQLWrapper("http://dbpedia.org/sparql")
sparql.setQuery(query)
sparql.setReturnFormat(XML)
results = sparql.query().convert()
file = open("output.rdf", "w")
results.serialize(destination=file, format="xml")
file.flush()
file.close()
当然,这几乎可以用任何编程语言来完成,只要你喜欢。
【讨论】:
DESCRIBE <http://dbpedia.org/resource/Asturias>。
我想推荐你阅读 Bob DuCharme 的 "Learning SPARQL" 书。它还涵盖了一些使用 DBPedia 端点的示例。
PS:这不是 Wikipedia 的 SPARQL 端点 - 它是 DBPedia SPARQL 端点(Wikipedia 本身不提供自己的 SPARQL 端点 ATM)。但是,DBPedia 数据依赖于 Wikipedia 数据;)
【讨论】: