2017-08-23 15 views
1

Ich habe ein JSON-Schema, das mehrere Schemas referenziert, wobei der Parameter '$ ref' verwendet wird, dessen Schemas wiederum auf andere Schemas verweisen.So validieren Sie ein JSON-Schema mit verschachtelten Referenzen

Für z.

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "type": "object", 
    "allOf": [ 
    { 
     "$ref": "xyz.json" 
    } 
    ] 
} 

wo Schema xyz.json ist:

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "type": "object", 
    "properties": { 
    "id": { "type": "string", "title": "Identifier"}, 
    "Xid": { "type": "object", "$ref": "pqr.json", "title": "X Identifier"} 
    } 
} 

Nur aus Gründen der Bequemlichkeit , habe ich sie alle in einem einzigen Verzeichnis abgelegt und versucht, das Schema zu validieren eine Bibliothek mit Ajv genannt aber beim kompilieren des Schemas bekomme ich den Fehler: can't resolve reference #/event.json from id.

Wie kann ich ein solches JSON-Schema validieren? Mein Ziel ist es, ein einziges JavaScript-Objektmodell für alle Schemas zu erstellen. Vielen Dank.

Antwort

0

Ich weiß nicht AJV, aber aus dem Blick auf die Dokumente, scheint dies über die .addSchema Methode erreicht werden. Fügen Sie alle Teilschemata wie folgt aus (fs.readFileSync von node.js nur aus Gründen der Argumentation, in einem Browser könnte es ein XMLHttpRequest sein):

var main = JSON.parse(fs.readFileSync('main.json')); 
var xyz = JSON.parse(fs.readFileSync('xyz.json')); 

var avj = new Avj(main); 

avj.addSchema(xyz, 'xyz'); 

und verweisen sie aus dem Hauptschema mit der ID Sie in der Menge zweites Argument:

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "type": "object", 
    "allOf": [ 
    { 
     "$ref": "xyz#" 
    } 
    ] 
} 

wenn Sie mehrere Teilschemata haben, können Sie auch, sie alle in einem Array hinzufügen, wenn Sie die IDs als Eigenschaften festgelegt:

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "id": "xyz", 
    ... 
} 

Aus meinem experienc Mit anderen Bibliotheken (der alten jayschema), müssen Sie möglicherweise schreiben xyz# (mit einem Hash am Ende) mindestens für die Referenz, vielleicht auch für die ID-Parameter.

Verwandte Themen