%YAML 1.1
---
$schema: "http://json-schema.org/draft-04/schema"
id: "http://stsci.edu/schemas/asdf/asdf-schema-1.0.0"
title:
  ASDF Schema
description: |
  Extending YAML Schema and JSON Schema to add support for some ASDF-specific
  checks, related to [ndarrays](ref:core/ndarray-1.0.0).
allOf:
  - $ref: "http://stsci.edu/schemas/yaml-schema/draft-01"
  - type: object
    properties:
      max_ndim:
        description: |
          Specifies that the corresponding **ndarray** is at most the
          given number of dimensions.  If the array has fewer
          dimensions, it should be logically treated as if it were
          "broadcast" to the expected dimensions by adding 1's to the
          front of the shape list.
        type: integer
        minimum: 0

      ndim:
        description: |
          Specifies that the matching **ndarray** is exactly the given
          number of dimensions.
        type: integer
        minimum: 0

      datatype:
        description: |
          Specifies the datatype of the **ndarray**.

          By default, an array is considered "matching" if the array
          can be cast to the given datatype without data loss.  For
          exact datatype matching, set `exact_datatype` to `true`.
        allOf:
          - $ref: "http://stsci.edu/schemas/asdf/core/ndarray-1.0.0#/definitions/datatype"

      exact_datatype:
        description: |
          If `true`, the datatype must match exactly.
        type: boolean
        default: false

      # Redefine JSON schema validators in terms of this document so that
      # we can check nested objects:
      additionalItems:
        anyOf:
          - type: boolean
          - $ref: "#"
      items:
        anyOf:
          - $ref: "#"
          - $ref: "#/definitions/schemaArray"
      additionalProperties:
        anyOf:
          - type: boolean
          - $ref: "#"
      definitions:
        type: object
        additionalProperties:
          $ref: "#"
      properties:
        type: object
        additionalProperties:
          $ref: "#"
      patternProperties:
        type: object
        additionalProperties:
          $ref: "#"
      dependencies:
        type: object
        additionalProperties:
          anyOf:
            - $ref: "#"
            - $ref: "http://json-schema.org/draft-04/schema#/definitions/stringArray"
      allOf:
        $ref: "#/definitions/schemaArray"
      anyOf:
        $ref: "#/definitions/schemaArray"
      oneOf:
        $ref: "#/definitions/schemaArray"
      not:
        $ref: "#"

definitions:
  schemaArray:
    type: array
    minItems: 1
    items:
      $ref: "#"
...
