首页 文章

从 endpoints 检索数据

提问于
浏览
1

大家,

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

我尝试过一些事情,例如从SPARQL查询下载整个数据,但连接断开,如果没有中断,数据格式不正确(这是正常的,它是结果,而不是原始数据) . 我在Python中尝试过感谢RDFlib,并感谢Linux工具CUrl

我在网上浏览以找到一些有趣的东西,我发现:如果放入数据,我需要手动下载数据(比如带有转储的DBpedia) . 我还发现了一些有效但无法检索整个数据的软件(它们只检索资源,比如http://dbpedia.org/resource/) .

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

EDIT :

举个例子,我可以说这个命令行有效: curl -L -H "Accept:text/turtle" http://dbpedia.org/resource/Paris 有效(至少在Linux发行版上)! What I want 就是这样,但对于整个DBpedia数据 . (在我的实例中,'s not dbpedia obviously, I don'想要下载20GB的数据!)

克莱门特

2 回答

  • 0

    我是SPARQL的新手,但 in theory 您可以使用此查询从 endpoints 获取所有三元组:

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

    我在DBpedia https://dbpedia.org/sparql中尝试了这个并且它可以工作,虽然您应该使用LIMIT将结果保持在合理的大小(即使您不使用LIMIT,DBpedia endpoints 也有内部限制以防止服务器过载) . 在实践中可能有数百万的三元组,所以可能只想使用这种查询来更好地理解数据 .

  • 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()
    

    没有设置限制,并且 it'll fail 在那里 . 实际上,DBpedia的 endpoints 设置为120秒的执行超时 . 但是如果你发现一个超时适合你或没有超时的 endpoints ,这段代码就可以了 . 如果在SPARQL查询结束时设置限制,它也可以工作,如 query = "CONSTRUCT { ?s ?p ?o } WHERE { ?s ?p ?o } LIMIT 100"

相关问题