我正在构建一个严重依赖JSON-LD的系统。我有一个图形数据库,可以在其中创建顶点,并且所有顶点都必须具有上下文。上下文又定义了顶点可以具有的所有必要属性。 仅使用上下文的问题在于,前端应用程序不知道哪些属性是必需的,哪些属性不是必需的。
我一直在研究Markus Lanthaler的Hydra控制台和事件演示API,在那里我发现它使用的vocab
定义了所有受支持的类和受支持的属性。
在属性中,定义了required: true|false
属性,这正是我所需要的。
现在的问题是,这是在JSON-LD中定义必需属性的唯一方法吗?
上下文:
{
"@context": {
"@version": 1.1,
"@vocab": "https://example.com/vocabularies/building.jsonld#",
"pref": {
"@id": "https://example.com/ontologies/core.jsonld#",
"@prefix": true
},
"name": "pref:name",
"data": "pref:data",
"permanentBuildingNumber": {
"@id": "pref:permanentBuildingNumber",
"@nest": "data"
}
}
}
词汇:
{
"@context": {
"@version": 1.1,
"pref": {
"@id": "https://example.com/ontologies/core.jsonld#",
"@prefix": true
},
"@vocab": "https://example.com/vocabularies/building.jsonld#"
},
"@id": "https://example.com/vocabularies/building.jsonld",
"@type": "pref:Vocabulary",
"pref:supportedClass": [
{
"@id": "pref:Building",
"@type": "pref:Building",
"pref:supportedProperty": [
{
"pref:property": "pref:name",
"pref:title": "name",
"pref:description": "The name of the vertex.",
"pref:required": true
},
{
"pref:property": "pref:permanentBuildingNumber",
"pref:title": "Permanent building number",
"pref:description": "A unique identifier for the building.",
"pref:required": true
},
{
"pref:property": "pref:data",
"pref:title": "data",
"pref:description": "Contains the attributes of the vertex.",
"pref:required": true
}
]
}
]
}
由此,前端可以获取必要的信息并为每个属性动态创建输入字段,但也知道Building
是@type
字段的唯一值。
我没有找到解决此问题的其他方法,大多数JSON-LD用法示例只是简单的产品页面或类似内容。
词汇表是解决我的问题的唯一方法,还是还有其他方法? 这种方法很难维护,因为所有类型的顶点都需要它们自己的上下文和词汇来定义所需的属性。