$schema: http://json-schema.org/draft-07/schema#
definitions:
  AnyObjectSchema:
    type: object
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/Schema
    required:
      - language
      - protocol
      - type
  AnySchema:
    type: object
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/Schema
    required:
      - language
      - protocol
      - type
  ArmIdSchema:
    type: object
    description: a schema that represents a Uuid value
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/PrimitiveSchema
    required:
      - language
      - protocol
      - type
  ArraySchema:
    type: object
    description: a Schema that represents and array of values
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/ValueSchema
    properties:
      elementType:
        description: elementType of the array
        $ref: ./schemas.yaml#/definitions/Schema
      maxItems:
        type: number
        description: maximum number of elements in the array
      minItems:
        type: number
        description: minimum number of elements in the array
      nullableItems:
        type: boolean
        description: if elements in the array should be nullable
      uniqueItems:
        type: boolean
        description: if the elements in the array should be unique
    required:
      - elementType
      - language
      - protocol
      - type
  BinarySchema:
    type: object
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/Schema
    required:
      - language
      - protocol
      - type
  BooleanSchema:
    type: object
    description: a schema that represents a boolean value
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/PrimitiveSchema
    required:
      - language
      - protocol
      - type
  ByteArraySchema:
    type: object
    description: a schema that represents a ByteArray value
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/ValueSchema
    properties:
      format:
        type: string
        description: date-time format
        enum:
          - base64url
          - byte
    required:
      - format
      - language
      - protocol
      - type
  CharSchema:
    type: object
    description: a schema that represents a Char value
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/PrimitiveSchema
    required:
      - language
      - protocol
      - type
  ChoiceValue:
    type: object
    description: an individual choice in a ChoiceSchema
    additionalProperties: false
    properties:
      value:
        type:
          - string
          - number
          - boolean
        description: the actual value
      extensions:
        description: additional metadata extensions dictionary
        $ref: ./master.yaml#/definitions/Record<string,any>
      language:
        description: per-language information for this value
        $ref: ./master.yaml#/definitions/Languages
    required:
      - language
      - value
  ComplexSchema:
    type: object
    description: schema types that can be objects
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/Schema
    required:
      - language
      - protocol
      - type
  ConditionalSchema:
    type: object
    description: a schema that represents a value dependent on another
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/ValueSchema
    properties:
      conditionalType:
        description: the primitive type for the conditional
        $ref: ./schemas.yaml#/definitions/PrimitiveSchema
      conditions:
        type: array
        description: the possible conditinal values
        items:
          $ref: ./master.yaml#/definitions/ConditionalValue
      sourceValue:
        description: the source value that drives the target value (property or parameter)
        $ref: ./master.yaml#/definitions/Value
    required:
      - conditionalType
      - conditions
      - language
      - protocol
      - sourceValue
      - type
  ConstantSchema:
    type: object
    description: a schema that represents a constant value
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/Schema
    properties:
      value:
        description: the actual constant value
        $ref: ./schemas.yaml#/definitions/ConstantValue
      valueType:
        description: the schema type of the constant value (ie, StringSchema, NumberSchema, etc)
        $ref: ./schemas.yaml#/definitions/Schema
    required:
      - language
      - protocol
      - type
      - value
      - valueType
  ConstantType:
    type: object
    additionalProperties: false
    properties:
      type:
        description: the schema type
        $ref: ./types.yaml#/definitions/AllSchemaTypes
      apiVersions:
        type: array
        description: API versions that this applies to. Undefined means all versions
        items:
          $ref: ./master.yaml#/definitions/ApiVersion
      defaultValue:
        description: If the value isn't sent on the wire, the service will assume this
      deprecated:
        description: Represent the deprecation information if api is deprecated.
        default: undefined
        $ref: ./master.yaml#/definitions/Deprecation
      example:
        description: example information
      externalDocs:
        description: External Documentation Links
        $ref: ./master.yaml#/definitions/ExternalDocumentation
      origin:
        type: string
        description: where did this aspect come from (jsonpath or 'modelerfour:<soemthing>')
      serialization:
        description: per-serialization information for this Schema
        $ref: ./master.yaml#/definitions/SerializationFormats
      summary:
        type: string
        description: a short description
      extensions:
        description: additional metadata extensions dictionary
        $ref: ./master.yaml#/definitions/Record<string,any>
      language:
        description: per-language information for Schema
        $ref: ./master.yaml#/definitions/Languages
      protocol:
        description: per-protocol information for this aspect
        $ref: ./master.yaml#/definitions/Protocols
    required:
      - language
      - protocol
      - type
  ConstantValue:
    type: object
    description: a container for the actual constant value
    additionalProperties: false
    properties:
      value:
        description: the actual constant value to use
      extensions:
        description: additional metadata extensions dictionary
        $ref: ./master.yaml#/definitions/Record<string,any>
      language:
        description: per-language information for this value
        $ref: ./master.yaml#/definitions/Languages
    required:
      - value
  CredentialSchema:
    type: object
    description: a schema that represents a Credential value
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/PrimitiveSchema
    properties:
      maxLength:
        type: number
        description: the maximum length of the string
      minLength:
        type: number
        description: the minimum length of the string
      pattern:
        type: string
        description: a regular expression that the string must be validated against
    required:
      - language
      - protocol
      - type
  DateSchema:
    type: object
    description: a schema that represents a Date value
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/PrimitiveSchema
    required:
      - language
      - protocol
      - type
  DateTimeSchema:
    type: object
    description: a schema that represents a DateTime value
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/PrimitiveSchema
    properties:
      format:
        type: string
        description: date-time format
        enum:
          - date-time
          - date-time-rfc1123
    required:
      - format
      - language
      - protocol
      - type
  DictionarySchema:
    type: object
    description: a schema that represents a key-value collection
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/ComplexSchema
    properties:
      elementType:
        description: the element type of the dictionary. (Keys are always strings)
        $ref: ./schemas.yaml#/definitions/Schema
      nullableItems:
        type: boolean
        description: if elements in the dictionary should be nullable
    required:
      - elementType
      - language
      - protocol
      - type
  DurationSchema:
    type: object
    description: a schema that represents a Duration value
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/PrimitiveSchema
    required:
      - language
      - protocol
      - type
  FlagSchema:
    type: object
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/ValueSchema
    properties:
      choices:
        type: array
        description: the possible choices for in the set
        items:
          $ref: ./master.yaml#/definitions/FlagValue
    required:
      - choices
      - language
      - protocol
      - type
  GroupSchema:
    type: object
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/Schema
      - $ref: ./schemas.yaml#/definitions/SchemaUsage
    properties:
      properties:
        type: array
        items:
          $ref: ./master.yaml#/definitions/GroupProperty
    required:
      - language
      - protocol
      - type
  NotSchema:
    type: object
    description: a NOT relationship between schemas
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/Schema
    properties:
      not:
        description: the schema that this may not be.
        $ref: ./schemas.yaml#/definitions/Schema
    required:
      - language
      - not
      - protocol
      - type
  NumberSchema:
    type: object
    description: a Schema that represents a Number value
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/PrimitiveSchema
    properties:
      exclusiveMaximum:
        type: boolean
        description: if present, the value must be lower than maximum
      exclusiveMinimum:
        type: boolean
        description: if present, the value must be higher than minimum
      maximum:
        type: number
        description: if present, the value must be lower than or equal to this (unless exclusiveMaximum is true)
      minimum:
        type: number
        description: if present, the value must be highter than or equal to this (unless exclusiveMinimum is true)
      multipleOf:
        type: number
        description: if present, the number must be an exact multiple of this value
      precision:
        type: number
        description: precision (# of bits?) of the number
    required:
      - language
      - precision
      - protocol
      - type
  ODataQuerySchema:
    type: object
    description: a schema that represents a ODataQuery value
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/Schema
    required:
      - language
      - protocol
      - type
  ObjectSchema:
    type: object
    description: a schema that represents a type with child properties.
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/ComplexSchema
      - $ref: ./schemas.yaml#/definitions/SchemaUsage
    properties:
      children:
        $ref: ./master.yaml#/definitions/Relations
      discriminator:
        description: the property of the polymorphic descriminator for this type, if there is one
        $ref: ./master.yaml#/definitions/Discriminator
      discriminatorValue:
        type: string
      maxProperties:
        type: number
        description: maximum number of properties permitted
      minProperties:
        type: number
        description: minimum number of properties permitted
      parents:
        $ref: ./master.yaml#/definitions/Relations
      properties:
        type: array
        description: the collection of properties that are in this object
        items:
          $ref: ./master.yaml#/definitions/Property
    required:
      - language
      - protocol
      - type
  OrSchema:
    type: object
    description: an OR relationship between several schemas
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/ComplexSchema
    properties:
      anyOf:
        type: array
        description: the set of schemas that this schema is composed of. Every schema is optional
        items:
          $ref: ./schemas.yaml#/definitions/ComplexSchema
    required:
      - anyOf
      - language
      - protocol
      - type
  PrimitiveSchema:
    type: object
    description: Schema types that are primitive language values
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/ValueSchema
    required:
      - language
      - protocol
      - type
  Schema:
    type: object
    additionalProperties: false
    properties:
      type:
        description: the schema type
        $ref: ./types.yaml#/definitions/AllSchemaTypes
      apiVersions:
        type: array
        description: API versions that this applies to. Undefined means all versions
        items:
          $ref: ./master.yaml#/definitions/ApiVersion
      defaultValue:
        description: If the value isn't sent on the wire, the service will assume this
      deprecated:
        description: Represent the deprecation information if api is deprecated.
        default: undefined
        $ref: ./master.yaml#/definitions/Deprecation
      example:
        description: example information
      externalDocs:
        description: External Documentation Links
        $ref: ./master.yaml#/definitions/ExternalDocumentation
      origin:
        type: string
        description: where did this aspect come from (jsonpath or 'modelerfour:<soemthing>')
      serialization:
        description: per-serialization information for this Schema
        $ref: ./master.yaml#/definitions/SerializationFormats
      summary:
        type: string
        description: a short description
      extensions:
        description: additional metadata extensions dictionary
        $ref: ./master.yaml#/definitions/Record<string,any>
      language:
        description: per-language information for Schema
        $ref: ./master.yaml#/definitions/Languages
      protocol:
        description: per-protocol information for this aspect
        $ref: ./master.yaml#/definitions/Protocols
    required:
      - language
      - protocol
      - type
  Schemas:
    type: object
    description: the full set of schemas for a given service, categorized into convenient collections
    additionalProperties: false
    properties:
      any:
        type: array
        items:
          $ref: ./schemas.yaml#/definitions/AnySchema
      anyObjects:
        type: array
        items:
          $ref: ./schemas.yaml#/definitions/AnyObjectSchema
      armIds:
        type: array
        description: an URI of some kind
        items:
          $ref: ./schemas.yaml#/definitions/ArmIdSchema
      arrays:
        type: array
        description: a collection of items
        items:
          $ref: ./schemas.yaml#/definitions/ArraySchema
      binaries:
        type: array
        items:
          $ref: ./schemas.yaml#/definitions/BinarySchema
      booleans:
        type: array
        description: a true or false value
        items:
          $ref: ./schemas.yaml#/definitions/BooleanSchema
      byteArrays:
        type: array
        description: ByteArray -- an array of bytes
        items:
          $ref: ./schemas.yaml#/definitions/ByteArraySchema
      chars:
        type: array
        description: a single character
        items:
          $ref: ./schemas.yaml#/definitions/CharSchema
      choices:
        type: array
        description: |-
          - this is essentially can be thought of as an 'enum'
          that is a choice between one of several items, but an unspecified value is permitted.
        items:
          $ref: ./schemas.yaml#/definitions/ChoiceSchema
      conditionals:
        type: array
        description: ie, when 'profile' is 'production', use '2018-01-01' for apiversion
        items:
          $ref: ./schemas.yaml#/definitions/ConditionalSchema
      constants:
        type: array
        description: a constant value
        items:
          $ref: ./schemas.yaml#/definitions/ConstantSchema
      credentials:
        type: array
        description: a password or credential
        items:
          $ref: ./schemas.yaml#/definitions/CredentialSchema
      dateTimes:
        type: array
        description: a DateTime
        items:
          $ref: ./schemas.yaml#/definitions/DateTimeSchema
      dates:
        type: array
        description: a Date
        items:
          $ref: ./schemas.yaml#/definitions/DateSchema
      dictionaries:
        type: array
        description: an associative array (ie, dictionary, hashtable, etc)
        items:
          $ref: ./schemas.yaml#/definitions/DictionarySchema
      durations:
        type: array
        description: a Duration
        items:
          $ref: ./schemas.yaml#/definitions/DurationSchema
      flags:
        type: array
        items:
          $ref: ./schemas.yaml#/definitions/FlagSchema
      groups:
        type: array
        items:
          $ref: ./schemas.yaml#/definitions/GroupSchema
      numbers:
        type: array
        description: a number value
        items:
          $ref: ./schemas.yaml#/definitions/NumberSchema
      objects:
        type: array
        description: an object of some type
        items:
          $ref: ./schemas.yaml#/definitions/ObjectSchema
      odataQueries:
        type: array
        description: OData Query
        items:
          $ref: ./schemas.yaml#/definitions/ODataQuerySchema
      ors:
        type: array
        items:
          $ref: ./schemas.yaml#/definitions/OrSchema
      sealedChoices:
        type: array
        description: |-
          - this is essentially can be thought of as an 'enum'
          that is a choice between one of several items, but an unknown value is not allowed.
        items:
          $ref: ./schemas.yaml#/definitions/SealedChoiceSchema
      sealedConditionals:
        type: array
        items:
          $ref: ./schemas.yaml#/definitions/SealedConditionalSchema
      streams:
        type: array
        items:
          $ref: ./schemas.yaml#/definitions/Schema
      strings:
        type: array
        description: a string of characters
        items:
          $ref: ./schemas.yaml#/definitions/StringSchema
      times:
        type: array
        description: a time
        items:
          $ref: ./schemas.yaml#/definitions/TimeSchema
      unixtimes:
        type: array
        description: UnixTime
        items:
          $ref: ./schemas.yaml#/definitions/UnixTimeSchema
      unknowns:
        type: array
        description: |-
          it's possible that we just may make this an error
          in representation.
        items:
          $ref: ./schemas.yaml#/definitions/Schema
      uris:
        type: array
        description: an URI of some kind
        items:
          $ref: ./schemas.yaml#/definitions/UriSchema
      uuids:
        type: array
        description: a universally unique identifier
        items:
          $ref: ./schemas.yaml#/definitions/UuidSchema
      xors:
        type: array
        items:
          $ref: ./schemas.yaml#/definitions/XorSchema
  SealedConditionalSchema:
    type: object
    description: a schema that represents a value dependent on another (not overridable)
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/ValueSchema
    properties:
      conditionalType:
        description: the primitive type for the condition
        $ref: ./schemas.yaml#/definitions/PrimitiveSchema
      conditions:
        type: array
        description: the possible conditional values
        items:
          $ref: ./master.yaml#/definitions/ConditionalValue
      sourceValue:
        description: the source value that drives the target value
        $ref: ./master.yaml#/definitions/Value
    required:
      - conditionalType
      - conditions
      - language
      - protocol
      - sourceValue
      - type
  StringSchema:
    type: object
    description: a Schema that represents a string value
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/PrimitiveSchema
    properties:
      maxLength:
        type: number
        description: the maximum length of the string
      minLength:
        type: number
        description: the minimum length of the string
      pattern:
        type: string
        description: a regular expression that the string must be validated against
    required:
      - language
      - protocol
      - type
  TimeSchema:
    type: object
    description: a schema that represents a Date value
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/PrimitiveSchema
    required:
      - language
      - protocol
      - type
  UnixTimeSchema:
    type: object
    description: a schema that represents a UnixTime value
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/PrimitiveSchema
    required:
      - language
      - protocol
      - type
  UriSchema:
    type: object
    description: a schema that represents a Uri value
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/PrimitiveSchema
    properties:
      maxLength:
        type: number
        description: the maximum length of the string
      minLength:
        type: number
        description: the minimum length of the string
      pattern:
        type: string
        description: a regular expression that the string must be validated against
    required:
      - language
      - protocol
      - type
  UuidSchema:
    type: object
    description: a schema that represents a Uuid value
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/PrimitiveSchema
    required:
      - language
      - protocol
      - type
  ValueSchema:
    type: object
    description: schema types that are non-object or complex types
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/Schema
    required:
      - language
      - protocol
      - type
  XorSchema:
    type: object
    description: an XOR relationship between several schemas
    additionalProperties: false
    allOf:
      - $ref: ./schemas.yaml#/definitions/Schema
    properties:
      oneOf:
        type: array
        description: the set of schemas that this must be one and only one of.
        items:
          $ref: ./schemas.yaml#/definitions/Schema
    required:
      - language
      - oneOf
      - protocol
      - type
