| { |
| "$schema": "http://json-schema.org/draft-04/schema#", |
| "id": "collections.json", |
| "title": "Definitions: Annotation Collections.", |
| "description": "Schemas in #/definitions detect or validate keys/objects (direct children) uniquely used to describe Annotation Collections (Section 5.1 and 5.2).", |
| "definitions": { |
| |
| "contextValueFound": { |
| "$schema": "http://json-schema.org/draft-04/schema#", |
| "title": "Definition: Valid @context string included in Collection / Page description", |
| "description": "True when the string has value http://www.w3.org/ns/anno.jsonld (Section 5)", |
| "type": "string", |
| "enum": [ "http://www.w3.org/ns/anno.jsonld" ] |
| }, |
| |
| "contextValueInArrayFound": { |
| "$schema": "http://json-schema.org/draft-04/schema#", |
| "title": "Definition: Valid @context string found in array included in Collection / Page description", |
| "description": "True when the array contains a string item having value http://www.w3.org/ns/anno.jsonld (Section 5)", |
| "type": "array", |
| "not": |
| { "items": |
| { "not": |
| { "$ref": "#/definitions/contextValueFound" } |
| } |
| } |
| }, |
| |
| "annotationCollectionTypeValueRecognized": { |
| "$schema": "http://json-schema.org/draft-04/schema#", |
| "title": "Definition: Valid AnnotationCollection type value string included in Collection description", |
| "description": "True when the string has value 'AnnotationCollection' (Section 5.1)", |
| "type": "string", |
| "enum": [ "AnnotationCollection" ] |
| }, |
| |
| "annotationCollectionTypeValueInArrayRecognized": { |
| "$schema": "http://json-schema.org/draft-04/schema#", |
| "title": "Definition: Valid AnnotationCollection type in array included in Collection description", |
| "description": "True when the array contains a string item having value 'AnnotationCollection' (Section 5.1)", |
| "type": "array", |
| "not": |
| { "items": |
| { "not": |
| { "$ref": "#/definitions/annotationCollectionTypeValueRecognized" } |
| } |
| } |
| }, |
| |
| "annotationCollectionTypeValueFound": |
| { |
| "$schema": "http://json-schema.org/draft-04/schema#", |
| "title": "Implementation: AnnotationCollection type", |
| "description": "True when the Annotation Collection has type key and 'AnnotationCollection' is a value of type (Section 5.1)", |
| "type": "object", |
| "required": [ "type" ], |
| "properties": { |
| "type": { |
| "oneOf": [ |
| { "$ref": "#/definitions/annotationCollectionTypeValueRecognized" }, |
| { "$ref": "#/definitions/annotationCollectionTypeValueInArrayRecognized" } |
| ] |
| } |
| } |
| }, |
| |
| "annotationPageTypeValueRecognized": { |
| "$schema": "http://json-schema.org/draft-04/schema#", |
| "title": "Definition: Valid AnnotationPage type value string included in Page description", |
| "description": "True when the string has value 'AnnotationPage' (Section 5.2)", |
| "type": "string", |
| "enum": [ "AnnotationPage" ] |
| }, |
| |
| "annotationPageTypeValueInArrayRecognized": { |
| "$schema": "http://json-schema.org/draft-04/schema#", |
| "title": "Definition: Valid AnnotationPage type in array included in Page description", |
| "description": "True when the array contains a string item having value 'AnnotationPage' (Section 5.2)", |
| "type": "array", |
| "not": |
| { "items": |
| { "not": |
| { "$ref": "#/definitions/annotationPageTypeValueRecognized" } |
| } |
| } |
| }, |
| |
| "annotationPageTypeValueFound": |
| { |
| "$schema": "http://json-schema.org/draft-04/schema#", |
| "title": "Implementation: AnnotationPage type", |
| "description": "True when the Annotation Page has type key and 'AnnotationPage' is a value of type (Section 5.2)", |
| "type": "object", |
| "required": [ "type" ], |
| "properties": { |
| "type": { |
| "oneOf": [ |
| { "$ref": "#/definitions/annotationPageTypeValueRecognized" }, |
| { "$ref": "#/definitions/annotationPageTypeValueInArrayRecognized" } |
| ] |
| } |
| } |
| }, |
| |
| "labelDefinition": |
| { |
| "$schema": "http://json-schema.org/draft-04/schema#", |
| "title": "Definition: label (Annotation Collections)", |
| "description": "True when the object has no label or has one or more label values of type string (Section 5.1)", |
| "type": "object", |
| "properties": |
| { |
| "label": |
| { |
| "oneOf": |
| [ |
| {"type": "string" }, |
| {"type": "array", |
| "minItems": 1, |
| "items": {"type": "string"} |
| } |
| ] |
| } |
| } |
| }, |
| |
| "labelFound": |
| { |
| "$schema": "http://json-schema.org/draft-04/schema#", |
| "title": "Check for implementation of Annotation Collection label", |
| "description": "True when the object has one or more label value(s) (Section 5.1)", |
| "allOf": [ |
| {"required": ["label"]}, |
| {"$ref": "#/definitions/labelDefinition"} |
| ] |
| }, |
| |
| "totalDefinition": |
| { |
| "$schema": "http://json-schema.org/draft-04/schema#", |
| "title": "Definition: total (Annotation Collections)", |
| "description": "True when the object has no total key or has exactly one total value of type integer greater or equal to zero (Section 5.1)", |
| "type": "object", |
| "properties": |
| { |
| "total": |
| { |
| "oneOf": |
| [ |
| {"type": "integer", |
| "minimum": 0 }, |
| {"type": "array", |
| "minItems": 1, |
| "maxItems": 1, |
| "items": {"type": "integer", |
| "minimum": 0 } |
| } |
| ] |
| } |
| } |
| }, |
| |
| "totalFound": |
| { |
| "$schema": "http://json-schema.org/draft-04/schema#", |
| "title": "Check for implementation of Annotation Collection total key", |
| "description": "True when the object has exactly one total value (Section 5.1)", |
| "allOf": [ |
| {"required": ["total"]}, |
| {"$ref": "#/definitions/totalDefinition"} |
| ] |
| }, |
| |
| "totalMoreThanZero": |
| { |
| "$schema": "http://json-schema.org/draft-04/schema#", |
| "title": "Definition: total more than zero (Annotation Collections)", |
| "description": "True when the object has exactly one total value of type integer and greater than zero (Section 5.1)", |
| "type": "object", |
| "properties": |
| { |
| "total": |
| { |
| "oneOf": |
| [ |
| {"type": "integer", |
| "minimum": 0, |
| "exclusiveMinimum": true}, |
| {"type": "array", |
| "minItems": 1, |
| "maxItems": 1, |
| "items": {"type": "integer", |
| "minimum": 0, |
| "exclusiveMinimum": true} |
| } |
| ] |
| } |
| }, |
| "required": [ "total" ] |
| }, |
| |
| "firstValidIfPresent": |
| { "$schema": "http://json-schema.org/draft-04/schema#", |
| "title": "Validation: first value (Annotation Collection)", |
| "description": "True when the Annotation Collection has no first key or has 1 first key value that is string of format uri or has first key value that is an object of type AnnotationPage (Section 5.1)", |
| "type": "object", |
| "properties": {"first": |
| { "oneOf": [ |
| { |
| "oneOf": [ |
| { "$ref": "id.json#/definitions/stringUri" }, |
| { "$ref": "#/definitions/annotationPageTypeValueFound" } |
| ] |
| }, |
| { "type": "array", |
| "minItems": 1, |
| "maxItems": 1, |
| "items": { |
| "oneOf": [ |
| { "$ref": "id.json#/definitions/stringUri" }, |
| { "$ref": "#/definitions/annotationPageTypeValueFound" } |
| ] |
| } |
| } |
| ] |
| } |
| } |
| }, |
| |
| "firstFound": |
| { |
| "$schema": "http://json-schema.org/draft-04/schema#", |
| "title": "Check for implementation of Annotation Collection first key", |
| "description": "True when the object has exactly one first value (Section 5.1)", |
| "allOf": [ |
| {"required": ["first"]}, |
| {"$ref": "#/definitions/firstValidIfPresent"} |
| ] |
| }, |
| |
| "firstRequiredIfTotalMoreThanZero": |
| { |
| "$schema": "http://json-schema.org/draft-04/schema#", |
| "title": "If total greater than zero, check for implementation of Annotation Collection first key", |
| "description": "True when the object has no total or has total = zero or has exactly one first value (Section 5.1)", |
| "type": "object", |
| "oneOf": [ |
| { |
| "allOf": [ |
| { "$ref": "#/definitions/totalMoreThanZero" }, |
| { "$ref": "#/definitions/firstFound" } |
| ] |
| }, |
| { "not": { "$ref": "#/definitions/totalMoreThanZero" } } |
| ] |
| }, |
| |
| "lastValidIfPresent": |
| { "$schema": "http://json-schema.org/draft-04/schema#", |
| "title": "Validation: last value (Annotation Collection)", |
| "description": "True when the Annotation Collection has no last key or has 1 last key value that is string of format uri (Section 5.1)", |
| "type": "object", |
| "properties": {"last": |
| { "oneOf": [ |
| { "$ref": "id.json#/definitions/stringUri" }, |
| { "type": "array", |
| "minItems": 1, |
| "maxItems": 1, |
| "items": { "$ref": "id.json#/definitions/stringUri" } |
| } |
| ] |
| } |
| } |
| }, |
| |
| "lastFound": |
| { |
| "$schema": "http://json-schema.org/draft-04/schema#", |
| "title": "Check for implementation of Annotation Collection last key", |
| "description": "True when the object has exactly one last value that is string of format uri (Section 5.1)", |
| "allOf": [ |
| {"required": ["last"]}, |
| {"$ref": "#/definitions/lastValidIfPresent"} |
| ] |
| }, |
| |
| "partOfValidIfPresent": |
| { "$schema": "http://json-schema.org/draft-04/schema#", |
| "title": "Validation: partOf value (Annotation Page)", |
| "description": "True when the Annotation Page has no partOf key or has 1 partOf key value that is string of format uri (Section 5.2)", |
| "type": "object", |
| "properties": {"partOf": |
| { "oneOf": [ |
| { "$ref": "id.json#/definitions/arraySingleStringUri" }, |
| { "$ref": "id.json#/definitions/idValueFound" } |
| ] |
| } |
| } |
| }, |
| |
| "partOfFound": |
| { |
| "$schema": "http://json-schema.org/draft-04/schema#", |
| "title": "Check for implementation of Annotation Page partOf key", |
| "description": "True when the object has exactly one partOf value that is string of format uri (Section 5.2)", |
| "allOf": [ |
| {"required": ["partOf"]}, |
| {"$ref": "#/definitions/partOfValidIfPresent"} |
| ] |
| }, |
| |
| "nextValidIfPresent": |
| { "$schema": "http://json-schema.org/draft-04/schema#", |
| "title": "Validation: next value (Annotation Page)", |
| "description": "True when the Annotation Page has no next key or has 1 next key value that is string of format uri (Section 5.2)", |
| "type": "object", |
| "properties": {"next": |
| { "oneOf": [ |
| { "$ref": "id.json#/definitions/stringUri" }, |
| { "type": "array", |
| "minItems": 1, |
| "maxItems": 1, |
| "items": { "$ref": "id.json#/definitions/stringUri" } |
| } |
| ] |
| } |
| } |
| }, |
| |
| "nextFound": |
| { |
| "$schema": "http://json-schema.org/draft-04/schema#", |
| "title": "Check for implementation of Annotation Page next key", |
| "description": "True when the object has exactly one next value that is string of format uri (Section 5.2)", |
| "allOf": [ |
| {"required": ["next"]}, |
| {"$ref": "#/definitions/nextValidIfPresent"} |
| ] |
| }, |
| |
| "prevValidIfPresent": |
| { "$schema": "http://json-schema.org/draft-04/schema#", |
| "title": "Validation: prev value (Annotation Page)", |
| "description": "True when the Annotation Page has no prev key or has 1 prev key value that is string of format uri (Section 5.2)", |
| "type": "object", |
| "properties": {"prev": |
| { "oneOf": [ |
| { "$ref": "id.json#/definitions/stringUri" }, |
| { "type": "array", |
| "minItems": 1, |
| "maxItems": 1, |
| "items": { "$ref": "id.json#/definitions/stringUri" } |
| } |
| ] |
| } |
| } |
| }, |
| |
| "prevFound": |
| { |
| "$schema": "http://json-schema.org/draft-04/schema#", |
| "title": "Check for implementation of Annotation Page prev key", |
| "description": "True when the object has exactly one prev value that is string of format uri (Section 5.2)", |
| "allOf": [ |
| {"required": ["prev"]}, |
| {"$ref": "#/definitions/prevValidIfPresent"} |
| ] |
| }, |
| |
| "startIndexDefinition": |
| { |
| "$schema": "http://json-schema.org/draft-04/schema#", |
| "title": "Definition: startIndex (Annotation Pages)", |
| "description": "True when the object has no startIndex key or has exactly one startIndex value of type integer greater or equal to zero (Section 5.2)", |
| "type": "object", |
| "properties": |
| { |
| "startIndex": |
| { |
| "oneOf": |
| [ |
| {"type": "integer", |
| "minimum": 0 }, |
| {"type": "array", |
| "minItems": 1, |
| "maxItems": 1, |
| "items": {"type": "integer", |
| "minimum": 0 } |
| } |
| ] |
| } |
| } |
| }, |
| |
| "startIndexFound": |
| { |
| "$schema": "http://json-schema.org/draft-04/schema#", |
| "title": "Check for implementation of Annotation Page startIndex key", |
| "description": "True when the object has exactly one startIndex value (Section 5.2)", |
| "allOf": [ |
| {"required": ["startIndex"]}, |
| {"$ref": "#/definitions/startIndexDefinition"} |
| ] |
| }, |
| |
| "itemsFound": |
| { |
| "$schema": "http://json-schema.org/draft-04/schema#", |
| "title": "Check for implementation of Annotation Page items key", |
| "description": "True when the object has items key with value that is an array of strings of format uri and/or objects of type Annotation (Section 5.2)", |
| "type": "object", |
| "properties": |
| { "items": |
| { "type": "array", |
| "items": { |
| "oneOf":[ |
| { "$ref": "annotations.json#/definitions/annotationTypeValueFound" }, |
| { "type": "string", |
| "format": "uri" } |
| ] |
| } |
| } |
| }, |
| "required": [ "items" ] |
| } |
| |
| } |
| } |