Module: JSONSchemer::Draft202012::Meta

Defined in:
lib/json_schemer/draft202012/meta.rb

Constant Summary collapse

CORE =
{
  '$schema' => 'https://json-schema.org/draft/2020-12/schema',
  '$id' => 'https://json-schema.org/draft/2020-12/meta/core',
  '$dynamicAnchor' => 'meta',
  'title' => 'Core vocabulary meta-schema',
  'type' => ['object', 'boolean'],
  'properties' => {
    '$id' => {
      '$ref' => '#/$defs/uriReferenceString',
      '$comment' => 'Non-empty fragments not allowed.',
      'pattern' => '^[^#]*#?$'
    },
    '$schema' => { '$ref' => '#/$defs/uriString' },
    '$ref' => { '$ref' => '#/$defs/uriReferenceString' },
    '$anchor' => { '$ref' => '#/$defs/anchorString' },
    '$dynamicRef' => { '$ref' => '#/$defs/uriReferenceString' },
    '$dynamicAnchor' => { '$ref' => '#/$defs/anchorString' },
    '$vocabulary' => {
      'type' => 'object',
      'propertyNames' => { '$ref' => '#/$defs/uriString' },
      'additionalProperties' => {
        'type' => 'boolean'
      }
    },
    '$comment' => {
      'type' => 'string'
    },
    '$defs' => {
      'type' => 'object',
      'additionalProperties' => { '$dynamicRef' => '#meta' }
    }
  },
  '$defs' => {
    'anchorString' => {
      'type' => 'string',
      'pattern' => '^[A-Za-z_][-A-Za-z0-9._]*$'
    },
    'uriString' => {
      'type' => 'string',
      'format' => 'uri'
    },
    'uriReferenceString' => {
      'type' => 'string',
      'format' => 'uri-reference'
    }
  }
}
APPLICATOR =
{
  '$schema' => 'https://json-schema.org/draft/2020-12/schema',
  '$id' => 'https://json-schema.org/draft/2020-12/meta/applicator',
  '$dynamicAnchor' => 'meta',
  'title' => 'Applicator vocabulary meta-schema',
  'type' => ['object', 'boolean'],
  'properties' => {
    'prefixItems' => { '$ref' => '#/$defs/schemaArray' },
    'items' => { '$dynamicRef' => '#meta' },
    'contains' => { '$dynamicRef' => '#meta' },
    'additionalProperties' => { '$dynamicRef' => '#meta' },
    'properties' => {
      'type' => 'object',
      'additionalProperties' => { '$dynamicRef' => '#meta' },
      'default' => {}
    },
    'patternProperties' => {
      'type' => 'object',
      'additionalProperties' => { '$dynamicRef' => '#meta' },
      'propertyNames' => { 'format' => 'regex' },
      'default' => {}
    },
    'dependentSchemas' => {
      'type' => 'object',
      'additionalProperties' => { '$dynamicRef' => '#meta' },
      'default' => {}
    },
    'propertyNames' => { '$dynamicRef' => '#meta' },
    'if' => { '$dynamicRef' => '#meta' },
    'then' => { '$dynamicRef' => '#meta' },
    'else' => { '$dynamicRef' => '#meta' },
    'allOf' => { '$ref' => '#/$defs/schemaArray' },
    'anyOf' => { '$ref' => '#/$defs/schemaArray' },
    'oneOf' => { '$ref' => '#/$defs/schemaArray' },
    'not' => { '$dynamicRef' => '#meta' }
  },
  '$defs' => {
    'schemaArray' => {
      'type' => 'array',
      'minItems' => 1,
      'items' => { '$dynamicRef' => '#meta' }
    }
  }
}
UNEVALUATED =
{
  '$schema' => 'https://json-schema.org/draft/2020-12/schema',
  '$id' => 'https://json-schema.org/draft/2020-12/meta/unevaluated',
  '$dynamicAnchor' => 'meta',
  'title' => 'Unevaluated applicator vocabulary meta-schema',
  'type' => ['object', 'boolean'],
  'properties' => {
    'unevaluatedItems' => { '$dynamicRef' => '#meta' },
    'unevaluatedProperties' => { '$dynamicRef' => '#meta' }
  }
}
VALIDATION =
{
  '$schema' => 'https://json-schema.org/draft/2020-12/schema',
  '$id' => 'https://json-schema.org/draft/2020-12/meta/validation',
  '$dynamicAnchor' => 'meta',
  'title' => 'Validation vocabulary meta-schema',
  'type' => ['object', 'boolean'],
  'properties' => {
    'type' => {
      'anyOf' => [
        { '$ref' => '#/$defs/simpleTypes' },
        {
          'type' => 'array',
          'items' => { '$ref' => '#/$defs/simpleTypes' },
          'minItems' => 1,
          'uniqueItems' => true
        }
      ]
    },
    'const' => true,
    'enum' => {
      'type' => 'array',
      'items' => true
    },
    'multipleOf' => {
      'type' => 'number',
      'exclusiveMinimum' => 0
    },
    'maximum' => {
      'type' => 'number'
    },
    'exclusiveMaximum' => {
      'type' => 'number'
    },
    'minimum' => {
      'type' => 'number'
    },
    'exclusiveMinimum' => {
      'type' => 'number'
    },
    'maxLength' => { '$ref' => '#/$defs/nonNegativeInteger' },
    'minLength' => { '$ref' => '#/$defs/nonNegativeIntegerDefault0' },
    'pattern' => {
      'type' => 'string',
      'format' => 'regex'
    },
    'maxItems' => { '$ref' => '#/$defs/nonNegativeInteger' },
    'minItems' => { '$ref' => '#/$defs/nonNegativeIntegerDefault0' },
    'uniqueItems' => {
      'type' => 'boolean',
      'default' => false
    },
    'maxContains' => { '$ref' => '#/$defs/nonNegativeInteger' },
    'minContains' => {
      '$ref' => '#/$defs/nonNegativeInteger',
      'default' => 1
    },
    'maxProperties' => { '$ref' => '#/$defs/nonNegativeInteger' },
    'minProperties' => { '$ref' => '#/$defs/nonNegativeIntegerDefault0' },
    'required' => { '$ref' => '#/$defs/stringArray' },
    'dependentRequired' => {
      'type' => 'object',
      'additionalProperties' => {
        '$ref' => '#/$defs/stringArray'
      }
    }
  },
  '$defs' => {
    'nonNegativeInteger' => {
      'type' => 'integer',
      'minimum' => 0
    },
    'nonNegativeIntegerDefault0' => {
      '$ref' => '#/$defs/nonNegativeInteger',
      'default' => 0
    },
    'simpleTypes' => {
      'enum' => [
        'array',
        'boolean',
        'integer',
        'null',
        'number',
        'object',
        'string'
      ]
    },
    'stringArray' => {
      'type' => 'array',
      'items' => { 'type' => 'string' },
      'uniqueItems' => true,
      'default' => []
    }
  }
}
META_DATA =
{
  '$schema' => 'https://json-schema.org/draft/2020-12/schema',
  '$id' => 'https://json-schema.org/draft/2020-12/meta/meta-data',
  '$dynamicAnchor' => 'meta',
  'title' => 'Meta-data vocabulary meta-schema',
  'type' => ['object', 'boolean'],
  'properties' => {
    'title' => {
      'type' => 'string'
    },
    'description' => {
      'type' => 'string'
    },
    'default' => true,
    'deprecated' => {
      'type' => 'boolean',
      'default' => false
    },
    'readOnly' => {
      'type' => 'boolean',
      'default' => false
    },
    'writeOnly' => {
      'type' => 'boolean',
      'default' => false
    },
    'examples' => {
      'type' => 'array',
      'items' => true
    }
  }
}
FORMAT_ANNOTATION =
{
  '$schema' => 'https://json-schema.org/draft/2020-12/schema',
  '$id' => 'https://json-schema.org/draft/2020-12/meta/format-annotation',
  '$dynamicAnchor' => 'meta',
  'title' => 'Format vocabulary meta-schema for annotation results',
  'type' => ['object', 'boolean'],
  'properties' => {
    'format' => { 'type' => 'string' }
  }
}
FORMAT_ASSERTION =
{
  '$schema' => 'https://json-schema.org/draft/2020-12/schema',
  '$id' => 'https://json-schema.org/draft/2020-12/meta/format-assertion',
  '$dynamicAnchor' => 'meta',
  'title' => 'Format vocabulary meta-schema for assertion results',
  'type' => ['object', 'boolean'],
  'properties' => {
    'format' => { 'type' => 'string' }
  }
}
CONTENT =
{
  '$schema' => 'https://json-schema.org/draft/2020-12/schema',
  '$id' => 'https://json-schema.org/draft/2020-12/meta/content',
  '$dynamicAnchor' => 'meta',
  'title' => 'Content vocabulary meta-schema',
  'type' => ['object', 'boolean'],
  'properties' => {
    'contentEncoding' => { 'type' => 'string' },
    'contentMediaType' => { 'type' => 'string' },
    'contentSchema' => { '$dynamicRef' => '#meta' }
  }
}
SCHEMAS =
{
  URI('https://json-schema.org/draft/2020-12/meta/core') => CORE,
  URI('https://json-schema.org/draft/2020-12/meta/applicator') => APPLICATOR,
  URI('https://json-schema.org/draft/2020-12/meta/unevaluated') => UNEVALUATED,
  URI('https://json-schema.org/draft/2020-12/meta/validation') => VALIDATION,
  URI('https://json-schema.org/draft/2020-12/meta/meta-data') => META_DATA,
  URI('https://json-schema.org/draft/2020-12/meta/format-annotation') => FORMAT_ANNOTATION,
  URI('https://json-schema.org/draft/2020-12/meta/format-assertion') => FORMAT_ASSERTION,
  URI('https://json-schema.org/draft/2020-12/meta/content') => CONTENT
}