如何用JSON Schema验证图中边指向的节点存在性?
用JSON Schema验证网络图边的端点合法性
当然可以实现!你需要用到JSON Schema中的$data关键字(要求验证器支持JSON Schema Draft 07及以上版本),它允许你引用待验证JSON实例中的数据,而非硬编码在Schema里的固定值。
完整JSON Schema示例
{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "required": ["V", "E"], "properties": { "V": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "E": { "type": "array", "items": { "type": "object", "required": ["v1", "v2"], "properties": { "v1": { "type": "string", "const": { "$data": "/V/*" } }, "v2": { "type": "string", "const": { "$data": "/V/*" } } } } } } }
关键逻辑说明
$data": "/V/*":通过JSON Pointer语法,直接引用当前实例中V数组的所有元素,让v1和v2的值必须匹配其中某一项。"uniqueItems": true:可选配置,强制顶点ID不重复,避免出现冗余顶点。- 层级校验:先确保
V是字符串数组、E是指定结构的对象数组,再校验每条边的端点合法性。
验证效果
- 你提供的第一个合法示例会顺利通过验证。
- 第二个包含无效端点的示例会验证失败,因为
v2的IdThatDoesNotExistAbove不在V数组的元素列表中。
注意事项
部分旧版JSON Schema验证器可能不支持$data关键字,建议使用支持Draft 07+的工具,比如Ajv(JavaScript)、JSON Schema Validator(Java)等。
内容的提问来源于stack exchange,提问作者jonas-l-b
相关产品推荐
相关产品推荐

