能否在JSON-LD Framing中使用@nest将属性分组到自定义节点?
问题解答
仅靠JSON-LD Framing无法直接实现你想要的效果。原因在于:
- JSON-LD Framing的核心是基于已有RDF数据结构重塑输出的嵌套和排序,它不能凭空创建原数据中不存在的属性(比如你需要的
dates)。 @nest关键字的作用是将实体的属性嵌套到已关联的其他实体中,而非创建全新的自定义分组容器。
可行的解决方案
1. 后处理转换
先通过Framing得到符合Schema.org规范的标准输出,再用脚本将目标属性移动到自定义分组中。比如用JavaScript实现:
// 假设framedResult是Framing后的输出 const framedResult = { "@context": "http://schema.org/", "id": "http://exemple.fr/me", "type": "Person", "birthDate": "1980-09-22", "deathDate": "not yet" }; // 生成期望的输出 const desiredOutput = { ...framedResult, "dates": { "birthDate": framedResult.birthDate, "deathDate": framedResult.deathDate } }; // 删除原属性 delete desiredOutput.birthDate; delete desiredOutput.deathDate; console.log(JSON.stringify(desiredOutput, null, 2));
2. 预处理数据(新增RDF属性)
如果你能在Framing之前修改原数据,新增dates对应的RDF关联结构,就可以通过Framing保留这个嵌套。比如先将原数据转换为包含dates结构的JSON-LD:
{ "@context": { "@vocab": "http://schema.org/", "dates": { "@container": "@index", "@context": { "birthDate": "birthDate", "deathDate": "deathDate" } } }, "id": "http://exemple.fr/me", "type": "Person", "dates": { "birthDate": "1980-09-22", "deathDate": "not yet" } }
之后再通过Framing即可直接得到目标结构。
3. 扩展上下文定义(需数据匹配)
如果你的原始数据来源本身就能输出包含dates关联关系的RDF数据,只需在Framing的上下文中定义dates的映射规则,再通过Framing指定嵌套结构即可,但这依赖原数据存在对应的关联关系。
内容的提问来源于stack exchange,提问作者ThomasFrancart
相关产品推荐
相关产品推荐

