{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://doc.dezrann.net/schemas/corpus.schema.json",
  "title": "Dezrann Corpus",
  "description": "Schema for Dezrann corpus.json files",
  "type": "object",
  "required": ["corpus", "pieces"],
  "properties": {
    "corpus": {
      "type": "object",
      "required": ["id", "title"],
      "properties": {
        "id": {"type": "string", "description": "Unique corpus identifier"},
        "title": {"type": "string", "description": "Corpus title"},
        "shorttitle": {"type": "string", "description": "Short title (< 25 characters)"},
        "motto": {"type": "string", "description": "Short advertising text (< 120 characters)"},
        "image": {"type": "string", "format": "uri", "description": "Illustration image URL"},
        "image:card": {"type": "string", "format": "uri", "description": "Card image URL"},
        "text": {"type": "string", "description": "Corpus description (3-6 lines)"},
        "availability": {"type": "string", "description": "Available content description"},
        "status": {"type": "string", "description": "Technical status message"},
        "opus": {"type": "string", "description": "Catalogue or opus number"},
        "genre": {"type": "string", "description": "Musical genre"},
        "year": {"type": ["string", "integer"], "description": "Year or year range"},
        "showcase": {
          "type": "array",
          "items": {"type": "string"},
          "minItems": 1,
          "maxItems": 4,
          "description": "List of 1-4 piece IDs to showcase"
        },
        "quality:corpus": {"type": "integer", "minimum": 1, "maximum": 5},
        "quality:corpus:metadata": {"type": "integer", "minimum": 1, "maximum": 5}
      },
      "allOf": [{"$ref": "https://doc.dezrann.net/schemas/metadata.schema.json"}],
      "patternProperties": {
        "^(shorttitle|motto|text|availability|title):[a-z]{2}(-[A-Z]{2})?$": {"type": "string"}
      }
    },
    "pieces": {
      "type": "object",
      "patternProperties": {
        "^[a-zA-Z0-9_-]+$": {"$ref": "https://doc.dezrann.net/schemas/piece.schema.json"}
      },
      "minProperties": 1
    },
    "settings": {"type": "object", "additionalProperties": true},
    "template": {"type": "object", "additionalProperties": true}
  },
  "additionalProperties": false
}
