我接受有关数据库表架构的信息。它包含有关表列的信息。因此,很明显,这些列具有name
类型的string
属性。但是,这些名称不必来自预选名称列表。它们可以是用户输入的任何内容。现在我还想接受表的唯一键,它可以是复合键,只包含用户输入的列。换句话说,唯一键可以由用户在json数据中提供的列组成。
因此,技术上我需要的是:动态填充的字符串枚举(来自输入json数据),它将是表示唯一键的数组项的类型。因此,数组的每个元素都是列名。
例如,在json数据下面
"columns":
{
"col1": "val1",
"col2": "val2",
"col3": "val3"
},
"uniquelKey": ["val1","val2"]
是有效的,但是
"columns":
{
"col1": "val1",
"col2": "val2",
"col3": "val3"
},
"uniquelKey": ["val1","val4"]
是无效的,因为在val4
中指定的uniqueKey
不存在于columns
列表中。这是否可以通过当前的json-schema规范和实现来实现?我没有在这方面找到任何方向。
我当前的json架构如下所示:
...
"attributes":
{
"type": "array",
"items":
{
"type": "object",
"properties":
{
"name": {"type": "string"},
...
},
"required": ["name",...],
...
}
},
"uniqueKey":
{
... ** here is where I have stuck ** ...
}
...
不,使用当前版本的JSON Schema无法做到这一点。没有用于引用正在验证的数据中的值的机制。类似地,没有办法验证具有startDate
和endDate
属性的对象,其中startDate
小于endDate
。
有一项建议旨在解决未来JSON架构草案正在考虑的此限制。所以,您将来可能会这样做,但现在不行。
请参阅issue 51: type enhancement: $data
上的JSON Schema规范讨论。