如何在JSON-LD中为@id值关联类型信息且不增加数据负载?
如何在JSON-LD中为@id值关联额外类型信息且不增加数据负载?
背景与需求
先看这个示例JSON-LD:
{ "@context": "http://vocab.example/0.1/", "@type": "Foo", "foo": "bar", "@id": "https://host.example/ce157da859bbfba38d96ccaf080fa812/" }
其中@id的尾部是通过算法计算生成的。当前只用一种算法,但未来可能变更,所以希望通过上下文说明使用的算法类型。但@id作为JSON-LD关键字,没法直接给它关联类似CumputedUsingAlgorithmXYZ的表达性类型。
最终期望生成的RDF如下:
<https://host.example/ce157da859bbfba38d96ccaf080fa812/> <https://host.example/ce157da859bbfba38d96ccaf080fa812/@> "https://host.example/ce157da859bbfba38d96ccaf080fa812/"^^<http://vocab.example/0.1/CumputedUsingAlgorithmXYZ> .
可行方案(无额外数据负载)
可以通过JSON-LD 1.1的反向属性+值类型标注特性,完全在上下文里配置实现,不需要修改数据主体的任何内容:
{ "@context": [ "http://vocab.example/0.1/", { "@reverse": { "https://host.example/ce157da859bbfba38d96ccaf080fa812/@": { "@id": "@id", "@type": "CumputedUsingAlgorithmXYZ" } } } ], "@type": "Foo", "foo": "bar", "@id": "https://host.example/ce157da859bbfba38d96ccaf080fa812/" }
方案说明
- 上下文里通过
@reverse定义目标属性的反向关联,将资源自身与它的@id值绑定 - 为这个绑定的
@id值指定@type为算法标识,生成你需要的类型标注三元组 - 数据主体完全不需要新增字段,没有额外负载
- 未来算法变更时,仅需修改上下文里的
@type值即可,现有数据无需调整
如果要让方案更通用(不绑定到特定资源的@属性),可以在你的词汇表中定义一个通用属性(比如hasComputedId),然后在上下文中映射为反向属性并关联@id与算法类型,这样所有使用该上下文的资源都会自动生成对应的类型标注。
内容的提问来源于stack exchange,提问作者avnr
相关产品推荐
相关产品推荐

