{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://performance-explorer.local/static/schema-programme.json",
  "title": "Programme d'un concert — le schéma d'une page (performance-explorer)",
  "description": "Un concert publié par un lieu : date, salle, interprètes, œuvres. Les identifiants sont facultatifs ; l'explorateur aligne le reste. Publié en CC BY 4.0 avec le lieu comme source. Ni prix ni billetterie ne sont repris.",
  "type": "object",
  "required": ["lieu", "date"],
  "anyOf": [{"required": ["oeuvres"]}, {"required": ["interpretes"]}, {"required": ["titre"]}],
  "properties": {
    "lieu": {
      "type": "object", "required": ["nom"],
      "properties": {
        "nom": {"type": "string", "minLength": 2, "maxLength": 200, "description": "Salle, tel qu'affiché"},
        "siret": {"type": "string", "pattern": "^[0-9]{14}$", "description": "SIRET de l'établissement (France)"},
        "id": {"type": "string", "maxLength": 80, "description": "Identifiant du lieu dans l'explorateur (venue/{id})"}
      }
    },
    "date": {"type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2})?([+-]\\d{2}:?\\d{2}|Z)?)?$", "description": "ISO 8601, heure facultative"},
    "titre": {"type": "string", "maxLength": 300},
    "interpretes": {"type": "array", "maxItems": 60, "items": {
      "type": "object", "required": ["nom"],
      "properties": {"nom": {"type": "string", "minLength": 2, "maxLength": 200}, "role": {"type": "string", "maxLength": 80},
                     "isni": {"type": "string", "pattern": "^[0-9 ]{15,19}[0-9X]$"}}}},
    "oeuvres": {"type": "array", "maxItems": 60, "items": {
      "type": "object", "required": ["titre"],
      "properties": {"compositeur": {"type": "string", "maxLength": 200}, "titre": {"type": "string", "minLength": 1, "maxLength": 300},
                     "catalogue": {"type": "string", "maxLength": 60},
                     "id": {"type": "object", "properties": {"bnf": {"type": "string"}, "wikidata": {"type": "string", "pattern": "^Q[0-9]+$"},
                                                           "doremus": {"type": "string"}}}}}},
    "billetterie": {"description": "Accepté et ignoré : aucune donnée de billetterie n'est reprise"},
    "licence": {"type": "string", "enum": ["CC-BY-4.0", "CC0-1.0", "etalab-2.0"], "default": "CC-BY-4.0"}
  }
}
