给定一个像这个例子这样的原始 JSON-LD 文档,它定义了sourcesfor some thing1:
[
{
"@id": "https://example.com/thing1",
"https://example.com/sources": [
{
"@id": "https://example.com/vocab/countries/EN"
},
{
"@id": "https://example.com/vocab/countries/FR"
}
]
}
]
(我简化了很多 - 在我的实际用例中,它更大并且由 RDF 数据生成。ex:vocab/countries是一个 SKOS ,ConceptScheme包括EN和FRas Concepts)
我想把它折叠成近似于我用更普通的 JSON 来表达的东西:
{
"@id": "https://example.com/thing1",
"sources": ["EN", "FR"]
}
我发现我可以使用上下文折叠成名称/值并缩短名称:
{
"@context": {
"@version": 1.1,
"ex": "https://example.com/",
"sources": {
"@id": "ex:sources",
"@type": "@id"
}
},
"@id": "ex:thing1",
"sources": [
"ex:vocab/countries/EN",
"ex:vocab/countries/FR"
]
}
一个重要的元素是"@type": "@id"将源定义从(一个列表)对象折叠成键/值对,并且封闭的上下文术语映射https://example.com/sources到sources.
但我找不到一种似乎对价值观做同样的事情的方法,这样它们就变成了ENandFR而不是ex:vocab/countries/ENand ex:vocab/countries/FR。我在上下文中添加@base和@vocab属性的实验似乎不像我预期的那样工作。
我还需要以范围的方式执行此操作,以便sources可以定义引用不同词汇表的其他属性。例如,我可能想要包含languages,它可能包括来自表示英语、法语、盖尔语、布列塔尼语等词汇的术语。换句话说,我不能只为整个文档设置一个全局词汇或基础。
谁能告诉我这种转换是否可行,如果可以,如何实现?
JSON-LD Playground 链接在这里