给定一个像这个例子这样的原始 JSON-LD 文档,它定义了sources
for 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
和FR
as 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
.
但我找不到一种似乎对价值观做同样的事情的方法,这样它们就变成了EN
andFR
而不是ex:vocab/countries/EN
and ex:vocab/countries/FR
。我在上下文中添加@base
和@vocab
属性的实验似乎不像我预期的那样工作。
我还需要以范围的方式执行此操作,以便sources
可以定义引用不同词汇表的其他属性。例如,我可能想要包含languages
,它可能包括来自表示英语、法语、盖尔语、布列塔尼语等词汇的术语。换句话说,我不能只为整个文档设置一个全局词汇或基础。
谁能告诉我这种转换是否可行,如果可以,如何实现?
JSON-LD Playground 链接在这里