2017-03-01 6 views
1

Das Thema klingt ziemlich verwirrend, oder?Standard-JsonSchema entspricht nicht dem Standard-JsonSchema

Soweit ich "JsonSchema-Validation" verstehe, gibt es ein Standard-JsonSchema unter "json-schema.org/schema#", das die erlaubte Struktur für andere JsonSchemas definieren soll. Dieser Standard JsonSchema bei "json-schema.org/schema#" ist ein JsonFile selbst (wie jedes andere JsonSchema) und ist auch ein JsonSchema.

Jetzt zum Punkt meiner eigenen Verwirrung: Wenn ich diesen spezifischen Standard JsonSchema gegen sich selbst validiere, erhalte ich Fehler um die JsonNodes/JsonObject-EigenschaftKeys "additionalProperties".

Wie unter "json-schema.org/example2.html" beschrieben, sollten die PropertyKeys "additionalProperties" auf derselben Ebene wie die PropertyKeys "properties" sein. Aber im Standard JsonSchema sind sie nicht. Sie befinden sich innerhalb des JsonObject, das in Propertykey "properties" enthalten ist.

Was mache ich falsch?

Zweite Ausgabe: Was bedeutet der Referenzeintrag "$ ref": "#" bedeuten? Auf welchen Definitionseintrag bezieht es sich? Der normale Referenzeintrag sollte eher wie folgt aussehen: "$ ref": "#/definitions/positiveInteger"

Jede Hilfe wird geschätzt.

mit freundlichen Grüßen HuDeanY

Antwort

2

Lassen Sie uns das Schema ein wenig nach unten brechen, um die Dinge ein wenig klarer zu machen. Wenn ich dich richtig verstehe, ist das der Teil, der dich stolpert.

{ 
    ... 
    "properties": { 
    ... 
    "properties": { 
     "type": "object", 
     "additionalProperties": { "$ref": "#" }, 
     "default": {} 
    }, 
    ... 
    }, 
} 

Der schwierige Teil ist, dass Sie, dass die zweiten „Eigenschaften“ zu realisieren haben, ist kein Schlüsselwort, es ist ein Eigenschaftsname. Dies ist das Meta-Schema, das das Schlüsselwort properties definiert. Es ist also kein Fall, das Schlüsselwort additionalProperties in das Schlüsselwort properties zu verschachteln, wie es auf den ersten Blick erscheinen mag.


Die "#" bezieht sich auf den Stamm des Dokuments. Also, { "$ref": "#" } ist eine rekursive Referenz. Mit anderen Worten, "#" bezieht sich auf das gesamte Meta-Schema. Das obige Schema-Segment definiert das Schlüsselwort properties als Objekt, dessen Werte Schemas sind.


Schließlich kann ich Ihnen versichern, dass jeder gut funktionierenden Validator erfolgreich jede gültige Schema validieren (einschließlich der Meta-Schema selbst) gegen die Meta-Schema. Ist dies nicht der Fall, handelt es sich um einen Fehler im Validator, der an den Verantwortlichen der von Ihnen verwendeten Validierungsbibliothek gemeldet werden sollte.

Verwandte Themen