Zum Beispiel ein Schema für ein Dateisystem, Verzeichnis enthält eine Liste von Dateien. Das Schema besteht aus der Spezifikation der Datei, als nächstes ein Untertyp "Bild" und ein anderer "Text".Wie erteile ich JSON-Schema-Validator, um Schema aus Eigenschaftswert auszuwählen?
Unten befindet sich das Hauptverzeichnisschema. Verzeichnis hat einen Eigenschafteninhalt, der ein Array von Elementen ist, die Untertypen von Dateien sein sollten.
Grundsätzlich ist das, was ich suche, eine Möglichkeit, dem Validator mitzuteilen, dass er den Wert eines "$ ref" aus einer Eigenschaft in dem zu validierenden JSON-Objekt nachschlagen soll. json
Beispiel:
{
"name":"A directory",
"content":[
{
"fileType":"http://x.y.z/fs-schema.json#definitions/image",
"name":"an-image.png",
"width":1024,
"height":800
}
{
"fileType":"http://x.y.z/fs-schema.json#definitions/text",
"name":"readme.txt",
"lineCount":101
}
{
"fileType":"http://x.y.z/extended-fs-schema-video.json",
"name":"demo.mp4",
"hd":true
}
]
}
Die "Pseudo" Schema zur Kenntnis, dass "Bild" und "Text" Definitionen werden in demselben Schema enthält, aber sie könnten an anderer Stelle
{
"id": "http://x.y.z/fs-schema.json",
"definitions": {
"file": {
"type": "object",
"properties": {
"name": { "type": "string" },
"fileType": {
"type": "string",
"format": "uri"
}
}
},
"image": {
"allOf": [
{ "$ref": "#definitions/file" },
{
"properties": {
"width": { "type": "integer" },
"height": { "type": "integer"}
}
}
]
},
"text": {
"allOf": [
{ "$ref": "#definitions/file" },
{ "properties": { "lineCount": { "type": "integer"}}}
]
}
},
"type": "object",
"properties": {
"name": { "type": "string"},
"content": {
"type": "array",
"items": {
"allOf": [
{ "$ref": "#definitions/file" },
{ *"$refFromProperty"*: "fileType" } // the magic thing
]
}
}
}
}
definiert werden
Bedarf Klärung. Sie möchten erzwingen, dass alle Dateien in einem Verzeichnis bestimmte Eigenschaften erfüllen, die definiert sind, wenn die Verzeichnisdaten definiert sind (nicht zur Entwurfszeit). Habe ich Recht? – jruizaranguren
Ich möchte es die richtige Definition für eine Unterart der Datei aus der Eigenschaft fileType auswählen – redben