{
    "$id": "dictionaryIndex",
    "$schema": "http://json-schema.org/draft-07/schema#",
    "definitions": {
        "isoLanguageCode": {
            "type": "string",
            "description": "ISO language code (ISO 639-1 where possible, ISO 639-3 otherwise).",
            "pattern": "^[a-z]{2,3}$"
        }
    },
    "type": "object",
    "description": "Index file containing information about the data contained in the dictionary.",
    "required": [
        "title",
        "revision"
    ],
    "properties": {
        "title": {
            "type": "string",
            "description": "Title of the dictionary."
        },
        "revision": {
            "type": "string",
            "description": "Revision of the dictionary. This value is displayed, and used to check for dictionary updates."
        },
        "minimumYomitanVersion": {
            "type": "string",
            "description": "Minimum version of Yomitan that is compatible with this dictionary."
        },
        "sequenced": {
            "type": "boolean",
            "default": false,
            "description": "Whether or not this dictionary contains sequencing information for related terms."
        },
        "format": {
            "type": "integer",
            "description": "Format of data found in the JSON data files.",
            "enum": [1, 2, 3]
        },
        "version": {
            "type": "integer",
            "description": "Alias for format.",
            "enum": [1, 2, 3]
        },
        "author": {
            "type": "string",
            "description": "Creator of the dictionary."
        },
        "isUpdatable": {
            "type": "boolean",
            "const": true,
            "description": "Whether this dictionary contains links to its latest version."
        },
        "indexUrl": {
            "type": "string",
            "description": "URL for the index file of the latest revision of the dictionary, used to check for updates."
        },
        "downloadUrl": {
            "type": "string",
            "description": "URL for the download of the latest revision of the dictionary."
        },
        "url": {
            "type": "string",
            "description": "URL for the source of the dictionary, displayed in the dictionary details."
        },
        "description": {
            "type": "string",
            "description": "Description of the dictionary data."
        },
        "attribution": {
            "type": "string",
            "description": "Attribution information for the dictionary data."
        },
        "sourceLanguage": {
            "$ref": "#/definitions/isoLanguageCode",
            "description": "Language of the terms in the dictionary."
        },
        "targetLanguage": {
            "$ref": "#/definitions/isoLanguageCode",
            "description": "Main language of the definitions in the dictionary."
        },
        "frequencyMode": {
            "type": "string",
            "enum": ["occurrence-based", "rank-based"]
        },
        "tagMeta": {
            "type": "object",
            "description": "Tag information for terms and kanji. This object is obsolete and individual tag files should be used instead.",
            "additionalProperties": {
                "type": "object",
                "description": "Information about a single tag. The object key is the name of the tag.",
                "properties": {
                    "category": {
                        "type": "string",
                        "description": "Category for the tag."
                    },
                    "order": {
                        "type": "number",
                        "description": "Sorting order for the tag."
                    },
                    "notes": {
                        "type": "string",
                        "description": "Notes for the tag."
                    },
                    "score": {
                        "type": "number",
                        "description": "Score used to determine popularity. Negative values are more rare and positive values are more frequent. This score is also used to sort search results."
                    }
                },
                "additionalProperties": false
            }
        }
    },
    "anyOf": [
        {
            "required": ["format"]
        },
        {
            "required": ["version"]
        }
    ],
    "dependencies": {
        "isUpdatable": ["indexUrl", "downloadUrl"]
    }
}
