{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://drole.com/data/observatoire-humour-schema.json",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "$schema",
    "@type",
    "@id",
    "name",
    "version",
    "review_date",
    "scope",
    "method",
    "total",
    "by_type",
    "by_origin",
    "by_audience",
    "by_difficulty",
    "by_format",
    "by_mechanism",
    "type_by_difficulty",
    "type_by_audience",
    "origin_by_type",
    "word_count_by_type",
    "answer_coverage_by_type",
    "answer_coverage",
    "explanation_coverage",
    "direct_source_coverage",
    "word_count",
    "explanation_word_count",
    "top_tags",
    "limitations",
    "citation"
  ],
  "properties": {
    "$schema": {
      "const": "https://drole.com/data/observatoire-humour-schema.json"
    },
    "@type": {
      "const": "Dataset"
    },
    "@id": {
      "type": "string",
      "format": "uri"
    },
    "name": {
      "type": "string"
    },
    "version": {
      "type": "string"
    },
    "review_date": {
      "type": "string",
      "format": "date"
    },
    "scope": {
      "type": "string",
      "minLength": 50
    },
    "method": {
      "type": "string",
      "minLength": 50
    },
    "total": {
      "type": "integer",
      "minimum": 1
    },
    "by_type": {
      "type": "object",
      "minProperties": 1,
      "additionalProperties": {
        "type": "integer",
        "minimum": 0
      }
    },
    "by_origin": {
      "type": "object",
      "minProperties": 1,
      "additionalProperties": {
        "type": "integer",
        "minimum": 0
      }
    },
    "by_audience": {
      "type": "object",
      "minProperties": 1,
      "additionalProperties": {
        "type": "integer",
        "minimum": 0
      }
    },
    "by_difficulty": {
      "type": "object",
      "minProperties": 1,
      "additionalProperties": {
        "type": "integer",
        "minimum": 0
      }
    },
    "by_format": {
      "type": "object",
      "minProperties": 1,
      "additionalProperties": {
        "type": "integer",
        "minimum": 0
      }
    },
    "by_mechanism": {
      "type": "object",
      "minProperties": 1,
      "additionalProperties": {
        "type": "integer",
        "minimum": 0
      }
    },
    "type_by_difficulty": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "blague",
        "devinette",
        "charade",
        "jeu-de-mots",
        "contrepeterie"
      ],
      "properties": {
        "blague": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "facile": {
              "type": "integer",
              "minimum": 0
            },
            "moyen": {
              "type": "integer",
              "minimum": 0
            },
            "difficile": {
              "type": "integer",
              "minimum": 0
            }
          }
        },
        "devinette": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "facile": {
              "type": "integer",
              "minimum": 0
            },
            "moyen": {
              "type": "integer",
              "minimum": 0
            },
            "difficile": {
              "type": "integer",
              "minimum": 0
            }
          }
        },
        "charade": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "facile": {
              "type": "integer",
              "minimum": 0
            },
            "moyen": {
              "type": "integer",
              "minimum": 0
            },
            "difficile": {
              "type": "integer",
              "minimum": 0
            }
          }
        },
        "jeu-de-mots": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "facile": {
              "type": "integer",
              "minimum": 0
            },
            "moyen": {
              "type": "integer",
              "minimum": 0
            },
            "difficile": {
              "type": "integer",
              "minimum": 0
            }
          }
        },
        "contrepeterie": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "facile": {
              "type": "integer",
              "minimum": 0
            },
            "moyen": {
              "type": "integer",
              "minimum": 0
            },
            "difficile": {
              "type": "integer",
              "minimum": 0
            }
          }
        }
      }
    },
    "type_by_audience": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "blague",
        "devinette",
        "charade",
        "jeu-de-mots",
        "contrepeterie"
      ],
      "properties": {
        "blague": {
          "type": "object",
          "minProperties": 1,
          "additionalProperties": {
            "type": "integer",
            "minimum": 0
          }
        },
        "devinette": {
          "type": "object",
          "minProperties": 1,
          "additionalProperties": {
            "type": "integer",
            "minimum": 0
          }
        },
        "charade": {
          "type": "object",
          "minProperties": 1,
          "additionalProperties": {
            "type": "integer",
            "minimum": 0
          }
        },
        "jeu-de-mots": {
          "type": "object",
          "minProperties": 1,
          "additionalProperties": {
            "type": "integer",
            "minimum": 0
          }
        },
        "contrepeterie": {
          "type": "object",
          "minProperties": 1,
          "additionalProperties": {
            "type": "integer",
            "minimum": 0
          }
        }
      }
    },
    "origin_by_type": {
      "type": "object",
      "minProperties": 1,
      "additionalProperties": {
        "type": "object",
        "minProperties": 1,
        "additionalProperties": {
          "type": "integer",
          "minimum": 0
        }
      }
    },
    "word_count_by_type": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "blague",
        "devinette",
        "charade",
        "jeu-de-mots",
        "contrepeterie"
      ],
      "properties": {
        "blague": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "minimum",
            "median",
            "mean",
            "maximum"
          ],
          "properties": {
            "minimum": {
              "type": "number",
              "minimum": 0
            },
            "median": {
              "type": "number",
              "minimum": 0
            },
            "mean": {
              "type": "number",
              "minimum": 0
            },
            "maximum": {
              "type": "number",
              "minimum": 0
            }
          }
        },
        "devinette": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "minimum",
            "median",
            "mean",
            "maximum"
          ],
          "properties": {
            "minimum": {
              "type": "number",
              "minimum": 0
            },
            "median": {
              "type": "number",
              "minimum": 0
            },
            "mean": {
              "type": "number",
              "minimum": 0
            },
            "maximum": {
              "type": "number",
              "minimum": 0
            }
          }
        },
        "charade": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "minimum",
            "median",
            "mean",
            "maximum"
          ],
          "properties": {
            "minimum": {
              "type": "number",
              "minimum": 0
            },
            "median": {
              "type": "number",
              "minimum": 0
            },
            "mean": {
              "type": "number",
              "minimum": 0
            },
            "maximum": {
              "type": "number",
              "minimum": 0
            }
          }
        },
        "jeu-de-mots": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "minimum",
            "median",
            "mean",
            "maximum"
          ],
          "properties": {
            "minimum": {
              "type": "number",
              "minimum": 0
            },
            "median": {
              "type": "number",
              "minimum": 0
            },
            "mean": {
              "type": "number",
              "minimum": 0
            },
            "maximum": {
              "type": "number",
              "minimum": 0
            }
          }
        },
        "contrepeterie": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "minimum",
            "median",
            "mean",
            "maximum"
          ],
          "properties": {
            "minimum": {
              "type": "number",
              "minimum": 0
            },
            "median": {
              "type": "number",
              "minimum": 0
            },
            "mean": {
              "type": "number",
              "minimum": 0
            },
            "maximum": {
              "type": "number",
              "minimum": 0
            }
          }
        }
      }
    },
    "answer_coverage_by_type": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "blague",
        "devinette",
        "charade",
        "jeu-de-mots",
        "contrepeterie"
      ],
      "properties": {
        "blague": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "count",
            "total"
          ],
          "properties": {
            "count": {
              "type": "integer",
              "minimum": 0
            },
            "total": {
              "type": "integer",
              "minimum": 0
            }
          }
        },
        "devinette": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "count",
            "total"
          ],
          "properties": {
            "count": {
              "type": "integer",
              "minimum": 0
            },
            "total": {
              "type": "integer",
              "minimum": 0
            }
          }
        },
        "charade": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "count",
            "total"
          ],
          "properties": {
            "count": {
              "type": "integer",
              "minimum": 0
            },
            "total": {
              "type": "integer",
              "minimum": 0
            }
          }
        },
        "jeu-de-mots": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "count",
            "total"
          ],
          "properties": {
            "count": {
              "type": "integer",
              "minimum": 0
            },
            "total": {
              "type": "integer",
              "minimum": 0
            }
          }
        },
        "contrepeterie": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "count",
            "total"
          ],
          "properties": {
            "count": {
              "type": "integer",
              "minimum": 0
            },
            "total": {
              "type": "integer",
              "minimum": 0
            }
          }
        }
      }
    },
    "answer_coverage": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "count",
        "total"
      ],
      "properties": {
        "count": {
          "type": "integer",
          "minimum": 0
        },
        "total": {
          "type": "integer",
          "minimum": 0
        }
      }
    },
    "explanation_coverage": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "count",
        "total"
      ],
      "properties": {
        "count": {
          "type": "integer",
          "minimum": 0
        },
        "total": {
          "type": "integer",
          "minimum": 0
        }
      }
    },
    "direct_source_coverage": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "count",
        "total"
      ],
      "properties": {
        "count": {
          "type": "integer",
          "minimum": 0
        },
        "total": {
          "type": "integer",
          "minimum": 0
        }
      }
    },
    "word_count": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "minimum",
        "median",
        "mean",
        "maximum"
      ],
      "properties": {
        "minimum": {
          "type": "number",
          "minimum": 0
        },
        "median": {
          "type": "number",
          "minimum": 0
        },
        "mean": {
          "type": "number",
          "minimum": 0
        },
        "maximum": {
          "type": "number",
          "minimum": 0
        }
      }
    },
    "explanation_word_count": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "minimum",
        "median",
        "mean",
        "maximum"
      ],
      "properties": {
        "minimum": {
          "type": "number",
          "minimum": 0
        },
        "median": {
          "type": "number",
          "minimum": 0
        },
        "mean": {
          "type": "number",
          "minimum": 0
        },
        "maximum": {
          "type": "number",
          "minimum": 0
        }
      }
    },
    "top_tags": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "tag",
          "count"
        ],
        "properties": {
          "tag": {
            "type": "string",
            "minLength": 1
          },
          "count": {
            "type": "integer",
            "minimum": 1
          }
        }
      }
    },
    "limitations": {
      "type": "array",
      "minItems": 3,
      "uniqueItems": true,
      "items": {
        "type": "string",
        "minLength": 20
      }
    },
    "citation": {
      "type": "string",
      "minLength": 30
    }
  }
}
