每个人,
一个简单的问题:是否可以检索端点的整个数据集(作为Turtle或XML)?
我尝试了一些事情,例如从SPARQL查询中下载整个数据但连接断开,如果没有中断,数据格式不正确(这是正常的,结果而不是原始数据)数据)。我在Python中尝试过感谢RDFlib,还要感谢Linux工具CUrl
我浏览网页找到一些有趣的东西,我发现:如果放入数据,我需要手动下载数据(比如带有转储的DBpedia)。我还发现了一些有效但无法检索整个数据的软件(它们只检索资源,如http://dbpedia.org/resource/ 某些)。
如果可以,我会很高兴听到那个。实际上,如果端点是最新的,则转储不一定。
编辑:
举个例子,我可以说这个命令行有效:
curl -L -H "Accept:text/turtle" http://dbpedia.org/resource/Paris
有效(至少在Linux发行版上)! 我想要的是,但对于整个DBpedia数据。 (在我的实例中,它显然不是dbpedia,我不想下载20GB的数据!)
克莱门特
答案 0 :(得分:0)
我是SPARQL的新手,但理论上你可以使用此查询从端点获取所有三元组:
SELECT * WHERE { ?s ?p ?o . }
LIMIT 100
我在DBpedia https://dbpedia.org/sparql中尝试了这个并且它有效,尽管您应该使用LIMIT将结果保持在合理的大小(即使您不使用LIMIT,DBpedia也有内部限制)端点以防止服务器过载)。在实践中可能有数百万的三元组,所以可能只想使用这种查询来更好地理解数据。
答案 1 :(得分:0)
我发现了如何做,在Python中:
from SPARQLWrapper import SPARQLWrapper,TURTLE
query = "CONSTRUCT { ?s ?p ?o } WHERE { ?s ?p ?o }"
sparql = SPARQLWrapper("http://dbpedia.org/sparql")
sparql.setQuery(query)
sparql.setTimeout(0)
sparql.setReturnFormat(TURTLE)
results = sparql.query().convert()
#print(results)
file = open("output.ttl", "wb")
file.write(results)
file.flush()
file.close()
未设置限制且它将失败。实际上,DBpedia的端点设置为120秒的执行超时。但是如果你发现一个超时适合你或没有超时的端点,这段代码就可以了。如果您在SPARQL查询结束时设置了限制,例如query = "CONSTRUCT { ?s ?p ?o } WHERE { ?s ?p ?o } LIMIT 100"