Ad esempio uno schema per un file system, la directory contiene un elenco di file. Lo schema è costituito dalle specifiche del file, successivamente un sottotipo "immagine" e un altro "testo".Come dire allo strumento di convalida dello schema JSON di scegliere lo schema dal valore della proprietà?
Nella parte inferiore è presente lo schema della directory principale. La directory ha un contenuto di proprietà che è una matrice di elementi che dovrebbero essere sottotipi di file.
Fondamentalmente quello che sto cercando è un modo per dire al validatore di cercare il valore di un "$ ref" da una proprietà nell'oggetto json che viene convalidato.
Esempio JSON:
{
"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
}
]
}
La "pseudo" Schema nota che e definizioni "testo", "immagine" sono compresi nello stesso schema, ma potrebbero essere definiti altrove
{
"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
]
}
}
}
}
Hai bisogno di chiarimenti. Si vuole far rispettare tutti gli elementi dei file in una directory con tutte le proprietà definite quando i dati della directory sono definiti (non in fase di progettazione), vero? – jruizaranguren
Voglio che scelga la definizione corretta per un sottotipo di file dalla proprietà fileType – redben