Я тестирую NJsonschema и обнаружил, что следующая простая схема Json недопустима.
Исходная схема представляет собой большую схему, содержащую множество определений, одно из определений (ResourceList) представляет собой список, содержащий множество других определений, но для упрощения вопроса я упростил всю схему, как показано ниже: jsonschemastr, в котором содержит только 4 определения.
Проблема в том, что если схема определяет тип (ValueSet или CodeSystem), который также содержится в ResourceList, вся схема будет недействительной, но не проблема, если она определяет 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);
}