{
    "$id": "../observables/software.json",
    "$schema": "http://json-schema.org/draft-06/schema#",
    "title": "software",
    "description": "The Software Object represents high-level properties associated with software, including software products.",
    "type": "object",
    "allOf": [
        {
            "$ref": "../common/cyber-observable-core.json"
        },
        {
            "properties": {
                "type": {
                    "type": "string",
                    "description": "The value of this property MUST be `software`.",
                    "const": "software"
                },
                "name": {
                    "type": "string",
                    "description": "Specifies the name of the software."
                },
                "cpe": {
                    "type": "string",
                    "pattern": "cpe:2\\.3:[aho](?::(?:[a-zA-Z0-9!\"#$%&'()*+,\\\\-_./;<=>?@\\[\\]^`{|}~]|\\:)+){10}$",
                    "description": "Specifies the Common Platform Enumeration (CPE) entry for the software, if available. The value for this property MUST be a CPE v2.3 entry from the official NVD CPE Dictionary."
                },
                "languages": {
                    "type": "array",
                    "description": "Specifies the languages supported by the software. The value of each list member MUST be an ISO 639-2 language code.",
                    "items": {
                        "type": "string",
                        "pattern": "^[a-z]{3}$"
                    },
                    "minItems": 1
                },
                "vendor": {
                    "type": "string",
                    "description": "Specifies the name of the vendor of the software."
                },
                "version": {
                    "type": "string",
                    "description": "Specifies the version of the software."
                }
            }
        }
    ],
    "required": [
        "name"
    ]
}