2013-05-09 12 views
20

Link do specyfikacji: http://json-schema.org/latest/json-schema-validation.html#anchor64Zrozumienie „additionalProperties” słowo kluczowe w projekcie schematu JSON wersji 4

sekcji 5.4.4.2 stany:

Udana walidacja instancji obiektu z tych trzech słów kluczowych zależy od wartość "additionalProperties": jeśli ma wartość boolean true lub schema, sprawdzanie poprawności się powiedzie; ...

Sekcja 5.4.4.3 stany:

Jeśli "additionalProperties" jest nieobecny, może być uznane za obecne z pustym schemacie jako wartość.

OK, więc jeśli "additionalProperties" jest nieobecny, liczy się jako obecny z pustym schematem. A jeśli jest to schemat (dowolnego rodzaju), to obiekt sprawdza poprawność bez względu na inne rozważania.

Ale jest to sprzeczne z twierdzeniem w sekcji 5.4.4.5, "Przykład", że dana instancja nie sprawdza poprawności względem podanego schematu (który nie określa niczego dla "dodatkowych właściwości").

Czy ktoś może wyjaśnić, w jaki sposób iw jaki sposób błędnie interpretuję specyfikację?

+0

Nadzieję, że pomogło. Dzięki! –

Odpowiedz

25

Znalazłeś błąd w specyfikacji, więc w rzeczywistości coś nieinterpretuje.

Istnieje zaktualizowana wersja (od dwóch dni później) projektu internetowego na stronie internetowej IETF, gdzie ten przykład jest inny.

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

Gdy dokument jest projekt internetu, najprawdopodobniej na http://datatracker.ietf.org/ wersja jest poprawna wersja.

status tego Memo

Ta Internet-Draft jest składany w pełnej zgodności z przepisami
BCP 78 i BCP 79.

Internet-Robocze dokumenty są roboczymi Siła zadaniowa (IETF) . Zauważ, że inne grupy mogą również rozpowszechniać dokumenty robocze jako projekty internetowe. Lista bieżących Internet-
Robocze jest na http://datatracker.ietf.org/drafts/current/.

Projekty internetowe są dokumentami roboczymi inżynierii internetowej
Task Force (IETF).

Dodatkowo, obie wersje mają różne daty i daty wygaśnięcia:

  • wersję Ci link - napisane: 30 stycznia 2013 i Wygasa: 03 sierpień 2013.
  • wersja na IETF - napisany: 1 lutego 2013 i Wygasa: 5 sierpnia 2013

Na IETF wersji:

Schemat ten będzie używany jako przykład :

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

jest to przykład w celu sprawdzenia poprawności:

{ "P1" true, "P2": zerowa, "A32 & O" "foobar" "": [] "bawić": 42, "oczko": „pie "}

trzy zestawy nieruchomości są:

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

    p [ "p1" ] 

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

Stosując dwa kroki algorytmu:

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

Zestaw "s" nadal zawiera dwa elementy "" i "skrzypce". Walidacja dlatego zawodzi.