web-dev-qa-db-fra.com

Comprendre le mot clé "additionalProperties" dans la version 4 du schéma JSON

Lien vers la spécification: http://json-schema.org/latest/json-schema-validation.html#anchor64

La section 5.4.4.2 stipule:

La validation réussie d'une instance d'objet par rapport à ces trois mots clés dépend de la valeur de "additionalProperties": si sa valeur est booléenne true ou un schéma, la validation réussit; ...

La section 5.4.4.3 stipule:

Si "additionalProperties" est absent, il peut être considéré comme présent avec un schéma vide comme valeur.

Ok, donc si "additionalProperties" est absent, il compte comme étant présent avec un schéma vide. Et s'il s'agit d'un schéma (de toute nature), l'objet est validé avec succès, indépendamment de toute autre considération.

Mais cela est contredit par l'affirmation de la section 5.4.4.5, "Exemple", selon laquelle l'instance donnée ne parvient pas à valider par rapport au schéma donné (qui ne spécifie rien pour "additionalProperties").

Quelqu'un peut-il expliquer où et de quelle manière j'interprète mal la spécification?

26
Hammerite

Vous avez trouvé une erreur dans la spécification, donc vous n'interprétez pas réellement quelque chose.

Il existe une version mise à jour (à partir de deux jours plus tard) du projet Internet sur le site Web de l'IETF, où cet exemple est différent.

voir: http://tools.ietf.org/html/draft-fge-json-schema-validation-00#page-1

Comme le document est un brouillon Internet, la version sur http://datatracker.ietf.org/ est probablement la version correcte.

Statut de ce mémo

Ce projet Internet est soumis en pleine conformité avec le
dispositions des BCP 78 et BCP 79.

Internet-Drafts sont des documents de travail de Internet Engineering
Groupe de travail (IETF)
. Notez que d'autres groupes peuvent également distribuer
documents de travail en tant que brouillons Internet. La liste des sites Internet actuels
Brouillons est à http://datatracker.ietf.org/drafts/current/ .

Internet-Drafts sont des documents de travail de l'Internet Engineering
Groupe de travail (IETF).

De plus, les deux versions ont des dates et des dates d'expiration différentes:

  • version que vous liez - écrite: 30 janvier 2013 et expire: 3 août 2013 .
  • version sur ietf - écrite le: 1er février 2013 et expire: 5 août 2013

Sur la version IETF:

Ce schéma sera utilisé comme exemple:

   {
       "properties": {
           "p1": {}
       },
       "patternProperties": {
           "p": {},
           "[0-9]": {}
       },
       "additionalProperties": false

C'est l'instance pour valider:

{"p1": true, "p2": null, "a32 & o": "foobar", "": [], "fiddle": 42, "Apple": "pie"}

Les trois jeux de propriétés sont:

   s  [ "p1", "p2", "a32&o", "", "fiddle", "Apple" ]

   p  [ "p1" ]

   pp [ "p", "[0-9]" ]

Appliquer les deux étapes de l'algorithme:

      after the first step, "p1" is removed from "s";

      after the second step, "p2" (matched by "p"), "a32&o" (matched by
      "[0-9]") and "Apple" (matched by "p") are removed from "s".

L'ensemble "s" contient toujours deux éléments, "" et "violon". La validation échoue donc.

32