RDFLIB,Python:是否有任何对象框架方法可以从图A-LA JSON-LD中获取嵌套dict/列表结构



rdflib构造查询返回代表图的元组列表。但是,模板语言通常最方便,具有嵌套混合柱子和列表的树状结构(因为该结构与HTML标记的树状结构非常匹配)。实际上,选择在这方面不是更好的,而是相同数据的不符合版本。

提出一些临时转换非常容易,但是给定图形和一些提示"枢纽"的提示也许有一些惯用方式,它会产生一棵树?

例如,如果我们有一个图形,其中包含查询和结果Var个体(具有数据属性,如标签等),则该树可以是带有Result Var儿童的查询列表:

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

为此,我们可能会暗示使用查询的方法 - 结果Var顺序。结果易于与嵌套的"循环"一起使用,它在模板中生成HTML标记。

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

但是,我不想要ORM方法,因为这意味着在代码中使用架构,而且我不想硬化。

edit :为了澄清可能的误解,查询/resultvar只是一个示例。我可以使用博客/评论或日历/事件。

edit2 似乎在这里寻求的是对象框架,如JSON-LD中所用:

框架是获取JSON-LD文档的过程,该文档表示信息图,并应用特定的图形布局(称为帧)。

JSON-LD框架允许开发人员以示例查询并将特定的树布局强制为JSON-LD文档。

那么,这里想要的是 framing 在python中的某种方法。该文档(" JSON-LD:周期破裂和对象框架")对我的问题所寻求的内容进行了流行的解释,但是Python有类似的东西?

可以用SPARQLWrapper2类实现所需的内容。可悲的是,至少可以理解,文档有点"复杂"。但是总体文档中有一个很好的例子:

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')

"对象框架",它允许通过JSON-LD中的RDF模型中的文档转换为树型,更适合某些应用程序场景,由PYLD库提供:

https://github.com/digitalbazaar/pyld

结果图可以与JSON-LD序列化,给定所谓的 context (JSON-LD终端),然后给定A frame (另外一个JSON--LD术语,在草稿中涵盖):

jsonld.frame(doc, frame)

将产生一个"构造"数据结构,实际上是一个具有固定布局的树,可以通过应用程序使用。

对于更具体的情况,例如树状的GUI生成场景,菲涅尔词汇被认为是" RDF方式"。但是,如何显示Fresnel词汇描述的RDF数据?建议,LDP(链接数据平台)是更高级的方法。

最新更新