尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

PyLD核心API速查手册:compact、expand、flatten、frame、normalize一网打尽

PyLD核心API速查手册:compact、expand、flatten、frame、normalize一网打尽 PyLD核心API速查手册compact、expand、flatten、frame、normalize一网打尽【免费下载链接】pyldJSON-LD processor written in Python项目地址: https://gitcode.com/gh_mirrors/py/pyldPyLD 是 Python 生态中最成熟的JSON-LD 处理器由 Digital Bazaar 团队维护完整实现了 W3C JSON-LD 1.1 规范。无论你是刚接触语义网的初学者还是需要处理结构化数据的开发者PyLD 都能帮你把散乱的 JSON 变成真正懂语义的链接数据。本文为你整理一份PyLD 核心 API 速查手册用最直白的方式讲清 compact、expand、flatten、frame、normalize 五大核心方法让你一篇文章快速上手 Python 处理 JSON-LD。为什么你需要 PyLD普通 JSON 只描述数据结构JSON-LD 则在 JSON 基础上加入语义——通过context上下文把字段名映射到全球唯一的 IRI让数据可以被机器理解、跨系统互操作。PyLD 就是帮你完成这一整套转换的Python JSON-LD 库其核心实现在 jsonld.py 中支持✅ 遵循 W3C JSON-LD 1.1 官方推荐标准✅ 支持 RDF 数据互转与规范化✅ 内置 requests / aiohttp 文档加载器✅ 纯 Python 实现安装即用一分钟安装与快速开始安装 PyLD 非常简单一条命令搞定pip install PyLD如果你需要远程加载 JSON-LD 上下文可以按需安装附加依赖pip install PyLD[requests] # 同步加载 pip install PyLD[aiohttp] # 异步加载安装完成后所有核心方法都从pyld.jsonld模块导入使用姿势统一为jsonld.方法名(输入, 选项)from pyld import jsonld doc { http://schema.org/name: Manu Sporny, http://schema.org/url: {id: http://manu.sporny.org/} } context {name: http://schema.org/name} compacted jsonld.compact(doc, context)就这么简单下面我们逐一拆解五大核心 API。五大核心 API 总览先看一张速查表30 秒建立全局认知API 方法作用典型场景输出形式compact()按上下文压缩把长 IRI 换成短术语对外输出简洁 JSON紧凑文档expand()展开文档术语还原为完整 IRI数据标准化、语义化展开数组flatten()拍平嵌套结构为节点图图数据处理节点映射frame()按模板重塑文档树形结构API 响应定制框架文档normalize()规范化生成标准 N-Quads签名、哈希、比对规范化字符串一句话记忆compact 是压缩expand 是展开flatten 是拍平frame 是整形normalize 是定标准。核心处理流程原始JSON → expand(展开为完整IRI) → flatten(拍平为节点图) → frame(按模板整形) ↘ normalize(输出规范N-Quads)展开是其他所有操作的基础因为 JSON-LD 的算法都基于完整 IRI 形式运行。compact把冗长 IRI 压缩成简洁术语 ️compact()是使用频率最高的方法它根据context把http://schema.org/name这样的完整 IRI 替换成name这样的短术语让输出既简洁又保留语义。compacted jsonld.compact(doc, context) print(compacted)关键点第二个参数ctx可以是内联字典也可以是远程 URLjsonld.compact(http://example.org/doc, http://example.org/context)常用选项compactArrays默认True单元素数组自动降级为标量和graph是否始终输出顶层graph详见 options.py完整可运行示例参考 compact.py。expand把术语还原为完整 IRI expand()是 compact 的逆操作也是整个 JSON-LD 处理链条的起点。它剥离上下文把所有属性名转换成带命名空间的绝对 IRI输出一个语义完全显式化的数组。expanded jsonld.expand(compacted)一个实用技巧如果你在展开时遇到属性被悄悄丢弃的情况属性无法映射为绝对 IRI可以通过on_property_dropped回调开启严格模式任何被忽略的属性都会抛错def raise_this(value): raise ValueError(value) jsonld.expand(doc, None, on_property_droppedraise_this)这一特性非常适合在数据校验场景中捕获拼写错误或未定义的字段。flatten把嵌套结构拍平成节点图 flatten()将嵌套的 JSON-LD 文档拍平成一个节点映射——每个节点都提升到顶层节点之间用id引用相互关联。拍平后的数据可以逐节点独立处理是图数据库导入等场景的标准前置步骤。flattened jsonld.flatten(doc)如果你想在拍平后顺便压缩一下直接把 context 作为第二个参数传入即可flattened_compact jsonld.flatten(doc, context)frame按模板重塑数据树 frame()是五大 API 中最魔法的一个你给它一个框架frame它按框架把散落的节点重新组织成你想要的树形结构。这在 API 响应定制、UI 数据组装场景中非常好用。frame { context: {name: http://schema.org/name}, type: http://schema.org/Person, } framed jsonld.frame(doc, frame)常用选项一览embed节点内嵌策略last/always/never/linkexplicit只输出框架中显式声明的属性omitDefault省略框架中的默认值占位requireAll要求匹配框架中所有属性才算命中完整示例参考 frame.py。normalize生成标准化指纹 normalize()使用 W3C 官方的RDF Dataset Normalization Algorithm推荐使用URDNA2015实现见 canon.py把文档转换成唯一的、可哈希的标准形式。相同语义的文档无论怎么写、属性顺序如何normalize 后都会得到完全一致的输出字符串——这就是它常用于数据签名、内容寻址和一致性比对的原因。normalized jsonld.normalize( doc, {algorithm: URDNA2015, format: application/n-quads} )输出是一段 N-Quads 格式的规范化字符串N-Quads 的解析与序列化工具在 nquads.py 中可直接用于 数据签名与验签如 Verifiable Credentials 可验证凭证 内容寻址用哈希值定位数据⚖️ 两个数据集是否语义等价的比对示例见 normalize.py。进阶RDF 双向互转除了五大核心 APIPyLD 还提供 RDF 互转能力打通 JSON-LD 与标准 RDF 世界to_rdf()把 JSON-LD 文档转换为 N-Quads 三元组方便对接知识图谱、SPARQL 数据库from_rdf()反向把 RDF 数据转回 JSON-LD让 RDF 数据也能用 JSON-LD API 处理常见问题与避坑指南远程上下文加载超时生产环境务必配置自定义文档加载器并设置超时例如jsonld.set_document_loader(jsonld.requests_document_loader(timeout10))离线部署报错需要离线运行时可使用内置的FrozenDocumentLoader它只提供内置上下文包ActivityStreams、DID v1 等拒绝一切外部请求属性莫名丢失属性未在上下文中定义时会静默丢弃用上文提到的on_property_dropped开启严格模式排查normalize 默认算法注意normalize()默认算法是URGNA2012追求最新标准请显式指定URDNA2015总结PyLD 作为成熟的Python JSON-LD 处理器用五个核心 API 覆盖了 JSON-LD 数据处理的全部关键环节compact 负责压缩输出、expand 负责语义展开、flatten 负责图结构拍平、frame 负责按需整形、normalize 负责标准化签名。记住这张速查表配合官方文档docs/index.md和示例目录docs/examples你就能在 Python 项目中流畅地处理 JSON-LD 数据了。马上pip install PyLD动手试试吧【免费下载链接】pyldJSON-LD processor written in Python项目地址: https://gitcode.com/gh_mirrors/py/pyld创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表