{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "properties": {
        "amountOfFeatures": {
            "description": "amount of features",
            "type": "integer"
        },
        "amountOfContexts": {
            "description": "amount of contexts",
            "type": "integer"
        },
        "attributesPerFeature": {
            "description": "list stating the number of attributes for array. The order of the features matter.",
            "type": "array",
            "items": {
                "type": "integer"
            }
        },
        "attributeDomains": {
            "description": "list stating the domains of the attributes. Attributes are listed accodring to the feature order and then their attribute number.",
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "min": {
                        "description": "minimal value that the attribute can take",
                        "type": "integer"
                    },
                    "max": {
                        "description": "maximal value that the attribute can take",
                        "type": "integer"
                    }
                },
                "additionalProperties": false
            }
        },
        "contextDomains": {
            "description": "list stating the domains of the context. The order matters.",
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "min": {
                        "description": "minimal value that the context can take",
                        "type": "integer"
                    },
                    "max": {
                        "description": "maximal value that the context can take",
                        "type": "integer"
                    }
                },
                "additionalProperties": false
            }
        },
        "configuration": {
            "description": "Inital configuration and context infomration",
            "type": "object",
            "properties": {
                "selectedFeatures": {
                    "description": "list representing wich features are selected",
                    "type": "array",
                    "items": {
                        "type": "integer"
                    }
                },
                "attributeValues": {
                    "description": "list representing the intial values of the attributes. The values of the attributes of non selected features are set to the maximum.",
                    "type": "array",
                    "items": {
                        "type": "integer"
                    }
                },
                "contextValues": {
                    "description": "list representing the contextual values",
                    "type": "array",
                    "items": {
                        "type": "integer"
                    }
                }
            },
            "additionalProperties": false
        },
        "constraints": {
            "description": "constraint derived from the FM. Their grammar is defined in SpecificationGrammar.g4",
            "type": "array",
            "items": {
                "type": "string"
            }
        },
        "preferences": {
            "description": "preferences derived from the user. Their grammar is defined in SpecificationGrammar.g4",
            "type": "array",
            "items": {
                "type": "string"
            }
        }
    },
    "additionalProperties": false,
    "required": [
        "amountOfFeatures",
        "amountOfContexts",
        "attributesPerFeature",
        "attributeDomains",
        "contextDomains",
        "configuration",
        "constraints",
        "preferences"
    ]
}