Ich versuche JSON Schema zu erweitern, die eine Enumeration definiert:JSON Schema draft-04: Verlängerung für bestimmten „Enum“ Wert
{
"$schema": "http://json-schema.org/draft-04/schema#",
"definitions": {
"objType": {
"enum": [ "A", "B" ]
},
"baseType": {
"type": "object",
"properties": {
"category": { "$ref": "#/definitions/objType" }
}
}
},
"properties": {
"A": {
"allOf": [
{ "$ref": "#/definitions/baseType" },
/* how to restrict inherited `category' to "A"? */
{ /* properties specific to A */ }
]
},
"B": {
"allOf": [
{ "$ref": "#/definitions/baseType" },
/* how to restrict inherited `category' to "B"? */
{ /* properties specific to B */ }
]
}
}
}
Ich bin nicht sicher, wie man bestimmten Wert geerbt Enum Eigenschaft beschränken . Zum Beispiel:
// passes validation
{
"category": "A",
"prop_A": "blah A"
}
// fails because `prop_A' is not valid property for category "B"
{
"category": "B",
"prop_A": "blah A"
}
Danke.
Ja, ich habe dieses Beispiel gesehen. Wenn es keine andere Wahl gibt, werde ich das tun. Es bricht jedoch das Enum auf und streut es über das gesamte Schema, während es für Bugs anfällig wird, wenn zukünftige Änderungen kommen. –
Vor einiger Zeit hatte ich ein ähnliches Problem im Zusammenhang mit einem Swagger-Schema und stieß auf https://gist.github.com/leedm777/5730877, aber in diesem Ansatz machen sie die Einschränkung * Der abgeleitete Typ darf keine definierten Eigenschaften neu definieren in irgendeinem seiner Basistypen *, die es hier möglicherweise ungeeignet machen, da ich denke, dass Ihr Ziel, "prop_A" zu haben, keine gültige Eigenschaft für die Kategorie "B" * ist, als eine Verletzung dieser Beschränkung betrachtet werden könnte. Ich würde auch gerne einen besseren Weg finden, aber noch nicht getan. – jq170727