$schema: http://json-schema.org/draft-07/schema#
$id: http://json-schema.org/draft-07/schema#
title: Core schema meta-schema
definitions:
  schemaArray:
    type: array
    minItems: 1
    items:
      $ref: '#'
  nonNegativeInteger:
    type: integer
    minimum: 0
  nonNegativeIntegerDefault0:
    allOf:
      - $ref: '#/definitions/nonNegativeInteger'
      - default: 0
  simpleTypes:
    enum:
      - array
      - boolean
      - integer
      - 'null'
      - number
      - object
      - string
  stringArray:
    type: array
    items:
      type: string
    uniqueItems: true
    default: []
type:
  - object
  - boolean
properties:
  $id:
    type: string
    format: uri-reference
  $schema:
    type: string
    format: uri
  $ref:
    type: string
    format: uri-reference
  $comment:
    type: string
  title:
    type: string
    translate: md
  description:
    type: string
    translate: md
  default: true
  readOnly:
    type: boolean
    default: false
  examples:
    type: array
    items: true
  multipleOf:
    type: number
    exclusiveMinimum: 0
  maximum:
    type: number
  exclusiveMaximum:
    type: number
  minimum:
    type: number
  exclusiveMinimum:
    type: number
  maxLength:
    $ref: '#/definitions/nonNegativeInteger'
  minLength:
    $ref: '#/definitions/nonNegativeIntegerDefault0'
  pattern:
    type: string
    format: regex
  additionalItems:
    $ref: '#'
  items:
    anyOf:
      - $ref: '#'
      - $ref: '#/definitions/schemaArray'
    default: true
  maxItems:
    $ref: '#/definitions/nonNegativeInteger'
  minItems:
    $ref: '#/definitions/nonNegativeIntegerDefault0'
  uniqueItems:
    type: boolean
    default: false
  contains:
    $ref: '#'
  maxProperties:
    $ref: '#/definitions/nonNegativeInteger'
  minProperties:
    $ref: '#/definitions/nonNegativeIntegerDefault0'
  required:
    $ref: '#/definitions/stringArray'
  additionalProperties:
    $ref: '#'
  definitions:
    type: object
    additionalProperties:
      $ref: '#'
    default: {}
  properties:
    type: object
    additionalProperties:
      $ref: '#'
    default: {}
  patternProperties:
    type: object
    additionalProperties:
      $ref: '#'
    propertyNames:
      format: regex
    default: {}
  dependencies:
    type: object
    additionalProperties:
      anyOf:
        - $ref: '#'
        - $ref: '#/definitions/stringArray'
  propertyNames:
    $ref: '#'
  const: true
  enum:
    type: array
    items: true
    minItems: 1
    uniqueItems: true
  type:
    anyOf:
      - $ref: '#/definitions/simpleTypes'
      - type: array
        items:
          $ref: '#/definitions/simpleTypes'
        minItems: 1
        uniqueItems: true
  format:
    type: string
  contentMediaType:
    type: string
  contentEncoding:
    type: string
  if:
    $ref: '#'
  then:
    $ref: '#'
  else:
    $ref: '#'
  allOf:
    $ref: '#/definitions/schemaArray'
  anyOf:
    $ref: '#/definitions/schemaArray'
  oneOf:
    $ref: '#/definitions/schemaArray'
  not:
    $ref: '#'
default: true