【问题标题】:How to iterate over CONSTRUCT output from rdflib?如何迭代 rdflib 的 CONSTRUCT 输出?
【发布时间】:2015-12-22 23:02:14
【问题描述】:

这是How to prevent triples from getting mixed up while uploading to Dydra programmatically?的后续问题

我使用 SPARQL CONSTRUCT 查询创建了一个新图表。我现在想对其进行迭代,以便可以将语句添加到 RDFlib 图,然后将数据插入另一个三元存储。我有以下问题:

  1. 如果 SPARQL CONSTRUCT 返回一个图表,我是否还需要遍历这些语句并将它们添加到 RDFlib 图表中?我可能需要这样做才能使用循环将每个三元组插入三元组。
  2. 如何遍历由 SPARQL CONSTRUCT 生成的图以检索三元组? 'type''output' 显示为字符串。

这是我的代码:

sesameSparqlEndpoint = 'http://my.ip.ad.here:8080/openrdf-sesame/repositories/rep_name'
sparql = SPARQLWrapper(sesameSparqlEndpoint)
queryStringDownload = 'CONSTRUCT {?s ?p ?o} WHERE {?s ?p ?o FILTER REGEX(str(?s), "http")}'
dataGraph = Graph()

sparql.setQuery(queryStringDownload)
sparql.method = 'GET'
sparql.setReturnFormat(JSON)
output = sparql.query().convert()
# print output

#Print all statements in dataGraph      
for stmt in output:
    print stmt

这段代码只给了我来自三元组的一列字符。

【问题讨论】:

  • 不知道 RDFLib 我不知道这是否是原因,但是:您是否尝试过设置不同的返回格式?我希望像 Turtle 这样的东西能得到更好的支持。
  • 适用于 XML(但不适用于 N3 或 Turtle 等其他格式)!我现在可以使用 for 循环单独检索每个三元组。还有,我们一开始需要专门用这个:from SPARQLWrapper import SPARQLWrapper, JSON, XML, TURTLE, RDF, N3(基本上我们打算用的所有格式)

标签: python sparql sesame rdflib linked-data


【解决方案1】:
  1. 我仍然必须将由于运行 CONSTRUCT 查询而创建的连接图中的语句添加到 RDFlib 图中。为什么?因为在进行 INSERT 时解析前者存在问题。 CONSTRUCT 查询的输出:a) 没有包含在 中的 URI,b) 不处理非 ASCII 字符(因此需要 output.encode('utf-8'))。
  2. 要从 CONSTRUCT 查询生成的图表中检索三元组,我们需要在上面的代码中使用 XML 格式而不是 JSON 格式进行输出。

有趣的是:使用 XML 时的类型(输出)是 Conjunctive Graph。对于我尝试过的所有其他内容,它是一个字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    • 2014-03-20
    • 2016-11-18
    • 2016-08-16
    • 1970-01-01
    • 2012-03-15
    • 2011-04-29
    相关资源
    最近更新 更多