十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

PyLD数据整形双雄:flatten与frame,从扁平节点图到定制树结构

PyLD数据整形双雄:flatten与frame,从扁平节点图到定制树结构 PyLD数据整形双雄flatten与frame从扁平节点图到定制树结构【免费下载链接】pyldJSON-LD processor written in Python项目地址: https://gitcode.com/gh_mirrors/py/pyldPyLD 是 Python 生态中最知名的 JSON-LD 处理器完整实现了 W3C 的 JSON-LD Processor API 规范。在它的核心操作中flatten扁平化与 frame框架化堪称数据整形双雄前者把层层嵌套的 JSON-LD 文档摊平成一张以id为锚点的扁平节点图后者则反过来按你定义的 frame 模板把节点图重组为想要的定制树结构。无论你是做知识图谱、语义网应用还是只想优雅地整理关联数据这两个方法都能帮你快速完成数据整形让复杂 JSON-LD 从此变得可控。为什么需要数据整形从嵌套 JSON 到关联数据图JSON-LDJSON for Linking Data允许你用熟悉的 JSON 语法表达关联数据但代价是同一个概念可以写成嵌套对象、数组、引用等多种形态数据长什么样完全取决于作者习惯。一份文档里name可能是字符串也可能是带value的对象两个节点之间的引用可能被内嵌也可能只留一个id指针同一份数据在不同 API 里需要的字段名和层级完全不同。这就需要一个统一的中间形态以及一个能把数据捏成任意形状的工具。PyLD 的flatten和frame正是为此而生它们分别对应 JSON-LD 处理管线中的展开归一与按需成型两个阶段。PyLD flatten 用法如何把嵌套 JSON-LD 摊平成节点图jsonld.flatten()的作用非常直观把输入的 JSON-LD 文档先扩展expand成完整 IRI 形式再按id归并所有节点输出一个顶层节点列表——每个节点只出现一次所有引用都变成id指针嵌套结构被彻底打散。最简单的扁平化调用官方示例docs/examples/flatten.py演示了最基础的用法import json from pyld import jsonld doc { http://schema.org/name: Manu Sporny, http://schema.org/url: {id: http://manu.sporny.org/}, http://schema.org/image: {id: http://manu.sporny.org/images/manu.png}, } flattened jsonld.flatten(doc) print(json.dumps(flattened, indent2))运行后嵌套结构变成了一组平铺的节点每个属性值都被规范为数组形式[ { id: _:b0, http://schema.org/name: [{value: Manu Sporny}], http://schema.org/url: [{id: http://manu.sporny.org/}], http://schema.org/image: [{id: http://manu.sporny.org/images/manu.png}] } ]注意两点一是没有id的节点会被分配空白节点标识如_:b0二是输出天然是节点图非常适合后续做 RDF 转换、图数据库导入或数据对比。可选的上下文参数flatten的第二个参数ctx可以传入一个 JSON-LD 上下文让扁平化后的输出直接使用短词如name而非完整 IRI一步到位得到扁平且紧凑的结果。完整签名见lib/pyld/jsonld.py中的flatten(input_, ctx, options)。PyLD frame 用法如何按模板把节点图重组为定制树如果说 flatten 是把数据打散frame就是把它复原成你想要的形状。jsonld.frame()接受两个输入原始 JSON-LD 文档 一个 frame 模板。输出严格按照模板的字段顺序、层级和条件进行重组多余字段会被过滤。用 frame 模板定制输出结构官方示例docs/examples/frame.py展示了一对典型组合from pyld import jsonld doc { id: http://example.com/people/manu, type: http://schema.org/Person, http://schema.org/name: Manu Sporny, http://schema.org/url: {id: http://manu.sporny.org/}, http://schema.org/image: {id: http://manu.sporny.org/images/manu.png}, } frame { context: { name: http://schema.org/name, homepage: {id: http://schema.org/url, type: id}, image: {id: http://schema.org/image, type: id}, }, type: http://schema.org/Person, }framed jsonld.frame(doc, frame)输出不再是扁平的 IRI 堆叠而是符合模板的清晰树结构 json { context: { name: http://schema.org/name, homepage: {id: http://schema.org/url, type: id}, image: {id: http://schema.org/image, type: id} }, id: http://example.com/people/manu, type: http://schema.org/Person, image: http://manu.sporny.org/images/manu.png, name: Manu Sporny, homepage: http://manu.sporny.org/ }字段顺序、命名name/homepage/image都完全由模板决定API 消费者拿到手就能直接用无需再写大量字段映射代码。frame 的高级控制开关frame 的可调选项定义在lib/pyld/options.py的FrameOptions中掌握这几个开关你就能驾驭大多数场景选项可选值作用embedlast/always/never/link控制关联节点是否内嵌never只保留id引用explicitTrue/FalseTrue时只输出模板中明确列出的字段omitDefaultTrue/FalseTrue时省略模板中的默认值字段requireAllTrue/FalseTrue时节点必须匹配模板全部条件才输出pruneBlankNodeIdentifiersTrue/False是否清理无用的空白节点标识比如组合explicitTrue加embednever就能得到最干净的引用型输出特别适合序列化给前端或移动端使用。flatten 与 frame 的区别一张表看懂何时用哪个很多新手会混淆这两个操作其实记住一句话就够了flatten 面向机器frame 面向人。对比维度flatten 扁平化frame 框架化输出形态平铺的节点列表节点图嵌套的树结构输出依据按id归并无模板严格按 frame 模板字段命名完整 IRI或上下文短词模板中的短词典型用途RDF 转换、图入库、去重合并API 响应、页面渲染、数据导出是否可逆展开的中间态可还原成近似原始结构实战建议需要合并去重或接入 RDF/图数据库时优先用flatten需要为不同客户端定制响应结构时先用flatten得到干净的节点图再交给frame按模板成型——这是 JSON-LD 处理管线中最经典的两段式组合。快速上手安装 PyLD 并运行官方示例PyLD 发布在 PyPI 上一行命令即可安装pip install pyld想自己跑通示例直接克隆仓库https://gitcode.com/gh_mirrors/py/pyld后按docs/requirements.txt安装依赖requests、aiohttp、lxml、cachetools、frozendict然后依次运行docs/examples/flatten.py和docs/examples/frame.py对照输出即可直观感受两种数据整形的差异。更完整的 API 说明可查看docs/reference/flatten.md与docs/reference/frame.md以及源码lib/pyld/jsonld.py中对应的函数实现。结语PyLD 的flatten与frame是一对互补的利器一个把杂乱的数据打散成标准节点图一个把节点图组装成你要的定制树。理解并熟练运用这对数据整形双雄你的 JSON-LD 处理能力会上一个台阶——无论是构建知识图谱、对接 RDF 生态还是为不同客户端提供恰到好处的 JSON 结构都能游刃有余。【免费下载链接】pyldJSON-LD processor written in Python项目地址: https://gitcode.com/gh_mirrors/py/pyld创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表