Json 具有多个 patternProperties 的架构优先级
Json schema precedence with multiple patternProperties
我正在编写一个包含多个 patternProperties
元素的架构。有没有办法指定应检查这些模式的优先级?
鉴于此架构:
{
$id: "https://example.com/mySchema",
type: "object",
patternProperties: {
"^foo\.bar\.[a-zA-Z0-9-]+\.(?:string|boolean|date|)$": { // #1
type: "object",
properties: { ... }
},
"^bar\.foo\.[a-zA-Z0-9-]+\.(?:string|boolean|date|)$": { // #2
type: "object",
properties: { ... }
},
"^foo\.[a-zA-Z0-9-]+\.[a-zA-Z0-9-]+\.(?:string|boolean|date|)$": { // #3
type: "object",
properties: { ... }
},
}
}
正在验证的 json:
{
foo.bar.baz.boolean: { ... }
}
验证失败,因为它正在检查模式 #3
而不是模式 #1
。是否可以首先使用最严格的模式进行验证?
有关更多上下文:我目前正在使用 AJV 来实施验证。如果有更好的选择,我打开建议
规范没有指明应用模式的顺序,因此实现可以做任何事情,从 运行 它们按字母顺序排序或它选择的任何其他顺序。
但是,所有 匹配每个 属性 的模式必须评估它们的子模式,因此检查它们的顺序应该不重要。如果您发现一旦找到匹配模式,实现就会停止匹配特定的 属性,这将是一个应该修复的错误。
我正在编写一个包含多个 patternProperties
元素的架构。有没有办法指定应检查这些模式的优先级?
鉴于此架构:
{
$id: "https://example.com/mySchema",
type: "object",
patternProperties: {
"^foo\.bar\.[a-zA-Z0-9-]+\.(?:string|boolean|date|)$": { // #1
type: "object",
properties: { ... }
},
"^bar\.foo\.[a-zA-Z0-9-]+\.(?:string|boolean|date|)$": { // #2
type: "object",
properties: { ... }
},
"^foo\.[a-zA-Z0-9-]+\.[a-zA-Z0-9-]+\.(?:string|boolean|date|)$": { // #3
type: "object",
properties: { ... }
},
}
}
正在验证的 json:
{
foo.bar.baz.boolean: { ... }
}
验证失败,因为它正在检查模式 #3
而不是模式 #1
。是否可以首先使用最严格的模式进行验证?
有关更多上下文:我目前正在使用 AJV 来实施验证。如果有更好的选择,我打开建议
规范没有指明应用模式的顺序,因此实现可以做任何事情,从 运行 它们按字母顺序排序或它选择的任何其他顺序。
但是,所有 匹配每个 属性 的模式必须评估它们的子模式,因此检查它们的顺序应该不重要。如果您发现一旦找到匹配模式,实现就会停止匹配特定的 属性,这将是一个应该修复的错误。