2017-07-19 7 views
1

Meine Frage lautet: Wie kann ich herausfinden, welches JSON-Schema für die Validierung mit JSON verwendet werden soll? Ich habe die URL für das Schema im ID-Feld angegeben. Ist das genug? Soll ich die ID in den JSON einfügen? Ich bin mir nicht sicher, ob ich verstehe, wie man einen JSON mit einem bestimmten JSON-Schema verbindet.So geben Sie an, dass eine JSON-Instanz durch ein bestimmtes JSON-Schema definiert wird

Hier ist mein Schema

{ 
"$schema": "http://json-schema.org/draft-04/schema#", 
"id": "url/schema.json", 
"title": "title", 
"definitions": { 
    "emailObject": { 
     "type": "object", 
     "properties":{ 
      "name": { 
       "description": "The name of the customer", 
       "type": "string", 
       "maxLength": 200 
      }, 
      "email": { 
       "description": "The email of the customer", 
       "type": "string", 
       "format": "email", 
       "maxLength": 100 
      } 
     } 
    } 
} 

Antwort

0

Nach 10.1 des specification:

Es wird empfohlen, durch ein Schema beschrieben instances/Profil ein Link zu einem herunterladbaren JSON Schema bietet die Verwendung von Verbindungsrelation "beschrieben durch", wie definiert durch Linked Data Protocol 1.0, Abschnitt 8.1 [W3C.REC-ldp-20150226]. (Hervorhebung von mir)

Dies würde genau das Verhalten zu beschreiben scheinen Sie erfordern jedoch eine lässige Durchsicht der Linked Data Protocol section 8.1 lässt uns so klug wie zuvor:

Die Beziehung A describedby B behauptet, Ressource B liefert eine Beschreibung von Ressource A. Es gibt keine Einschränkungen für das Format oder Darstellung von entweder A oder B, noch gibt es weitere Einschränkungen für beide Ressourcen (Schwerpunkt meins)

Nach einer schnellen Google-Suche, fand ich diese question, die auf den ersten Blick scheinen würde, durch Ihre Frage dupliziert werden. Bei genauerer Betrachtung besteht die Frage jedoch tatsächlich in der Vererbung in Schemas, nicht in der Referenzierung eines Schemas von den unterstützten Instanzen.

Eine der Antworten, eher faszinierend, bietet eine Lösung, die auf dem JSON-Hyperschema-Standard basiert - ein Versuch, den JSON-Schema-Standard zu erweitern, um die Definition von Semantik auf Anwendungsebene zu unterstützen.

Die Art und Weise dies erreicht, ist durch die Verwendung des links collection:

{ 
    ... 
    "links":[ 
     { 
     "rel":"describedby", 
     "href":"{+fileType}" 
     } 
    ] 
} 

Es stellt sich heraus, dass diese auf einem anderen Standard RFC5988 - Web Linking basiert, die den gleichen Standard sein geschieht, die uns CSS in HTML-Seiten zu laden, .

Wie @ Jason in seinem Kommentar betont -

Ihr erstes Angebot, das man von der Spezifikation, ist der richtige Weg, es zu tun. Die angegebene verknüpfte Datendefinition widerspricht nicht der JSON Schema-Spezifikation. Es ist eine absichtlich breite Definition, so dass es auf jeden Medientyp angewendet werden kann, der Daten beschreibt. Dazu gehören JSON-Schema, XML-Schema oder etwas anderes.

So scheint es, dass eine Link Sammlung in Ihrem Schema Instanz einschließlich wäre der richtige Weg zu sein, das Schema zu verweisen.Also in Ihrem speziellen Fall, könnten Sie dies tun:

{ 
    ... 
    "links":[ 
     { 
     "rel":"describedby", 
     "href":"url/schema.json" // I assume!! 
     } 
    ] 
} 

Auch wenn dies richtig sein, ich weiß nicht, wie viele JSON-Parser wird dies respektieren, wenn sie über den Link zu einem aktuellen Schema zu lösen.

+0

Ihr erstes Angebot, das man von der Spezifikation, ist der richtige Weg, es zu tun. Die verknüpfte Datendefinition von 'describedby' widerspricht nicht der JSON-Schemaspezifikation. Es ist eine absichtlich breite Definition, so dass es auf jeden Medientyp angewendet werden kann, der Daten beschreibt. Dazu gehören JSON-Schema, XML-Schema oder irgendetwas anderes. – Jason

+0

Danke @Jason Ich werde meine Antwort aktualisieren –

+0

Vielen Dank für die Klarstellung, aber mein Problem ist, dass ich 2 JSON-Schema auf einem Server habe und ich habe ein JSON-Objekte und ich muss es mit einem Schema validieren. Aber ich weiß nicht, ob ich die ID in das Json-Objekt schreiben sollte, um sie zu verknüpfen oder wie man nur das Schema für dieses Objekt bekommt. – Maria

0

Um Toms Antwort hinzuzufügen und zu verdeutlichen, sehen Sie hier ein Beispiel, wie Sie ein JSON-Dokument mit einem JSON-Schema verknüpfen können. Es gibt keine Standardmethode, dies außerhalb des Kontexts einer HTTP-Antwort zu tun. Wenn Sie etwas brauchen, müssen Sie Ihre eigene Strategie entwickeln.

GET /data/my-data HTTP/1.1

HTTP/1.1 200 OK 
Content-Type: application/json 
Link: </schema/my-schema> rel=describedby 

{ "name": "Fake Fakerson", "email": "[email protected]" } 

GET /schema/my-schema HTTP/1.1

HTTP/1.1 200 OK 
Content-Type: application/schema+json 

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "id": "url/schema.json", 
    "title": "title", 
    "definitions": { 
    "emailObject": { 
     "type": "object", 
     "properties":{ 
     "name": { 
      "description": "The name of the customer", 
      "type": "string", 
      "maxLength": 200 
     }, 
     "email": { 
      "description": "The email of the customer", 
      "type": "string", 
      "format": "email", 
      "maxLength": 100 
     } 
     } 
    } 
    } 
} 
Verwandte Themen