gpt4 book ai didi

python - Rdflib,Python : Are there any object framing methods to get nested dict/list structure from a graph a-la JSON-LD?

转载 作者:太空宇宙 更新时间:2023-11-03 11:27:58 24 4
gpt4 key购买 nike

Rdflib CONSTRUCT 查询返回表示图的元组列表。然而,模板语言通常最方便的是嵌套混合字典和列表的树状结构(因为该结构与 HTML 标记的树状结构非常匹配)。实际上,SELECT 在这方面并没有更好,而是相同数据的非规范化版本。

很容易想出一些特别的转换,但也许有一些惯用的方法给定图形和一些“枢轴”的提示,从而产生一棵树?

例如,如果我们有一个图,包含 Query 和 ResultVar 个体(具有数据属性,如标签等),那么树可以是带有 ResultVar 子项的 Query 列表:

[
{'name': 'q1', 'uri': '...', 'children':
[{'name': 'x', 'value': '1', ... },
{'name': 'y', 'value': '1', ... },
...
]},
...
]

为此我们可能会提示使用 Query - ResultVar 命令的方法。结果很容易与嵌套的“循环”一起使用,在模板中生成 HTML 标记。

我不喜欢重新发明轮子,我想这种问题不是唯一的,但我还没有找到任何解决方案。

但是,我不想要 ORM 方法,因为它意味着在代码中有模式,我不想硬连接它。

编辑:为了澄清可能的误解,Query/ResultVar 只是一个例子。我可以改用博客/评论或日历/事件。

编辑2好像这里要找的是object framing , 在 JSON-LD 中使用:

Framing is the process of taking a JSON-LD document, which expresses a graph of information, and applying a specific graph layout (called a Frame).

JSON-LD Framing allows developers to query by example and force a specific tree layout to a JSON-LD document.

所以,这里需要的是一些在 rdflib、Python 中进行框架 的方法。 This document ("JSON-LD: Cycle Breaking and Object Framing") 对我的问题所寻求的内容给出了一个流行的解释,但是 Python 是否有类似的解释?

最佳答案

您所要求的可以通过 SPARQLWrapper2 类实现。可悲的是 docs因为至少可以说理解起来有点“复杂”。但是在 overall docs 中有一个很好的例子:

from SPARQL import SPARQLWrapper2
queryString = "SELECT ?subj ?o ?opt WHERE { ?subj <http://a.b.c> ?o. OPTIONAL { ?subj <http://d.e.f> ?opt }}"
sparql = SPARQLWrapper2("http://localhost:2020/sparql")
# add a default graph, though that can also be in the query string
sparql.addDefaultGraph("http://www.example.com/data.rdf")
sparql.setQuery(queryString)
try :
ret = sparql.query()
print ret.variables # this is an array consisting of "subj", "o", "opt"
if (u"subj",u"prop",u"opt") in ret :
# there is at least one binding covering the optional "opt", too
bindings = ret[u"subj",u"o",u"opt"]
# bindings is an array of dictionaries with the full bindings
for b in bindings :
subj = b[u"subj"].value
o = b[u"o"].value
opt = b[u"opt"].value
# do something nice with subj, o, and opt
# another way of accessing to values for a single variable:
# take all the bindings of the "subj"
subjbind = ret.getValues(u"subj") # an array of Value instances
...
except:
deal_with_the_exception()

根据您的情况,您可以使用 children = ret.getValues(u'q1')

关于python - Rdflib,Python : Are there any object framing methods to get nested dict/list structure from a graph a-la JSON-LD?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30137663/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com