Я использую Draft-04 схемы JSON. Можно ли установить зависимости на основе существования подсвойства и/или зависимости от подсвойства? Или я вынужден использовать allOf
для управления такими зависимостями?
У меня есть следующее (вы можете поиграть с ним на https://repl.it/@neverendingqs/JsonSchemaNestedDependencies а>):
'use strict';
const Ajv = require('ajv');
const assert = require('chai').assert;
// Using [email protected]
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": {}
}));
Я ищу ответы на проект 04, но меня также интересуют ответы с использованием более поздних спецификаций.
EDIT: Draft-04 относится к спецификациям в разделе http://json-schema.org/specification-links.html#draft-4. В частности, я использую dependencies
, который определен в спецификации Validation (https://tools.ietf.org/html/draft-fge-json-schema-validation-00)