能否对JSON-LD嵌入实现比@embed更精细的粒度控制?
JSON-LD 精细化嵌入粒度控制问题
给定JSON-LD
{ "@graph": [ { "@id": "Alice", "https://schema.org/givenName": "Alice", "https://schema.org/familyName": "Smith" }, { "@id": "CorporationA", "https://schema.org/founder": [ { "@id": "Alice" } ], "https://schema.org/member": [ { "@id": "Alice" } ], "https://schema.org/employee": [ { "@id": "Alice" } ] } ] }
给定上下文
{ "@vocab": "https://schema.org/" }
问题
是否可以实现比@embed提供的(即@once、@always和@never)更精细的嵌入粒度控制?具体来说,希望仅对member属性进行嵌入,不对founder或employee属性嵌入,且无需重排序字段,这是否可行?
已知从JSON-LD规范中仅能通过设置@embed为三种选项控制嵌入,但需要更精准的控制方式。
解答
可以实现这种精细化的嵌入控制,核心是利用JSON-LD 1.1规范支持的属性级局部@embed配置,结合上下文映射来针对特定属性单独设置嵌入规则,完全不需要重排字段。
具体实现方式:
- 全局
@embed设置为@never,让所有属性默认不嵌入目标实体; - 在上下文中为
member属性单独定义映射,指定其@embed规则为@always,强制嵌入对应的实体; - 可选显式为
founder和employee属性设置@embed: @never,确保行为明确(即使不设置,继承全局规则也可生效)。
修改后的上下文示例:
{ "@vocab": "https://schema.org/", "@embed": "@never", "member": { "@id": "member", "@embed": "@always" }, "founder": { "@id": "founder", "@embed": "@never" }, "employee": { "@id": "employee", "@embed": "@never" } }
经过处理后,最终的JSON-LD输出会仅将member字段对应的Alice实体完整嵌入,而founder和employee字段仍保留@id引用,且原有的字段顺序完全保持不变。
内容的提问来源于stack exchange,提问作者Oliver
相关产品推荐
相关产品推荐

