{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "id": "otherProperties.json",
  "title": "Definitions: Other Properties.",
  "description": "Schemas in #/definitions detect or validate keys, objects or constraints variously applicable to Annotations, Bodies, Targets, Specific Resources, Textual Bodies, Items, and/or Sources (Section 3.3).",
  "definitions": {

    "createdValidIfPresent": {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Validation: created value",
      "description": "True when the object being tested (annotation, body, target...) has no created or has a single created of format date-time (Section 3.3.1)",
      "type": "object",
      "properties": {"created": {"oneOf": [
        {
          "type": "string",
          "format": "date-time"
        },
        {
          "type": "array",
          "minItems": 1,
          "maxItems": 1,
          "items": {
            "type": "string",
            "format": "date-time"
          }
        }
      ]}}
    },

    "createdPropertyFound": {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: created key with qualifying body/target classes",
      "description": "Supports implementation check of created (if/when) used on External Web Resources, Specific Resources, Textual Body Resources (Sections 3.2.1-6, 3.3)",
      "oneOf": [
      {"$ref": "annotations.json#/definitions/annotationTypeValueFound"},
      {"$ref": "specificResource.json#/definitions/specificeResourceDetected"},
      {"$ref": "bodyTarget.json#/definitions/externalWebResourceDetected"},
        {"$ref": "bodyTarget.json#/definitions/textualBodyFound"}
      ],
      "allOf": [
      {"$ref": "#/definitions/createdValidIfPresent"},
      {"required": ["created"]}
      ]
    },

    "itemCreatedPropertyFound":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: items having created key with qualifying body/target classes",
      "description": "Supports implementation check of items having created (if/when) used on External Web Resources, Specific Resources, Textual Body Resources (Sections 3.2.1-6, 3.3)",
      "type": "object",
      "properties":
      {
          "items":
          {
              "type": "array",
              "minItems": 1,
              "not":
              {
                  "items":
                  { "not": { "$ref": "#/definitions/createdPropertyFound" } }
              }
          }
      },
      "required": ["items"]
    },

    "sourceCreatedPropertyFound":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: Specific Resource source having created key",
      "description": "Supports implementation check of created (if/when) used on Specific Resource source (Sections 3.2.1-6, 3.3)",
      "type": "object",
      "properties":
      {
          "source":
          {
              "type": "object",
              "required": ["created"] ,
              "$ref": "#/definitions/createdValidIfPresent"
          }
      },
      "required": ["source"]
    },

    "generatedValidIfPresent": {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Validation: generated value",
      "description": "True when the annotation, body or target has no generated or has a single generated of format date-time (Section 3.3.1)",
      "type": "object",
      "properties": {"generated": {"oneOf": [
        {
          "type": "string",
          "format": "date-time"
        },
        {
          "type": "array",
          "minItems": 1,
          "maxItems": 1,
          "items": {
            "type": "string",
            "format": "date-time"
          }
        }
      ]}}
    },

    "generatedPropertyFound": {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: generated key with qualifying body/target classes",
      "description": "Supports implementation check of generated (if/when) used on External Web Resources, Specific Resources, Textual Body Resources (Sections 3.2.1-6, 3.3)",
      "oneOf": [
        {"$ref": "annotations.json#/definitions/annotationTypeValueFound"}
      ],
      "allOf": [
      {"$ref": "#/definitions/generatedValidIfPresent"},
      {"required": ["generated"]}
      ]
    },

    "modifiedValidIfPresent": {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Validation: modified value",
      "description": "True when the annotation, body or target has no modified or has a single modified of format date-time (Section 3.3.1)",
      "type": "object",
      "properties": {"modified": {"oneOf": [
        {
          "type": "string",
          "format": "date-time"
        },
        {
          "type": "array",
          "minItems": 1,
          "maxItems": 1,
          "items": {
            "type": "string",
            "format": "date-time"
          }
        }
      ]}}
    },

    "modifiedPropertyFound": {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: modified key with qualifying body/target classes",
      "description": "Supports implementation check of modified (if/when) used on External Web Resources, Specific Resources, Textual Body Resources (Sections 3.2.1-6, 3.3)",
      "oneOf": [
      {"$ref": "annotations.json#/definitions/annotationTypeValueFound"},
      {"$ref": "specificResource.json#/definitions/specificeResourceDetected"},
      {"$ref": "bodyTarget.json#/definitions/externalWebResourceDetected"},
        {"$ref": "bodyTarget.json#/definitions/textualBodyFound"}
      ],
      "allOf": [
      {"$ref": "#/definitions/modifiedValidIfPresent"},
      {"required": ["modified"]}
      ]
    },

    "itemModifiedPropertyFound":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: items having modified key with qualifying body/target classes",
      "description": "Supports implementation check of items having modified (if/when) used on External Web Resources, Specific Resources, Textual Body Resources (Sections 3.2.1-6, 3.3)",
      "type": "object",
      "properties":
      {
          "items":
          {
              "type": "array",
              "minItems": 1,
              "not":
              {
                  "items":
                  { "not": { "$ref": "#/definitions/modifiedPropertyFound" } }
              }
          }
      },
      "required": ["items"]
    },

    "sourceModifiedPropertyFound":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: Specific Resource source having modified key",
      "description": "Supports implementation check of modified (if/when) used on Specific Resource source (Sections 3.2.1-6, 3.3)",
      "type": "object",
      "properties":
      {
          "source":
          {
              "type": "object",
              "required": ["modified"] ,
              "$ref": "#/definitions/modifiedValidIfPresent"
          }
      },
      "required": ["source"]
    },

    "creatorValidIfPresent": {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Validation: creator value",
      "description": "True when the annotation, body or target has one or more creators (Section 3.3.1)",
      "type": "object",
      "properties": {"creator":
        {"oneOf": [
          { "$ref": "id.json#/definitions/stringUri" },
          { "type": "object" },
          {
            "type": "array",
            "minItems": 1,
            "items":
            { "oneOf": [
              { "$ref": "id.json#/definitions/stringUri" },
              { "type": "object" }
            ]
            }
          }
        ]
        }
      }
    },

    "creatorSingularIfPresent": {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Validation: creator value",
      "description": "True when the annotation, body or target has exactly 1 creator (Section 3.3.1)",
      "type": "object",
      "properties": {"creator":
        {"oneOf": [
          { "$ref": "id.json#/definitions/stringUri" },
          { "type": "object" },
          {
            "type": "array",
            "minItems": 1,
            "maxItems": 1,
            "items":
            { "oneOf": [
              { "$ref": "id.json#/definitions/stringUri" },
              { "type": "object" }
            ]
            }
          }
        ]
        }
      }
    },

    "creatorPropertyFound": {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: creator key with qualifying body/target classes",
      "description": "Supports implementation check of creator (if/when) used on External Web Resources, Specific Resources, Textual Body Resources (Section 3.3.1)",
      "oneOf": [
      {"$ref": "annotations.json#/definitions/annotationTypeValueFound"},
      {"$ref": "specificResource.json#/definitions/specificeResourceDetected"},
      {"$ref": "bodyTarget.json#/definitions/externalWebResourceDetected"},
        {"$ref": "bodyTarget.json#/definitions/textualBodyFound"}
      ],
      "allOf": [
      {"required": ["creator"]},
      {"$ref": "#/definitions/creatorValidIfPresent"}
      ]
    },

    "itemCreatorPropertyFound":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: items having creator key with qualifying body/target classes",
      "description": "Supports implementation check of items having creator (if/when) used on External Web Resources, Specific Resources, Textual Body Resources (Sections 3.2.1-6, 3.3)",
      "type": "object",
      "properties":
      {
          "items":
          {
              "type": "array",
              "minItems": 1,
              "not":
              {
                  "items":
                  { "not": { "$ref": "#/definitions/creatorPropertyFound" } }
              }
          }
      },
      "required": ["items"]
    },

    "sourceCreatorPropertyFound":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: Specific Resource source having creator key",
      "description": "Supports implementation check of creator (if/when) used on Specific Resource source (Sections 3.2.1-6, 3.3)",
      "type": "object",
      "properties":
      {
          "source":
          {
              "type": "object",
              "required": ["creator"] ,
              "$ref": "#/definitions/creatorValidIfPresent"
          }
      },
      "required": ["source"]
    },

    "singleCreatorPropertyFound": {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: creator key with qualifying body/target classes",
      "description": "Supports implementation check of creator being singular (if/when) used on External Web Resources, Specific Resources, Textual Body Resources (Section 3.3.1)",
      "oneOf": [
      {"$ref": "annotations.json#/definitions/annotationTypeValueFound"},
      {"$ref": "specificResource.json#/definitions/specificeResourceDetected"},
      {"$ref": "bodyTarget.json#/definitions/externalWebResourceDetected"},
        {"$ref": "bodyTarget.json#/definitions/textualBodyFound"}
      ],
      "allOf": [
      {"required": ["creator"]},
      {"$ref": "#/definitions/creatorSingularIfPresent"}
      ]
    },

    "itemSingleCreatorPropertyFound":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: items having singular creator key with qualifying body/target classes",
      "description": "Supports implementation check of items having singular creator (if/when) used on External Web Resources, Specific Resources, Textual Body Resources (Sections 3.2.1-6, 3.3)",
      "type": "object",
      "properties":
      {
          "items":
          {
              "type": "array",
              "minItems": 1,
              "not":
              {
                  "items":
                  { "not": { "$ref": "#/definitions/singleCreatorPropertyFound" } }
              }
          }
      },
      "required": ["items"]
    },

    "sourceSingleCreatorPropertyFound":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: Specific Resource source having singular creator key",
      "description": "Supports implementation check of singular creator (if/when) used on Specific Resource source (Sections 3.2.1-6, 3.3)",
      "type": "object",
      "properties":
      {
          "source":
          {
              "type": "object",
              "required": ["creator"] ,
              "$ref": "#/definitions/creatorSingularIfPresent"
          }
      },
      "required": ["source"]
    },

    "generatorValidIfPresent": {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Validation: generator value",
      "description": "True when the annotation, body or target has a single generator (Section 3.3.1)",
      "type": "object",
      "properties": {"generator":
        {"oneOf": [
          { "$ref": "id.json#/definitions/stringUri" },
          { "type": "object" },
          {
            "type": "array",
            "minItems": 1,
            "items":
            { "oneOf": [
              { "$ref": "id.json#/definitions/stringUri" },
              { "type": "object" }
            ]
            }
          }
        ]
        }
      }
    },

    "generatorPropertyFound": {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: generator key with qualifying body/target classes",
      "description": "Supports implementation check of generator (if/when) used on External Web Resources, Specific Resources, Textual Body Resources (Section 3.3.1)",
      "oneOf": [
         {"$ref": "annotations.json#/definitions/annotationTypeValueFound"}
      ],
      "allOf": [
      {"required": ["generator"]},
      {"$ref": "#/definitions/generatorValidIfPresent"}
      ]
    },

    "audienceDefinition":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Definition: audience object",
      "description": "True when object meets our requirements for audience value (Section 3.3.3)",
      "type": "object",
      "properties": {
        "id":  {"$ref": "id.json#/definitions/arraySingleStringUri"} ,
        "type": {
          "oneOf": [
          { "type": "string",
            "pattern": "^(schema:)"},
          { "type": "array",
            "minItems": 1,
            "items": {
              "type": "string",
              "pattern": "^(schema:)"
            }
          }
          ]
        }
      },
      "patternProperties": {
        "^(schema:)": { "type": ["string", "object", "array"] }
      },
      "additionalProperties": false
    },

    "audienceValidIfPresent":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Validation: audience value",
      "description": "True when no audience or audience property of the annotation, body, target, ... is valid (Section 3.3.3)",
      "type": "object",
      "properties": {
        "audience":
        { "oneOf":
          [
          { "$ref": "id.json#/definitions/stringUri" },
          { "$ref": "#/definitions/audienceDefinition" },
          {
            "type": "array",
            "minItems": 1,
            "items": {
              "oneOf": [
              { "$ref": "id.json#/definitions/stringUri" },
              { "$ref": "#/definitions/audienceDefinition" }
              ]
            }
          }
          ]
        }
      }
    },

    "audiencePropertyFound":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: audience key with qualifying body/target classes",
      "description": "Supports implementation check of audience (if/when) used on Annotation, External Web Resources, Specific Resources, Textual Body Resources (Section 3.3.3)",
      "oneOf": [
      {"$ref": "annotations.json#/definitions/annotationTypeValueFound"},
      {"$ref": "specificResource.json#/definitions/specificeResourceDetected"},
      {"$ref": "bodyTarget.json#/definitions/externalWebResourceDetected"},
        {"$ref": "bodyTarget.json#/definitions/textualBodyFound"}
      ],
      "allOf": [
      {"required": ["audience"]},
      {"$ref": "#/definitions/audienceValidIfPresent"}
      ]
    },

    "itemAudiencePropertyFound":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: items having audience key with qualifying body/target classes",
      "description": "Supports implementation check of items having audience (if/when) used on External Web Resources, Specific Resources, Textual Body Resources (Sections 3.2.1-6, 3.3)",
      "type": "object",
      "properties":
      {
          "items":
          {
              "type": "array",
              "minItems": 1,
              "not":
              {
                  "items":
                  { "not": { "$ref": "#/definitions/audiencePropertyFound" } }
              }
          }
      },
      "required": ["items"]
    },

    "sourceAudiencePropertyFound":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: Specific Resource source having audience key",
      "description": "Supports implementation check of audience (if/when) used on Specific Resource source (Sections 3.2.1-6, 3.3)",
      "type": "object",
      "properties":
      {
          "source":
          {
              "type": "object",
              "required": ["audience"] ,
              "$ref": "#/definitions/audienceValidIfPresent"
          }
      },
      "required": ["source"]
    },

    "accessibilityValidIfPresent":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Validation: accessibility value",
      "description": "True when no accessibility or accessibility property of the body, target, ... is valid (Section 3.3.4)",
      "type": "object",
      "properties": {
        "accessibility" : {
          "oneOf": [
          { "type": "string" },
          { "type": "array" ,
            "minItems": 1,
            "items": {
              "type": "string"
            }
          }
          ]
        }
      }
    },

    "accessibilityPropertyFound":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: accessibility key with qualifying body/target classes",
      "description": "Supports implementation check of accessibility (if/when) used on External Web Resources, Specific Resources, Textual Body Resources (Section 3.3.4)",
      "oneOf": [
      {"$ref": "specificResource.json#/definitions/specificeResourceDetected"},
      {"$ref": "bodyTarget.json#/definitions/externalWebResourceDetected"},
      {"$ref": "bodyTarget.json#/definitions/textualBodyFound"}
      ],
      "allOf": [
      {"required": ["accessibility"]},
      {"$ref": "#/definitions/accessibilityValidIfPresent"}
      ]
    },

    "itemAccessibilityPropertyFound":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: items having accessibility key with qualifying body/target classes",
      "description": "Supports implementation check of items having accessibility (if/when) used on External Web Resources, Specific Resources, Textual Body Resources (Sections 3.2.1-6, 3.3)",
      "type": "object",
      "properties":
      {
          "items":
          {
              "type": "array",
              "minItems": 1,
              "not":
              {
                  "items":
                  { "not": { "$ref": "#/definitions/accessibilityPropertyFound" } }
              }
          }
      },
      "required": ["items"]
    },

    "sourceAccessibilityPropertyFound":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: Specific Resource source having audience key",
      "description": "Supports implementation check of audience (if/when) used on Specific Resource source (Sections 3.2.1-6, 3.3)",
      "type": "object",
      "properties":
      {
          "source":
          {
              "type": "object",
              "required": ["accessibility"] ,
              "$ref": "#/definitions/accessibilityValidIfPresent"
          }
      },
      "required": ["source"]
    },

    "rightsValidIfPresent":
    {   "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Validation: rights value",
      "description": "True when the annotation, body or target has 0 or more rights properties that are strings of format uri (Section 3.3.6)",
      "type": "object",
      "properties": {"rights":
        { "oneOf": [
          { "$ref": "id.json#/definitions/stringUri" },
          { "type": "array",
            "minItems": 1,
            "items": { "$ref": "id.json#/definitions/stringUri" } }
        ]
        }
      }
    },

    "rightsPropertyFound":
    {   "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: rights key with qualifying annotation/body/target classes",
      "description": "Supports implementation check of rights (if/when) used on Annotation, External Web Resources, Specific Resources, Textual Body Resources (Sections 3.3.6)",
      "oneOf": [
      {"$ref": "annotations.json#/definitions/annotationTypeValueFound"},
      {"$ref": "specificResource.json#/definitions/specificeResourceDetected"},
      {"$ref": "bodyTarget.json#/definitions/externalWebResourceDetected"},
        {"$ref": "bodyTarget.json#/definitions/textualBodyFound"}
      ],
      "allOf": [
      {"required": ["rights"]},
      {"$ref": "#/definitions/rightsValidIfPresent"}
      ]
    },

    "itemRightsPropertyFound":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: items having rights key with qualifying body/target classes",
      "description": "Supports implementation check of items having rights (if/when) used on External Web Resources, Specific Resources, Textual Body Resources (Sections 3.2.1-6, 3.3)",
      "type": "object",
      "properties":
      {
          "items":
          {
              "type": "array",
              "minItems": 1,
              "not":
              {
                  "items":
                  { "not": { "$ref": "#/definitions/rightsPropertyFound" } }
              }
          }
      },
      "required": ["items"]
    },

    "sourceRightsPropertyFound":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: Specific Resource source having rights key",
      "description": "Supports implementation check of rights (if/when) used on Specific Resource source (Sections 3.2.1-6, 3.3)",
      "type": "object",
      "properties":
      {
          "source":
          {
              "type": "object",
              "required": ["rights"] ,
              "$ref": "#/definitions/rightsValidIfPresent"
          }
      },
      "required": ["source"]
    },

    "canonicalValidIfPresent":
    {   "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Validation: canonical value",
      "description": "True when the annotation, body or target has 0 or 1 canonical properties that are strings of format uri (Section 3.3.7)",
      "type": "object",
      "properties": {
        "canonical": { "$ref": "id.json#/definitions/arraySingleStringUri" }
      }
    },

    "canonicalPropertyFound":
    {   "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: canonical key with qualifying annotation/body/target classes",
      "description": "Supports implementation check of canonical (if/when) used on Annotation, External Web Resources, Specific Resources, Textual Body Resources (Sections 3.3.7)",
      "oneOf": [
      {"$ref": "annotations.json#/definitions/annotationTypeValueFound"},
      {"$ref": "specificResource.json#/definitions/specificeResourceDetected"},
      {"$ref": "bodyTarget.json#/definitions/externalWebResourceDetected"},
        {"$ref": "bodyTarget.json#/definitions/textualBodyFound"}
      ],
      "allOf": [
      {"required": ["canonical"]},
      {"$ref": "#/definitions/canonicalValidIfPresent"}
      ]
    },

    "itemCanonicalPropertyFound":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: items having canonical key with qualifying body/target classes",
      "description": "Supports implementation check of items having canonical (if/when) used on External Web Resources, Specific Resources, Textual Body Resources (Sections 3.2.1-6, 3.3)",
      "type": "object",
      "properties":
      {
          "items":
          {
              "type": "array",
              "minItems": 1,
              "not":
              {
                  "items":
                  { "not": { "$ref": "#/definitions/canonicalPropertyFound" } }
              }
          }
      },
      "required": ["items"]
    },

    "sourceCanonicalPropertyFound":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: Specific Resource source having canonical key",
      "description": "Supports implementation check of canonical (if/when) used on Specific Resource source (Sections 3.2.1-6, 3.3)",
      "type": "object",
      "properties":
      {
          "source":
          {
              "type": "object",
              "required": ["canonical"] ,
              "$ref": "#/definitions/canonicalValidIfPresent"
          }
      },
      "required": ["source"]
    },

    "viaValidIfPresent":
    {   "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Validation: via value",
      "description": "True when the annotation, body or target has 0 or more via properties that are strings of format uri (Section 3.3.7)",
      "type": "object",
      "properties": {"via":
        { "oneOf": [
          { "$ref": "id.json#/definitions/stringUri" },
          { "type": "array",
            "minItems": 1,
            "items": { "$ref": "id.json#/definitions/stringUri" } }
        ]
        }
      }
    },

    "viaPropertyFound":
    {   "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: via key with qualifying annotation/body/target classes",
      "description": "Supports implementation check of via (if/when) used on Annotation, External Web Resources, Specific Resources, Textual Body Resources (Sections 3.3.7)",
      "oneOf": [
      {"$ref": "annotations.json#/definitions/annotationTypeValueFound"},
      {"$ref": "specificResource.json#/definitions/specificeResourceDetected"},
      {"$ref": "bodyTarget.json#/definitions/externalWebResourceDetected"},
        {"$ref": "bodyTarget.json#/definitions/textualBodyFound"}
      ],
      "allOf": [
      {"required": ["via"]},
      {"$ref": "#/definitions/viaValidIfPresent"}
      ]
    },

    "itemViaPropertyFound":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: items having via key with qualifying body/target classes",
      "description": "Supports implementation check of items having via (if/when) used on External Web Resources, Specific Resources, Textual Body Resources (Sections 3.2.1-6, 3.3)",
      "type": "object",
      "properties":
      {
          "items":
          {
              "type": "array",
              "minItems": 1,
              "not":
              {
                  "items":
                  { "not": { "$ref": "#/definitions/viaPropertyFound" } }
              }
          }
      },
      "required": ["items"]
    },

    "sourceViaPropertyFound":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: Specific Resource source having via key",
      "description": "Supports implementation check of via (if/when) used on Specific Resource source (Sections 3.2.1-6, 3.3)",
      "type": "object",
      "properties":
      {
          "source":
          {
              "type": "object",
              "required": ["via"] ,
              "$ref": "#/definitions/viaValidIfPresent"
          }
      },
      "required": ["source"]
    },

    "purposeRecognizedIfPresent":
    {   "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Validation: purpose value",
      "description": "True when the body has 0 or more purpose property values (Section 3.3.5)",
      "type": "object",
      "properties": {"purpose":
        { "oneOf": [
          { "$ref": "annotations.json#/definitions/motivationList" },
          { "type": "array",
            "minItems": 1,
            "items": { "$ref": "annotations.json#/definitions/motivationList" } }
        ]
        }
      }
    },

    "purposePropertyFound":
    {   "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: purpose key with qualifying body classes",
      "description": "Supports implementation check of purpose (if/when) used on Specific Resource Body or Textual Body (Sections 3.3.5)",
      "oneOf": [
      {"$ref": "specificResource.json#/definitions/specificeResourceDetected"},
      {"$ref": "bodyTarget.json#/definitions/textualBodyFound"}
      ],
      "allOf": [
      {"required": ["purpose"]},
      {"$ref": "#/definitions/purposeRecognizedIfPresent"}
      ]
    },

    "itemPurposePropertyFound":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Collate: items having purpose key with qualifying body/target classes",
      "description": "Supports implementation check of items having purpose (if/when) used on Specific Resources, Textual Body Resources (Sections 3.2.1-6, 3.3)",
      "type": "object",
      "properties":
      {
          "items":
          {
              "type": "array",
              "minItems": 1,
              "not":
              {
                  "items":
                  { "not": { "$ref": "#/definitions/purposePropertyFound" } }
              }
          }
      },
      "required": ["items"]
    },

    "creatorAgentWithIdFound":
    { "type": "object",
      "properties":
      {  "creator":
        { "oneOf":
          [
          { "$ref": "id.json#/definitions/idValueFound" },
          { "type": "array",
            "minItems": 1,
            "not":
            { "items": { "not": { "$ref": "id.json#/definitions/idValueFound" } } }
          }
          ]
        }
      },
      "required": ["creator"]
    },

    "sourceCreatorAgentWithIdFound":
    { "type": "object",
      "properties":
        {
            "source":
            { "$ref": "#/definitions/creatorAgentWithIdFound" }
        },
       "required": ["source"]
    },

    "itemCreatorAgentWithIdFound":
    {
      "type": "object",
      "properties":
      {
          "items":
          {
              "type": "array",
              "minItems": 1,
              "not":
              {
                  "items":
                  { "not": { "$ref": "#/definitions/creatorAgentWithIdFound" } }
              }
          }
      },
      "required": ["items"]
    },

    "agentTypeDefinition":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Definition: Agent type value",
      "description": "True when the object (creator or generator agent) has no type or has at least one recognized Agent type value (Section 3.3.2)",
      "type": "object",
      "properties":
      {
        "type":
        {
          "oneOf":
            [
            {"type": "string",
              "enum": ["Person", "Organization", "Software"] },
            {"type": "array",
              "minItems": 1,
              "not":
              {
                "items" :
                { "not":
                  { "type": "string",
                    "enum": ["Person", "Organization", "Software"] }
                }
              }
            }
            ]
        }
      }
    },

    "agentTypeFound":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Check for implementation of Agent type value",
      "description": "True when the object (creator or generator agent) has at least one recognized Agent type value (Section 3.3.2)",
      "allOf": [
      {"required": ["type"]},
      {"$ref": "#/definitions/agentTypeDefinition"}
      ]
    },

    "creatorAgentWithTypeFound":
    { "type": "object",
      "properties":
      {  "creator":
        { "oneOf":
          [
          { "$ref": "#/definitions/agentTypeFound" },
          { "type": "array",
            "minItems": 1,
            "not":
            { "items": { "not": { "$ref": "#/definitions/agentTypeFound" } } }
          }
          ]
        }
      },
      "required": ["creator"]
    },

    "sourceCreatorAgentWithTypeFound":
    { "type": "object",
      "properties":
        {
            "source":
            { "$ref": "#/definitions/creatorAgentWithTypeFound" }
        },
       "required": ["source"]
    },

    "itemCreatorAgentWithTypeFound":
    {
      "type": "object",
      "properties":
      {
          "items":
          {
              "type": "array",
              "minItems": 1,
              "not":
              {
                  "items":
                  { "not": { "$ref": "#/definitions/creatorAgentWithTypeFound" } }
              }
          }
      },
      "required": ["items"]
    },

    "agentNameDefinition":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Definition: Agent name value",
      "description": "True when the object (creator or generator agent) has no name or has Agent name(s) of type string (Section 3.3.2)",
      "type": "object",
      "properties":
      {
        "name":
        {
          "oneOf":
            [
            {"type": "string" },
            {"type": "array",
              "minItems": 1,
              "items": {"type": "string"}
            }
            ]
        }
      }
    },

    "agentSingularNameDefinition":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Definition: Agent name value",
      "description": "True when the object (creator or generator agent) has no name or has exactly one Agent name that is a string (Section 3.3.2)",
      "type": "object",
      "properties":
      {
        "name":
        {
          "oneOf":
            [
            {"type": "string" },
            {"type": "array",
              "minItems": 1,
              "maxItems": 1,
              "items": {"type": "string"}
            }
            ]
        }
      }
    },

    "agentNameFound":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Check for implementation of Agent name value",
      "description": "True when the object (creator or generator agent) has Agent name value(s) (Section 3.3.2)",
      "allOf": [
      {"required": ["name"]},
      {"$ref": "#/definitions/agentNameDefinition"}
      ]
    },

    "creatorAgentWithNameFound":
    { "type": "object",
      "properties":
      {  "creator":
        { "oneOf":
          [
          { "$ref": "#/definitions/agentNameFound" },
          { "type": "array",
            "minItems": 1,
            "not":
            { "items": { "not": { "$ref": "#/definitions/agentNameFound" } } }
          }
          ]
        }
      },
      "required": ["creator"]
    },

    "sourceCreatorAgentWithNameFound":
    { "type": "object",
      "properties":
        {
            "source":
            { "$ref": "#/definitions/creatorAgentWithNameFound" }
        },
       "required": ["source"]
    },

    "itemCreatorAgentWithNameFound":
    {
      "type": "object",
      "properties":
      {
          "items":
          {
              "type": "array",
              "minItems": 1,
              "not":
              {
                  "items":
                  { "not": { "$ref": "#/definitions/creatorAgentWithNameFound" } }
              }
          }
      },
      "required": ["items"]
    },

    "agentSingularNameFound":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Check for implementation of Agent name value",
      "description": "True when the object (creator or generator agent) has exactly one Agent name value (Section 3.3.2)",
      "allOf": [
      {"required": ["name"]},
      {"$ref": "#/definitions/agentSingularNameDefinition"}
      ]
    },

    "creatorAgentWithSingularNameFound":
    { "type": "object",
      "properties":
      {  "creator":
        { "oneOf":
          [
          { "$ref": "#/definitions/agentSingularNameFound" },
          { "type": "array",
            "minItems": 1,
            "not":
            { "items": { "not": { "$ref": "#/definitions/agentSingularNameFound" } } }
          }
          ]
        }
      },
      "required": ["creator"]
    },

    "sourceCreatorAgentWithSingularNameFound":
    { "type": "object",
      "properties":
        {
            "source":
            { "$ref": "#/definitions/creatorAgentWithSingularNameFound" }
        },
       "required": ["source"]
    },

    "itemCreatorAgentWithSingularNameFound":
    {
      "type": "object",
      "properties":
      {
          "items":
          {
              "type": "array",
              "minItems": 1,
              "not":
              {
                  "items":
                  { "not": { "$ref": "#/definitions/creatorAgentWithSingularNameFound" } }
              }
          }
      },
      "required": ["items"]
    },

    "agentSingularNicknameDefinition":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Definition: Agent nickname value",
      "description": "True when the object (creator or generator agent) has no nickname or has exacly one Agent nickname that is a string (Section 3.3.2)",
      "type": "object",
      "properties":
      {
        "nickname":
        {
          "oneOf":
            [
            {"type": "string" },
            {"type": "array",
              "minItems": 1,
              "maxItems": 1,
              "items": {"type": "string"}
            }
            ]
        }
      }
    },

    "agentSingularNicknameFound":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Check for implementation of Agent nickname value",
      "description": "True when the object (creator or generator agent) has an Agent nickname value (Section 3.3.2)",
      "allOf": [
      {"required": ["nickname"]},
      {"$ref": "#/definitions/agentSingularNicknameDefinition"}
      ]
    },

    "creatorAgentWithSingularNicknameFound":
    { "type": "object",
      "properties":
      {  "creator":
        { "oneOf":
          [
          { "$ref": "#/definitions/agentSingularNicknameFound" },
          { "type": "array",
            "minItems": 1,
            "not":
            { "items": { "not": { "$ref": "#/definitions/agentSingularNicknameFound" } } }
          }
          ]
        }
      },
      "required": ["creator"]
    },

    "sourceCreatorAgentWithSingularNicknameFound":
    { "type": "object",
      "properties":
        {
            "source":
            { "$ref": "#/definitions/creatorAgentWithSingularNicknameFound" }
        },
       "required": ["source"]
    },

    "itemCreatorAgentWithSingularNicknameFound":
    {
      "type": "object",
      "properties":
      {
          "items":
          {
              "type": "array",
              "minItems": 1,
              "not":
              {
                  "items":
                  { "not": { "$ref": "#/definitions/creatorAgentWithSingularNicknameFound" } }
              }
          }
      },
      "required": ["items"]
    },

    "agentEmailDefinition":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Definition: Agent email value",
      "description": "True when the object (creator or generator agent) has no email or has Agent one or more email addresses that start(s) mailto: and is format uri (Section 3.3.2)",
      "type": "object",
      "properties":
      {
        "email":
        {
          "oneOf":
            [
            { "type": "string",
              "pattern": "^(mailto)",
              "format": "uri" },
            {"type": "array",
              "minItems": 1,
              "items": {"type": "string",
                "pattern": "^(mailto)",
                "format": "uri" }
            }
            ]
        }
      }
    },

    "agentEmailFound":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Check for implementation of Agent email value",
      "description": "True when the object (creator or generator agent) has Agent email value(s) (Section 3.3.2)",
      "allOf": [
      {"required": ["email"]},
      {"$ref": "#/definitions/agentEmailDefinition"}
      ]
    },

    "creatorAgentWithEmailFound":
    { "type": "object",
      "properties":
      {  "creator":
        { "oneOf":
          [
          { "$ref": "#/definitions/agentEmailFound" },
          { "type": "array",
            "minItems": 1,
            "not":
            { "items": { "not": { "$ref": "#/definitions/agentEmailFound" } } }
          }
          ]
        }
      },
      "required": ["creator"]
    },

    "sourceCreatorAgentWithEmailFound":
    { "type": "object",
      "properties":
        {
            "source":
            { "$ref": "#/definitions/creatorAgentWithEmailFound" }
        },
       "required": ["source"]
    },

    "itemCreatorAgentWithEmailFound":
    {
      "type": "object",
      "properties":
      {
          "items":
          {
              "type": "array",
              "minItems": 1,
              "not":
              {
                  "items":
                  { "not": { "$ref": "#/definitions/creatorAgentWithEmailFound" } }
              }
          }
      },
      "required": ["items"]
    },

    "agentEmail_sha1Definition":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Definition: Agent email_sha1 value",
      "description": "True when the object (creator or generator agent) has no email_sha1 or has one or more email_sha1 that is/are a string (Section 3.3.2)",
      "type": "object",
      "properties":
      {
        "email_sha1":
        {
          "oneOf":
            [
            {"type": "string" },
            {"type": "array",
              "minItems": 1,
              "items": {"type": "string"}
            }
            ]
        }
      }
    },

    "agentEmail_sha1Found":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Check for implementation of Agent email_sha1 value",
      "description": "True when the object (creator or generator agent) has has one or more email_sha1 that is/are a string (Section 3.3.2)",
      "allOf": [
      {"required": ["email_sha1"]},
      {"$ref": "#/definitions/agentEmail_sha1Definition"}
      ]
    },

    "creatorAgentWithEmail_sha1Found":
    { "type": "object",
      "properties":
      {  "creator":
        { "oneOf":
          [
          { "$ref": "#/definitions/agentEmail_sha1Found" },
          { "type": "array",
            "minItems": 1,
            "not":
            { "items": { "not": { "$ref": "#/definitions/agentEmail_sha1Found" } } }
          }
          ]
        }
      },
      "required": ["creator"]
    },

    "sourceCreatorAgentWithEmail_sha1Found":
    { "type": "object",
      "properties":
        {
            "source":
            { "$ref": "#/definitions/creatorAgentWithEmail_sha1Found" }
        },
       "required": ["source"]
    },

    "itemCreatorAgentWithEmail_sha1Found":
    {
      "type": "object",
      "properties":
      {
          "items":
          {
              "type": "array",
              "minItems": 1,
              "not":
              {
                  "items":
                  { "not": { "$ref": "#/definitions/creatorAgentWithEmail_sha1Found" } }
              }
          }
      },
      "required": ["items"]
    },

    "agentHomepageDefinition":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Definition: Agent homepage value",
      "description": "True when the object (creator or generator agent) has no homempage or has one or more agent homepage addresses of format uri (Section 3.3.2)",
      "type": "object",
      "properties":
      {
        "email":
        {
          "oneOf":
            [
            { "type": "string",
              "format": "uri" },
            {"type": "array",
              "minItems": 1,
              "items": {"type": "string",
                "format": "uri" }
            }
            ]
        }
      }
    },

    "agentHomepageFound":
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "Check for implementation of Agent homepage value",
      "description": "True when the object (creator or generator agent) has Agent homepage value(s) (Section 3.3.2)",
      "allOf": [
      {"required": ["homepage"]},
      {"$ref": "#/definitions/agentHomepageDefinition"}
      ]
    },

    "creatorAgentWithHomepageFound":
    { "type": "object",
      "properties":
      {  "creator":
        { "oneOf":
          [
          { "$ref": "#/definitions/agentHomepageFound" },
          { "type": "array",
            "minItems": 1,
            "not":
            { "items": { "not": { "$ref": "#/definitions/agentHomepageFound" } } }
          }
          ]
        }
      },
      "required": ["creator"]
    },

    "sourceCreatorAgentWithHomepageFound":
    { "type": "object",
      "properties":
        {
            "source":
            { "$ref": "#/definitions/creatorAgentWithHomepageFound" }
        },
       "required": ["source"]
    },

    "itemCreatorAgentWithHomepageFound":
    {
      "type": "object",
      "properties":
      {
          "items":
          {
              "type": "array",
              "minItems": 1,
              "not":
              {
                  "items":
                  { "not": { "$ref": "#/definitions/creatorAgentWithHomepageFound" } }
              }
          }
      },
      "required": ["items"]
    }

  }
}
