2016-07-20 4 views
4

Kann mir jemand sagen, wie man den JustinRainbow Json Schema Validator in der Lage, Referenzen zu finden.Wie verwendet man Referenzen in JustinRainbow JsonValidator

Dies ist das Schema von foobar Ich versuche zu überprüfen:

Schema
{ 
    "title": "foobar schema", 
    "type": "object", 
    "properties": { 
    "pagination": { 
     "$ref": "#/definitions/pagination" 
    } 
    }, 
    "required": ["pagination"] 
} 

Und die Definition der Paginierung in einer separaten Datei auf meinem Computer enthalten ist.

Der Versuch, das zu überprüfen, ohne die JSON-Validator zu sagen, wie Referenzen wie diese zu beheben:

$uriRetriever = new JsonSchema\Uri\UriRetriever(); 
$refResolver = new JsonSchema\RefResolver($uriRetriever, $uriResolver); 
$schema = $refResolver->resolve("file://".realpath(__DIR__."/foobar.json")); 

gibt eine Fehlermeldung aus:

File: file://features/foobar.json is found, but could not resolve fragment: #/definitions/pagination (JsonSchema\Exception\UnresolvableJsonPointerException) 

Welche fair genug ist, da es keine Möglichkeit für den ist Validierer, um zu wissen, wie man die Datei findet, die die Definition des Paginierungsschemas enthält .... Wie kann ich dem RefResolver mitteilen, wie die Definition des Paginierungsschemas zu finden ist?

Ich würde lieber in der Lage sein, die Datei über das lokale Dateisystem aufzulösen, anstatt URLs auf einem Webserver zu verwenden.

+0

kann diese Hilfe Sie http: // json-schema.org/example2.html – Linus

+0

Nicht wirklich - Ich brauche ein Codebeispiel, das zeigt, wie man der Bibliothek sagt, dass etwas wie "#/definitions/diskDevice" in einer bestimmten Datei gefunden werden kann. – Danack

Antwort

0

Die Art der in Ihrem Schema verwendeten Referenz ist ein json pointer, der sich auf einen anderen Teil Ihrer Schemadatei bezieht. Sie müssen Definitions-/Paginierungseigenschaften angeben, um den Fehler zu beheben.

{ 
    "title": "foobar schema", 
    "type": "object", 
    "properties": { 
    "pagination": { 
     "$ref": "#/definitions/pagination" 
    } 
    }, 
    "required": ["pagination"], 
    "definitions": { 
     "pagination": { 

     } 
    } 
} 

Um eine Definition in einer anderen Datei verweisen Sie so etwas wie schreiben:

"pagination": { 
    "$ref": "pagination.schema.json#" 
} 

Oder sogar geben Sie einen bestimmten Knoten in der externen Datei:

"pagination": { 
    "$ref": "external_definitions.schema.json#/definitions/pagination" 
} 

Die external_definitions.schema.json/pagination.schema.json sollte in demselben Ordner gesucht werden wie Ihr Schema, das die Referenz enthält. Die Bibliothek sollte auch einige API bereitstellen, um diese Suche zu konfigurieren.

In meinem Projekt verwende ich JustinRainbow JsonValidator für PHP. Es ist nicht möglich, einen benutzerdefinierten Resolver bereitzustellen, aber der Speicherort für die referenzierten Dateien kann durch den Wert "id" im Schema beeinflusst werden.

Beispiel, Schema in main.schema.json:

{ 
    "id": "http://myweb.com/schemas/main.schema.json#", 
    "title": "foobar schema", 
    "type": "object", 
    "properties": { 
    "pagination": { 
     "$ref": "pagination.schema.json#" 
    } 
    }, 
    "required": ["pagination"] 
} 

wenn dieses Schema validiert, so dass der Validator versucht, den pagination.schema.json zu laden mit:

php_get_contents('http://myweb.com/schemas/pagination.schema.json'); 
Verwandte Themen