JSON-Schema: "allof" mit "additionalProperties"

Angenommen, wir haben folgenden schema schema (aus tutorial hier):

{
  "$schema": "http://json-schema.org/draft-04/schema#",

  "definitions": {
    "address": {
      "type": "object",
      "properties": {
        "street_address": { "type": "string" },
        "city":           { "type": "string" },
        "state":          { "type": "string" }
      },
      "required": ["street_address", "city", "state"]
    }
  },

  "type": "object",

  "properties": {
    "billing_address": { "$ref": "#/definitions/address" },
    "shipping_address": {
      "allOf": [
        { "$ref": "#/definitions/address" },
        { "properties":
          { "type": { "enum": [ "residential", "business" ] } },
          "required": ["type"]
        }
      ]
    } 

  }
}

Ist hier und gültige Instanz:

{
      "shipping_address": {
        "street_address": "1600 Pennsylvania Avenue NW",
        "city": "Washington",
        "state": "DC",
        "type": "business"
      }
}

Ich brauche, um sicherzustellen, dass jede zusätzliche Felder für shipping_address ungültig. Ich weiß, für diesen Zweck existiert additionalProperties die sollte auf "false" gesetzt. Aber wenn ich die Einstellung "additionalProprties":false wie im folgenden:

"shipping_address": {
          "allOf": [
            { "$ref": "#/definitions/address" },
            { "properties":
              { "type": { "enum": [ "residential", "business" ] } },
              "required": ["type"]
            }
          ],
          "additionalProperties":false
        } 

Bekomme ich einen Fehler bei der überprüfung (geprüft hier):

[ {
  "level" : "error",
  "schema" : {
    "loadingURI" : "#",
    "pointer" : "/properties/shipping_address"
  },
  "instance" : {
    "pointer" : "/shipping_address"
  },
  "domain" : "validation",
  "keyword" : "additionalProperties",
  "message" : "additional properties are not allowed",
  "unwanted" : [ "city", "state", "street_address", "type" ]
} ] 

Die Frage ist: wie soll ich mich einschränken Felder für die shipping_address Teil nur? Vielen Dank im Voraus.

InformationsquelleAutor der Frage lm. | 2014-03-27

Schreibe einen Kommentar