{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "additionalProperties": false,
    "properties": {
        "copying": {
            "additionalProperties": false,
            "description": "Information on licensing and copyright.",
            "properties": {
                "authors": {
                    "description": "List of the people who wrote the JSON, not the equation itself.",
                    "items": {
                        "description": "Full name of person.",
                        "type": "string"
                    },
                    "type": "array"
                },
                "license-name": {
                    "description": "Usually a free software license, such as GPL, BSD, or MIT.",
                    "type": "string"
                },
                "license-url": {
                    "description": "Link to the text of the license, usually HTTP.",
                    "format": "uri",
                    "type": "string"
                },
                "year": {
                    "description": "Year the JSON was first written.",
                    "type": "integer"
                }
            },
            "required": [
                "authors",
                "license-name",
                "year"
            ],
            "type": "object"
        },
        "description": {
            "additionalProperties": false,
            "description": "Textual description of the equation.",
            "properties": {
                "terse": {
                    "description": "Description text that is 80 characters or less.",
                    "maxLength": 80,
                    "type": "string"
                },
                "verbose": {
                    "description": "The full text of the description. Don't add hard linebreaks; let the output formatter decide how to do that. Required field.",
                    "type": "string"
                }
            },
            "required": [
                "verbose"
            ],
            "type": "object"
        },
        "markup-languages": {
            "additionalProperties": {
                "additionalItems": false,
                "description": "List of representations for a particular markup language, such as LaTeX.",
                "items": {
                    "additionalProperties": false,
                    "properties": {
                        "dependencies": {
                            "additionalItems": false,
                            "description": "Dependencies for the markup to work, such as LaTeX packages.",
                            "items": {
                                "additionalProperties": false,
                                "description": "Dependency object.",
                                "properties": {
                                    "invocation": {
                                        "description": "How include the dependency, e.g. a '\\usepackage{}' statement.",
                                        "type": "string"
                                    },
                                    "name": {
                                        "description": "Name of dependency.",
                                        "type": "string"
                                    },
                                    "url": {
                                        "description": "URL providing info about dependency, usually HTTP.",
                                        "format": "uri",
                                        "type": "string"
                                    }
                                },
                                "type": "object"
                            },
                            "type": "array"
                        },
                        "markup": {
                            "description": "The markup text for the equation.",
                            "type": "string"
                        },
                        "urls": {
                            "additionalItems": false,
                            "description": "Links to the markup text.",
                            "items": {
                                "description": "Actual URL, usually HTTP.",
                                "format": "uri",
                                "type": "string"
                            },
                            "type": "array"
                        }
                    },
                    "required": [
                        "markup"
                    ],
                    "type": "object"
                },
                "type": "array"
            },
            "description": "Representation of the equation in various markup languages.",
            "type": "object"
        },
        "related-equations": {
            "description": "UUIDs of other equations that are related to this one.",
            "items": {
                "additionalProperties": false,
                "properties": {
                    "uuid": {
                        "description": "Universally unique identifier of related command.",
                        "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
                        "type": "string"
                    }
                },
                "required": [
                    "uuid"
                ],
                "type": "object"
            },
            "type": "array"
        },
        "relevant-urls": {
            "description": "List of URLs that discuss the equation and its properties.",
            "items": {
                "additionalProperties": false,
                "minItems": 1,
                "properties": {
                    "date-known-good": {
                        "description": "Date when the link to the page worked. Useful if the page changes or link is broken and searching for an archival copy.",
                        "format": "date",
                        "type": "string"
                    },
                    "url": {
                        "format": "uri",
                        "type": "string"
                    }
                },
                "required": [
                    "url"
                ],
                "type": "object"
            },
            "type": "array"
        },
        "unicode-pretty-print": {
            "additionalProperties": false,
            "description": "Human-readable representation of the equations with Unicode text.",
            "properties": {
                "multiline": {
                    "additionalItems": false,
                    "description": "An array of strings that show the equation two-dimensionally. Uses an array instead of a multiline string for portability reasons.",
                    "items": {
                        "description": "Horizontal slice of the equation.",
                        "type": "string"
                    },
                    "minItems": 1,
                    "type": "array"
                },
                "terms": {
                    "description": "Descriptions and properties of the constants, variables, functions, and other components of the equation. Must be an array to preserve order.",
                    "items": {
                        "additionalProperties": false,
                        "description": "The term object.",
                        "properties": {
                            "classification": {
                                "additionalProperties": false,
                                "description": "Mathematical classification and properties of the quantity represented by this symbol.",
                                "properties": {
                                    "always-an-integer": {
                                        "description": "True if the symbol represents a quantity must be an integer or subset thereof such as a natural number.",
                                        "type": "boolean"
                                    },
                                    "always-dimensionless": {
                                        "description": "True if the symbol represents a quantity is always dimensionless, such as radians or degrees.",
                                        "type": "boolean"
                                    },
                                    "always-positive": {
                                        "description": "True if the symbol represents a quantity that is always positive.",
                                        "type": "boolean"
                                    },
                                    "always-scalar": {
                                        "description": "True if the symbol represents a scalar in this expression, i.e. not a vector, tensor, or other multi-value quantity.",
                                        "type": "boolean"
                                    },
                                    "bound-variable": {
                                        "description": "True if the symbol represents a bound variable, such as an index in an infinite series or a variable of integration in a definite integral.",
                                        "type": "boolean"
                                    },
                                    "fixed-constant": {
                                        "description": "True if the symbol represents a fixed numeric value, such as \u03c0, \u221a2, or the speed of light.",
                                        "type": "boolean"
                                    },
                                    "linear-operator": {
                                        "description": "True if the symbol represents a linear operator for two vector spaces.",
                                        "type": "boolean"
                                    },
                                    "special-function": {
                                        "description": "True if the symbol represents a known function with a fixed definition.",
                                        "type": "boolean"
                                    }
                                },
                                "type": "object"
                            },
                            "example-values": {
                                "description": "Examples of values the term may take on.",
                                "items": {
                                    "additionalProperties": false,
                                    "description": "The value object.",
                                    "properties": {
                                        "comment": {
                                            "description": "Explain choice of value.",
                                            "type": "string"
                                        },
                                        "doi": {
                                            "description": "Digital object identifier for values from a published journal article.",
                                            "type": "string"
                                        },
                                        "units": {
                                            "description": "Units as used in the original reference.",
                                            "type": "string"
                                        },
                                        "value": {
                                            "description": "The actual value.",
                                            "type": [
                                                "number",
                                                "boolean"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "value"
                                    ],
                                    "type": "object"
                                },
                                "type": "array"
                            },
                            "label": {
                                "description": "Short description of the quantity, suitable for an 'where x is the ...' type statement.",
                                "type": "string"
                            },
                            "symbol": {
                                "description": "The symbol for the quantity.",
                                "type": "string"
                            },
                            "urls": {
                                "additionalItems": false,
                                "description": "List of URLs directly about the quantity.",
                                "items": {
                                    "description": "The URL, usually HTTP.",
                                    "format": "uri",
                                    "type": "string"
                                },
                                "type": "array"
                            }
                        },
                        "required": [
                            "label",
                            "symbol"
                        ],
                        "type": "object"
                    },
                    "minItems": 1,
                    "type": "array"
                }
            },
            "required": [
                "multiline"
            ],
            "type": "object"
        },
        "uuid": {
            "description": "Universally Unique Identifier for this equation.",
            "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
            "type": "string"
        }
    },
    "required": [
        "description",
        "unicode-pretty-print",
        "uuid"
    ],
    "type": "object"
}