我正在使用 JSON Schema 的 Draft-04。是否可以根据子属性的存在设置依赖关系,和/或依赖于子属性?还是我被迫使用allOf
来管理这些依赖项?
我有以下内容(您可以在https://repl.it/@neverendingqs/JsonSchemaNestedDependencies使用它):
'use strict';
const Ajv = require('ajv');
const assert = require('chai').assert;
// Using ajv@5.5.1
const draft4 = require('ajv/lib/refs/json-schema-draft-04.json');
const schema = {
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"foo1": {
"type": [ "object" ],
"properties": {
"bar1": { "type": "string" }
}
},
"foo2": {
"type": [ "object" ],
"properties": {
"bar2": { "type": "string" }
}
}
},
"dependencies": {
"foo1": ["foo2"],
// Is this possible?
"foo1/bar1": ["foo2/bar2"]
}
};
const schemaName = 'my-schema';
const ajv = new Ajv();
ajv.addMetaSchema(draft4);
ajv.addSchema(schema, schemaName);
assert.isTrue(
ajv.validate(schemaName, {
"foo1": { "bar1": "a" },
"foo2": { "bar2": "c" }
}),
ajv.errorsText(ajv.errors, { dataVar: 'event' })
);
assert.isFalse(ajv.validate(schemaName, {
"foo1": { "bar1": "a" }
}));
// Looking to cause this to pass
assert.isFalse(ajv.validate(schemaName, {
"foo1": { "bar1": "a" },
"foo2": {}
}));
我正在寻找 Draft-04 的答案,但也对使用后来的规范的答案感兴趣。
编辑:Draft-04指的是http://json-schema.org/specification-links.html#draft-4下的规范。具体来说,我使用dependencies
的是在验证规范(https://datatracker.ietf.org/doc/html/draft-fge-json-schema-validation-00)下定义的