2017-10-10 6 views
0

J'utilise JSON Schema pour valider des données.

Je pense que je peux avoir une erreur sur mon schéma en utilisant les mots-clés réservés $ id. L'intention de ce champ était de désigner l'ID REMOTE de la propriété sur une autre plate-forme. C'était donc "l'identifiant d'origine".

Pouvez-vous s'il vous plaît conseillerons $ id est et si je l'ai fait une erreur critique et cette valeur l'évolution des besoins. Parce que dans la documentation j'ai trouvé cette définition:

Si présent, la valeur de ce mot clé DOIT être une chaîne, et DOIT représenter une référence URI valide [RFC3986]. Cette valeur DEVRAIT être normalisée, et NE DEVRAIT PAS être un fragment vide < #> ou une chaîne vide <>.

Répondre

1

$ id est un mot-clé réservé.

Il sert à:

  • Déclarant un identifiant pour le schéma ou subschema
  • Déclarant une URL de base contre laquelle $ URL ref sont résolus

Vous pouvez identifier un schéma, ou une partie de votre schéma (un sous-schéma) en utilisant $ id, et vous pouvez ensuite le réutiliser ailleurs en utilisant le mot clé $ ref. La façon la plus simple de voir cela est que $ ref serait remplacé par le schéma avec l'identifiant correspondant.

1

Depuis $ id change l'URI de base de votre schéma, toutes les valeurs ref de $ dans ce même schéma ou l'un de ses sous-schémas seront résolus différemment.

Par exemple, si votre URI de base était "https://example.com/thing" et vous avez eu ce schéma

{ 
    "allOf": [ 
     {"$ref": "foo"}, 
     { 
      "$id": "stuff/and/nonsense", 
      "allOf": {"$ref": "bar"} 
     } 
    ] 
} 

alors le "ref $" à "foo" décide de "https://example.com/foo". Mais le "$ ref" à "bar" se résout à "https://example.com/stuff/and/bar"

Donc tout ce que vous mettez dans "$ id" dans un autre but, il est susceptible de causer des problèmes, en particulier avec "$ ref" résolution.