{

"$schema": "http://json-schema.org/draft-04/schema#",
"title": "VRT to Remediation Advice",
"description": "Mapping from the Vulnerability Rating Taxonomy to Remediation Advice",
"definitions": {
  "MappingMetadata": {
    "type": "object",
    "properties": {
      "default": { "type": "null" },
      "keys": { "type": "array",
        "items": { "type": "string", "enum": ["remediation_advice", "references"] },
        "minItems": 2,
        "uniqueItems": true
      }
    },
    "required": ["default", "keys"]
  },
  "VRTid": { "type": "string", "pattern": "^[a-z_][a-z_0-9]*$" },
  "RemediationAdvice": { "type": "string" },
  "References": { "type" : "array",
    "items" : { "type": "string", "pattern": "^http[s]?:\/\/.*$" },
    "minItems": 1,
    "uniqueItems": true
  },
  "Mapping": {
    "type": "object",
    "properties": {
      "id": { "$ref": "#/definitions/VRTid" },
      "remediation_advice" : { "$ref": "#/definitions/RemediationAdvice" },
      "references" : { "$ref": "#/definitions/References" }
    },
    "required": ["id"],
    "anyOf": [
      { "required": ["remediation_advice"] },
      { "required": ["references"] }
    ],
    "additionalProperties": false
  },
  "MappingParent": {
    "type": "object",
    "properties": {
      "id": { "$ref": "#/definitions/VRTid" },
      "children": {
        "type": "array",
        "items" : {
          "anyOf": [
            { "$ref": "#/definitions/MappingParent" },
            { "$ref": "#/definitions/Mapping" }
          ]
        }
      },
      "remediation_advice" : { "$ref": "#/definitions/RemediationAdvice" },
      "references" : { "$ref": "#/definitions/References" }
    },
    "required": ["id", "children"],
    "additionalProperties": false
  }
},
"type": "object",
"required": ["metadata", "content"],
"properties": {
  "metadata": {
    "$ref": "#/definitions/MappingMetadata"
  },
  "content": {
    "type": "array",
    "items" : {
      "anyOf": [
        { "$ref": "#/definitions/MappingParent" },
        { "$ref": "#/definitions/Mapping" }
      ]
    }
  }
}

}