我正在测试 NJsonschema,发现以下简单的 Json 模式无效。
原始架构是一个包含很多定义的大架构,其中一个定义(ResourceList)是一个包含很多其他定义的列表,但为了简化问题,我将整个架构简化为下面的 jsonschemastr,其中仅包含 4定义。
问题是如果 schema 定义了 ResourceList 中也包含的类型(ValueSet 或 CodeSystem),则整个 schema 将无效,但如果定义 ValueSet1 则没有问题,为什么?顺便说一句,我的架构是有效的,并使用其他 Json 架构工具进行了检查。
[Fact]
public async Task When_ref_is_nested_then_it_should_be_resolved()
{
/// Arrange
var jsonschemastr = @"{
""$schema"": ""http://json-schema.org/draft-04/schema#"",
""$ref"": ""#/definitions/ValueSet"", "//<=== Could not resolve this path, but it is valid with ValueSet1!!!
+@"""definitions"": {
""ResourceList"": {
""oneOf"": [
{
""properties"": {}
},
{
""$ref"": ""#/definitions/CodeSystem""
},
{
""$ref"": ""#/definitions/ValueSet""
}
]
},
""CodeSystem"": {
},
""ValueSet"": {
},
""ValueSet1"": {
}
}
}";
var schema = await JsonSchema4.FromJsonAsync(jsonschemastr);
/// Assert
var jsonOutput = schema.ToJson();
Assert.NotNull(jsonOutput);
}