我正在使用 xdmp:json-validate-node 函数来验证 json 文档,然后再将其插入 MarkLogic。但当数字类型字段具有 NaN 值时,json 模式验证似乎不会引发错误。我在 json 文档上定义了 TDE,它拒绝我的文档,因为在 TDE 中我已将标量类型定义为十进制。
有什么方法可以验证数字类型的 NaN 值的 json 模式吗?
我在 MarkLogic qconsole 中尝试了以下查询。我期待验证错误,但它返回输入 json
xquery version "1.0-ml";
let $node := object-node {
"name": "test",
"age": fn:number("fail")
}
let $schema := object-node {
"properties": object-node {
"name": object-node {
"type": "string"
},
"age": object-node{
"type": "number"
}
}
}
return xdmp:json-validate-node($node, $schema, "full")
NaN
是一个数字,但实际上在 JSON 中是不允许的。
关于它是否应该有效,以及是否有一个选项来配置 json-schema 的行为,存在一些争论。
MarkLogic 中的当前实现会将NaN
视为数字并被视为有效,并且我不相信有一种方法可以使用选项配置行为。因此,如果您想将其标记为无效,则需要使用自定义的内容来增强验证。我建议打开
MarkLogic 支持票证,请求增强 JSON 验证实现和/或在 MarkLogic Ideas 门户上提交功能请求。