{

"$schema": "http://json-schema.org/draft-04/schema#",
"definitions": {},
"type": "object",
"properties": {
  "_id": {"type": "number"},
  "preference": {
    "type": "array",
    "items": {
      "type": "object",
      "properties": {
        "rule": {
          "type": "object",
          "properties": {
            "purpose": {
              "type": "object",
              "properties": {
                "permitted": {
                  "type": "array",
                  "items": {"type": "string"},
                  "uniqueItems": true,
                  "default": []
                },
                "excluded": {
                  "type": "array",
                  "items": {"type": "string"},
                  "uniqueItems": true,
                  "default": []
                }
              },
              "required": ["permitted", "excluded"],
              "minProperties": 2,
              "maxProperties": 2,
              "additionalProperties": false
            },
            "utilizer": {
              "type": "object",
              "properties": {
                "permitted": {
                  "type": "array",
                  "items": {"type": "string"},
                  "uniqueItems": true,
                  "default": []
                },
                "excluded": {
                  "type": "array",
                  "items": {"type": "string"},
                  "uniqueItems": true,
                  "default": []
                }
              },
              "required": ["permitted", "excluded"],
              "minProperties": 2,
              "maxProperties": 2,
              "additionalProperties": false
            },
            "transformation": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "attribute": {"type": "string"},
                  "tr_func": {
                    "type": "string",
                    "default": ""
                  }
                },
                "dependencies": {
                  "attribute": ["tr_func"],
                  "tr_func": ["attribute"]
                },
                "minProperties": 2,
                "maxProperties": 2,
                "additionalProperties": false
              },
              "uniqueItems": true,
              "default": []
            },
            "valid_from": {
              "type": "string",
              "format": "date-time"
            },
            "exp_date": {
              "type": "string",
              "format": "date-time",
              "default": "0000-00-00T00:00:00.00Z"
            }
          },
          "required": ["purpose", "utilizer", "transformation", "valid_from", "exp_date"],
          "minProperties": 5,
          "maxProperties": 5,
          "additionalProperties": false
        }
      }
    },
    "uniqueItems": true,
    "minItems": 1
  }
}

}