如何解决如何压缩和/或构建 json-ld 文档,以便 IRI 值和键一样简洁地表达?
给定一个像这个例子这样的原始 JSON-LD 文档,它为某些 sources
定义了 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
和 {{1 }} 为 FR
)
我想把它折叠成一个近似于我用更普通的 JSON 来表达它的东西:
Concepts
{
"@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
而不是 FR
和 ex:vocab/countries/EN
。我将 ex:vocab/countries/FR
和 @base
属性添加到上下文的实验似乎没有像我预期的那样工作。
我还需要以作用域的方式执行此操作,以便可以定义除 @vocab
之外的其他引用不同词汇表的属性。例如,我可能想要包含 sources
,它可以包含代表英语、法语、盖尔语、布列塔尼语等词汇的术语。换句话说,我不能只为整个文档设置全局词汇表或基础.
谁能告诉我这种转换是否可行,如果可行,如何实现?
解决方法
您可以将 sources
的预期值设置为 @vocab
而不是 @type
,并使用范围上下文来设置要使用的 @vocab
。例如:
{
"@version": 1.1,"ex": "https://example.com/","sources": {
"@id": "ex:sources","@type": "@vocab","@context": {
"@vocab": "https://example.com/vocab/countries/"
}
}
}
(游乐场link)。
这表示将 playground
的值视为与词汇相关的 IRI,并为这些值设置该词汇表的基础。您应该得到以下信息:
{
"@context": {
"@version": 1.1,"sources": {
"@id": "ex:sources","@context": {
"@vocab": "https://example.com/vocab/countries/"
}
}
},"@id": "ex:thing1","sources": [
"EN","FR"
]
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。