{

"id": "occi-schema.json",
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "OCCI v1.2 JSON Rendering Schema",
"definitions": {
        "kinded_uri": {
                "id": "#kinded_uri",
                "type": "object",
                "required": ["location"],
                "additionalProperties": false,
                "properties": {
                        "location": { "type": "string" },
                        "kind": { "type": "string" }
                }
        },
        "attributes": {
                "id": "#attributes",
                "type": "object",
                "additionalProperties": {
                        "oneOf": [
                                { "type": "number" },
                                { "type": "boolean" },
                                { "type": "string" },
                                { "type": "object" },
                                { "type": "array" }
                        ]
                }
        },
        "attribute_definition": {
                "id": "#attribute_definition",
                "type": "object",
                "additionalProperties": false,
                "required": ["type", "mutable", "required"],
                "properties": {
                        "mutable": { "type": "boolean" },
                        "required": { "type": "boolean" },
                        "type": { "type": "string" },
                        "default": {
                                "oneOf": [
                                        { "type": "number" },
                                        { "type": "string" },
                                        { "type": "boolean" },
                                        { "type": "object" },
                                        { "type": "array" }
                                ]
                        },
                        "description": { "type": "string" },
                        "pattern": { "type": "string" }
                }
        },
        "attribute_definitions": {
                "id": "#attribute_definitions",
                "type": "object",
                "additionalProperties": false,
                "patternProperties": {
                        ".+": {
                                "$ref": "#/definitions/attribute_definition"
                        }
                }
        },
        "kind": {
                "id": "#kind",
                "type": "object",
                "required": ["term", "scheme", "location"],
                "additionalProperties": false,
                "properties": {
                        "term": { "type": "string" },
                        "scheme": { "type": "string" },
                        "title": { "type": "string" },
                        "attributes": { "$ref": "#/definitions/attribute_definitions" },
                        "actions": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/stringArray" },
                        "parent": { "type": "string" },
                        "location": { "type": "string" }
                }
        },
        "mixin": {
                "id": "#mixin",
                "type": "object",
                "required": ["term", "scheme", "location"],
                "additionalProperties": false,
                "properties": {
                        "term": { "type": "string" },
                        "scheme": { "type": "string" },
                        "title": { "type": "string" },
                        "attributes": { "$ref": "#/definitions/attribute_definitions" },
                        "actions": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/stringArray" },
                        "depends": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/stringArray" },
                        "applies": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/stringArray" },
                        "location": { "type": "string" }
                }
        },
        "action": {
                "id": "#action",
                "type": "object",
                "required": ["term", "scheme"],
                "additionalProperties": false,
                "properties": {
                        "term": { "type": "string" },
                        "scheme": { "type": "string" },
                        "title": { "type": "string" },
                        "attributes": { "$ref": "#/definitions/attribute_definitions" }
                }
        },
        "action_instance": {
                "id": "#action_instance",
                "type": "object",
                "required": ["action"],
                "additionalProperties": false,
                "properties": {
                        "action": { "type": "string" },
                        "attributes": { "$ref": "#/definitions/attributes" }
                }
        },
        "resource": {
                "id": "#resource",
                "type": "object",
                "required": ["kind", "id", "attributes"],
                "additionalProperties": false,
                "properties": {
                        "kind": { "type": "string" },
                        "mixins": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/stringArray" },
                        "attributes": { "$ref": "#/definitions/attributes" },
                        "actions": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/stringArray" },
                        "id": { "type": "string" },
                        "links": {
                                "type": "array",
                                "minItems": 1,
                                "items": {
                                        "$ref": "#/definitions/link"
                                }
                        },
                        "summary": { "type": "string" },
                        "title": { "type": "string" }
                }
        },
        "link": {
                "id": "#link",
                "type": "object",
                "required": ["kind", "id", "target", "source", "attributes"],
                "additionalProperties": false,
                "properties": {
                        "kind": { "type": "string" },
                        "mixins": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/stringArray" },
                        "attributes": { "$ref": "#/definitions/attributes" },
                        "actions": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/stringArray" },
                        "id": { "type": "string" },
                        "source": { "$ref": "#/definitions/kinded_uri" },
                        "target": { "$ref": "#/definitions/kinded_uri" },
                        "title": { "type": "string" }
                }
        },
        "resource_collection": {
                "id": "#resource_collection",
                "type": "object",
                "required": ["resources"],
                "additionalProperties": false,
                "properties": {
                        "resources": {
                                "type": "array",
                                "minItems": 1,
                                "items": {
                                        "$ref": "#/definitions/resource"
                                }
                        }
                }
        },
        "link_collection": {
                "id": "#link_collection",
                "type": "object",
                "required": ["links"],
                "additionalProperties": false,
                "properties": {
                        "links": {
                                "type": "array",
                                "minItems": 1,
                                "items": {
                                        "$ref": "#/definitions/link"
                                }
                        }
                }
        },
        "entity_collection": {
                "id": "#entity_collection",
                "type": "object",
                "additionalProperties": false,
                "properties": {
                        "resources": {
                                "type": "array",
                                "minItems": 1,
                                "items": {
                                        "$ref": "#/definitions/resource"
                                }
                        },
                        "links": {
                                "type": "array",
                                "minItems": 1,
                                "items": {
                                        "$ref": "#/definitions/link"
                                }
                        }
                }
        },
        "mixin_identifiers": {
                "id": "#mixin_identifiers",
                "type": "object",
                "required": ["mixins"],
                "additionalProperties": false,
                "properties": {
                        "mixins": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/stringArray" }
                }
        },
        "kind_identifiers": {
                "id": "#kind_identifiers",
                "type": "object",
                "required": ["kinds"],
                "additionalProperties": false,
                "properties": {
                        "kinds": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/stringArray" }
                }
        },
        "action_identifiers": {
                "id": "#action_identifiers",
                "type": "object",
                "required": ["actions"],
                "additionalProperties": false,
                "properties": {
                        "actions": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/stringArray" }
                }
        },
        "category_identifiers": {
                "id": "#category_identifiers",
                "type": "object",
                "additionalProperties": false,
                "properties": {
                        "mixins": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/stringArray" },
                        "kinds": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/stringArray" },
                        "actions": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/stringArray" }
                }
        },
        "model": {
                "id": "#model",
                "type": "object",
                "additionalProperties": false,
                "properties": {
                        "mixins": {
                                "type": "array",
                                "minItems": 1,
                                "items": {
                                        "$ref": "#/definitions/mixin"
                                }
                        },
                        "kinds": {
                                "type": "array",
                                "minItems": 1,
                                "items": {
                                        "$ref": "#/definitions/kind"
                                }
                        },
                        "actions": {
                                "type": "array",
                                "minItems": 1,
                                "items": {
                                        "$ref": "#/definitions/action"
                                }
                        }
                }
        }
}

}