Понимание ключевого слова additionalProperties в версии 4 проекта схемы JSON

Ссылка на спецификацию: http://json-schema.org/latest/json-schema-validation.html#anchor64

В разделе 5.4.4.2 говорится:

Успешная проверка экземпляра объекта по этим трем ключевым словам зависит от значения «additionalProperties»: если его значение является логическим true или схемой, проверка завершается успешно; ...

В разделе 5.4.4.3 говорится:

Если «additionalProperties» отсутствует, он может считаться присутствующим с пустой схемой в качестве значения.

Итак, если "additionalProperties" отсутствует, он считается присутствующим с пустой схемой. А если это схема (любого типа), то объект успешно проходит проверку независимо от других соображений.

Но это противоречит утверждению в разделе 5.4.4.5, «Пример», что данный экземпляр не проходит проверку на соответствие данной схеме (которая ничего не определяет для «additionalProperties»).

Может кто-нибудь объяснить, где и как я неверно истолковываю спецификацию?


person Hammerite    schedule 09.05.2013    source источник
comment
Надеюсь, это помогло. Спасибо!   -  person Menelaos    schedule 01.07.2013


Ответы (1)


Вы нашли ошибку в спецификации, значит, вы на самом деле что-то не неверно истолковали.

На веб-сайте IETF есть обновленная версия (выпущенная двумя днями позже) интернет-проекта, где этот пример отличается.

см. http://tools.ietf.org/html/draft-fge-json-schema-validation-00#page-13

Поскольку документ представляет собой Интернет-черновик, скорее всего, версия на http://datatracker.ietf.org/ является правильной.

Статус этой памятки

Этот Интернет-проект представлен в полном соответствии с положениями BCP 78 и BCP 79.

Интернет-проекты являются рабочими документами Целевой группы инженеров Интернета (IETF). Обратите внимание, что другие группы также могут распространять рабочие документы
как Интернет-проекты. Список текущих Интернет-проектов находится на http://datatracker.ietf.org/drafts/current/.

Интернет-проекты являются рабочими документами Целевой группы инженеров Интернета (IETF).

Кроме того, две версии имеют разные даты и срок годности:

  • версия, на которую вы ссылаетесь, написано: 30 января 2013 г. и истекает: 3 августа 2013 г..
  • версия на ietf - написано: 1 февраля 2013 г. и истекает: 5 августа 2013 г.

В версии IETF:

Эта схема будет использоваться в качестве примера:

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

Это экземпляр для проверки:

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

Три набора свойств:

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

   p  [ "p1" ]

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

Применяя два шага алгоритма:

      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".

Набор «s» по-прежнему содержит два элемента: «» и «скрипка». Таким образом, проверка не выполняется.

person Menelaos    schedule 27.06.2013