2017-06-15 2 views
0

J'essaie d'utiliser le schéma JSON défini sur www.hl7.org/fhir/json.html, tel que www.hl7.org/fhir/Patient.schema.json.Tous les schémas JSON FHIR ne valident pas

Le schéma commence par:

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "id": "http://hl7.org/fhir/json-schema/Patient", 
    "$ref": "#/definitions/Patient", 
    "description": "see http://hl7.org/fhir/json.html#schema for information 
    about the FHIR Json Schemas", 
    "definitions": { 
    "Patient": { 
    "allOf": [ 
    { 
     "$ref": "DomainResource#/definitions/DomainResource" 
    }, 

Quand je coller dans [www.jsonschemavalidator.net] [3], je reçois l'erreur

Erreur lors de la résolution de référence de schéma « #/définitions/Patient '. Chemin '', ligne 1, 1.

Si je déplace la ligne 4 ("ref $": "#/définitions/patient") dans la définition de "patient", l'erreur d'analyse schéma est fixe, et Je peux correctement valider quelques exemples de données JSON.

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "id": "http://hl7.org/fhir/json-schema/Patient", 
    "description": "see http://hl7.org/fhir/json.html#schema for information 
    about the FHIR Json Schemas", 
    "definitions": { 
    "Patient": { 

    "$ref": "#/definitions/Patient", 

    "allOf": [ 
    { 
     "$ref": "DomainResource#/definitions/DomainResource" 
    }, 

Cependant, je remarque que chaque schéma JSON défini à http://hl7.org/fhir/json.html est structuré de cette façon. Est-ce que l'erreur dans les schémas JSON HL7, ou dans la façon dont www.jsonschemavalidator.net analyse ces schémas JSON?

Ma compréhension de ref $, est que "ref $": "#/définitions/patient" se penche sur l'ID parent le plus proche pour le baseURL, qui dans ce cas est:

« hl7.org/fhir/json-schema/Patient ".

Cette URL doit servir www.hl7.org/fhir/Patient.schema.json, qui, à partir de l'élément racine, doit avoir un élément de schéma #/definitions/Patient qui correspond à l'élément courant dans lequel $ ref est défini . Donc, il semble que le placement correct de $ ref devrait en effet être à l'intérieur de #/definitions/Patient, pas dans la racine supérieure #/location, où l'arbitre est actuellement situé.

+0

voir la conversation connexe ici: https://gitter.im/ajv-validator/ajv?at=58f484c208c00c092a8a5787 - pas sûr que c'est le même problème si – esp

+0

Je ne lis pas le schéma json spec comme vous le faites. Je pense que les schémas sont corrects. Votre 'correction' aux schémas signifie que tout fichier json est valide –

+0

Je suis sur https://groups.google.com/forum/#!forum/json-schema. N'hésitez pas à vous y joindre –

Répondre

0

Les schémas sont valides. Je recommande un autre validateur en ligne qui gère correctement le mot-clé $ref. https://jsonschemalint.com est ma recommandation (même si elle utilise le terme "lint" incorrectement). Il est soutenu par AJV, donc vous pouvez être sûr que c'est fait correctement. Pour être juste envers www.jsonschemavalidator.net, il s'agit d'une utilisation très étrange de $ref. Ce n'est pas techniquement faux, mais c'est inhabituel. Ma recommandation à l'auteur du schéma serait d'intégrer ce niveau supérieur $ref. Il y aura une plus large gamme de validateurs qui le traiteront correctement.

Pour en revenir au problème de validation en ligne, même avec un bon validateur, cela ne fonctionnera pas. Si vous essayez le schéma patient avec https://jsonschemalint.com, vous obtenez l'erreur

ne peut pas résoudre la référence DomainResource #/définitions/DomainResource de id http://hl7.org/fhir/json-schema/Patient#

Le problème est que le schéma patient fait référence à un schéma dans un document différent que le validateur ne peut pas ou ne va pas chercher. Si vous résolvez le $ref par rapport au id, vous obtiendrez un URI pour le schéma dont vous avez besoin, mais je ne connais pas de validateurs en ligne qui le font. Selon la spécification JSON Schema, il ne s'agit pas d'un comportement sur lequel vous pouvez compter.

L'autre option est un validateur en ligne qui vous permet de spécifier plusieurs schémas. Mais, je n'ai pas vu celui qui a cette fonctionnalité.

Si la validation en ligne est si importante, vous devrez probablement configurer vous-même quelque chose spécifiquement pour valider ces schémas. C'est assez facile à faire. J'espère que vous allez même le rendre public afin que les autres puissent en bénéficier aussi.

+0

J'essaie d'utiliser le jsonschema avec AJV pour la validation des données postales, mais je reçois une erreur "Maximum call stack size exceed". Probablement à cause de l'auto-référencement. Il y a une solution pour résoudre ce problème? Merci – Pietro