在 JSON-LD 中注释嵌套的 structures/values

Annotating nested structures/values in JSON-LD

假设我有一个 JSON 对象,在嵌套对象中有一些属性。

{
    "title": "My Blog Post",
    "meta": {
        "publishedAt": "2016-08-01T00:00:00Z"
    }
}

有没有一种简单的方法可以将 @context 添加到我的顶级对象以达到 这些属性(即 "pass through" 元对象)?有事 这些行:

{
    "@context": {
        "title": "schema:name",
        "meta.publishedAt": {
            "@type": "xsd:date",
            "@id": "schema:datePublished"
        }
    },

    "@id": "/my-article",
    "title": "My Blog Post",

    "meta": {
        "publishedAt": "2016-08-01T00:00:00Z"
    }
}

我想避免必须向嵌套对象添加(重复)@id,否则我将如何解决它:

{
    "@context": {
        "title": "schema:name",
        "meta": { "@id": "_:meta", "@container": "@set" },
        "publishedAt": {
            "@type": "xsd:date",
            "@id": "schema:datePublished"
        }
    },

    "@id": "/my-article",
    "title": "My Blog Post",

    "meta": {
        "@id": "/my-article",
        "publishedAt": "2016-08-01T00:00:00Z"
    }
}

此解决方案 有效 ,但需要复制,并且来自 ethanresnick's Github 关于注释 JSON API 的评论。他在 another issue 中指出 @context 不是 "quite expressive enough to annotate the JSON API structure"。我希望至少在这个问题上能证明他是错的。

如果你想做的是吃掉 meta 元素,那么不,这在 JSON-LD 中是做不到的。

已经有人讨论过做一个可以做这样的事情的反向索引,但我没有看到一个问题。您可以在 https://github.com/json-ld/json-ld.org/issues 创建一个。在某个时候,CG 或新成立的 WG 将开始查看新版本的功能请求。

我刚刚发现最新的 JSON-LD 规范包括关于 nested properties 的新部分。像这样定义上下文应该会产生所需的输出:

{
    "@context": {
        "title": "schema:name",
        "meta": "@nest",
        "publishedAt": {
            "@type": "xsd:date",
            "@id": "schema:datePublished",
            "@nest": "meta"
        }
    },
    ...
}