代码之家  ›  专栏  ›  技术社区  ›  Clement B

从端点检索数据

  •  1
  • Clement B  · 技术社区  · 6 年前

    每个人

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

    我尝试过从SPARQL查询下载整个数据,但连接断开了,如果没有断开,数据的格式就不好(这很正常,是结果,而不是原始数据)。我试过用Python感谢RDFlib,也感谢Linux工具CUrl

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

    如果可以的话,我很乐意听你这么说。实际上,如果端点是最新的,则转储不一定是最新的。

    编辑:

    例如,我可以说这个命令行是有效的: curl -L -H "Accept:text/turtle" http://dbpedia.org/resource/Paris 工作(至少在Linux发行版上)! 我想要什么 是这样的,但对于整个DBpedia数据来说。(在我的真实示例中,显然不是dbpedia,我不想下载20GB的数据!)

    克莱门特

    2 回复  |  直到 6 年前
        1
  •  0
  •   Ubercoder    6 年前

    我对SPARQL真的很陌生,但是 理论上 您可以使用以下查询从端点获取所有三元组:

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

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

        2
  •  0
  •   Clement B    6 年前

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