从端点检索数据

Retrieve data from an endpoint

各位,

一个简单的问题:是否可以检索端点的整个数据集(作为 Turtle,或 XML)?

我尝试过一些操作,例如从 SPARQL 查询下载全部数据,但连接断开,如果没有断开,则数据格式不正确(这是正常的,它是结果而不是原始数据)。我尝试了 Python 感谢 RDFlib,也感谢 Linux 工具 CUrl

我浏览了 web 以找到一些有趣的东西,我发现:如果放置了数据,我需要手动下载数据(比如在带有转储的 DBpedia 上)。我还发现了一些可用的软件,但它们无法检索全部数据(它们仅检索资源,例如 http://dbpedia.org/resource/something)。

如果可以的话,我会很高兴听到那个。实际上,如果端点是最新的,则转储不一定是最新的。

编辑:

举个例子,我可以说这个命令行是有效的: curl -L -H "Accept:text/turtle" http://dbpedia.org/resource/Paris 有效(至少在 Linux distrib 上有效)! 我想要的是,但对于整个 DBpedia 数据。 (在我的真实案例中,它显然不是 dbpedia,我不想下载 20GB 的数据!)

克莱门特

我是 SPARQL 的新手,但理论上您可以使用此查询从端点获取所有三元组:

SELECT * WHERE { ?s ?p ?o . } 
LIMIT 100

我在 DBpedia https://dbpedia.org/sparql 中尝试过这个方法并且它有效,尽管你应该使用 LIMIT 将结果保持在合理的大小(即使你不使用 LIMIT,DBpedia 上有一个内部限制端点以防止服务器过载)。实际上可能有数百万个三元组,所以可能只想使用这种查询来更好地理解数据。

我在 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"