# #####################################################################################
# YAML File Information
# #####################################################################################
# 
# Author:         Colin Smythe (IMS Global, UK)
# Date:           19th April, 2021
# Version:        1.0
# Status:         IMS Final Release
# Description:    The IMS LTI Resource Search (RS) Service defines how to search digital respositories for a set of resources. 
# 
# History:        This is the first release of the LTI Resource Search (RS) Service definition.
# 
# License:        IPR and Distribution Notices
# 
#                 This machine readable file is derived from the IMS LTI Resource Search Service Version 1.0.1
#                 found at http://www.imsglobal.org/rs and the original IMS Global schema binding or code base
#                 http://www.imsglobal.org/rs.
# 
#                 Recipients of this document are requested to submit, with their comments, notification of any relevant 
#                 patent claims or other intellectual property rights of which they may be aware that might be infringed by
#                 any implementation of the specification set forth in this document, and to provide supporting documentation.
# 
#                 IMS takes no position regarding the validity or scope of any intellectual property or other rights that might
#                 be claimed to pertain to the implementation or use of the technology described in this document or the extent 
#                 to which any license under such rights might or might not be available; neither does it represent that it has 
#                 made any effort to identify any such rights. Information on IMS procedures with respect to rights in IMS 
#                 specifications can be found at the IMS Global Intellectual Property Rights web page: http://www.imsglobal.org/ipr/imsipr_policyFinal.pdf.
# 
#                 Copyright (c) IMS Global Learning Consortium 1999-2021. All Rights Reserved.
# 
#                 Use of this specification to develop products or services is governed by the license with IMS found on the IMS website: http://www.imsglobal.org/license.html.
# 
#                 Permission is granted to all parties to use excerpts from this document as needed in producing requests for proposals.
# 
#                 The limited permissions granted above are perpetual and will not be revoked by IMS or its successors or assigns.
# 
#                 THIS SPECIFICATION IS BEING OFFERED WITHOUT ANY WARRANTY WHATSOEVER, AND IN PARTICULAR, ANY WARRANTY OF NONINFRINGEMENT IS
#                 EXPRESSLY DISCLAIMED. ANY USE OF THIS SPECIFICATION SHALL BE MADE ENTIRELY AT THE IMPLEMENTERS OWN RISK, AND NEITHER THE CONSORTIUM
#                 NOR ANY OF ITS MEMBERS OR SUBMITTERS, SHALL HAVE ANY LIABILITY WHATSOEVER TO ANY IMPLEMENTER OR THIRD PARTY FOR ANY DAMAGES OF
#                 ANY NATURE WHATSOEVER, DIRECTLY OR INDIRECTLY, ARISING FROM THE USE OF THIS SPECIFICATION.
# 
# Source UML File Information
# ===========================
# The source file information must be supplied as an XMI file (without diagram layout information).
# The supported UML authoring tools are:
# (a) Poseidon - v6 (and later)
# (b) Papyrus - v1.1.3 (and later)
# 
# Source XSLT File Information
# ============================
# XSL Generator:    Specificationv1p0_GenerationToolv1.xsl
# XSLT Processor:   Saxon
# Release:          1.0
# Date:             31st January, 2021
# Autogen Engineer: Colin Smythe (IMS Global, UK)
# Autogen Date:     2021-04-19
# 
# IMS Global Auto-generation Binding Tool-kit (I-BAT)
# ===================================================
# This file was auto-generated using the IMS Global Binding Auto-generation Tool-kit (I-BAT).  While every
# attempt has been made to ensure that this tool auto-generates the files correctly, users should be aware
# that this is an experimental tool.  Permission is given to make use of this tool.  IMS Global makes no
# claim on the materials created by third party users of this tool.  Details on how to use this tool
# are contained in the IMS Global "I-BAT" documentation available at the IMS Global web-site:
# http://www.imsglobal.org.
# 
# Tool Copyright:  2012-2021  (c) IMS Global Learning Consortium Inc.  All Rights Reserved.
# 
# #####################################################################################

swagger: '2.0'

#####################################################################################
#                               API Information                                     #
#####################################################################################
info: 
    version: '1.0.1'
    title: LTI Resource Search Service OpenAPI (YAML) Definition
    description: The IMS LTI Resource Search (RS) Service defines how to search digital respositories for a set of resources. 
    termsOfService: Permission is granted to all parties to use excerpts from this document as needed in producing requests for proposals. The limited permissions granted above are perpetual and will not be revoked by IMS or its successors or assigns. THIS API DEFINITION IS BEING OFFERED WITHOUT ANY WARRANTY WHATSOEVER, AND IN PARTICULAR, ANY WARRANTY OF NONINFRINGEMENT IS EXPRESSLY DISCLAIMED. ANY USE OF THIS SPECIFICATION SHALL BE MADE ENTIRELY AT THE IMPLEMENTERS OWN RISK, AND NEITHER THE  CONSORTIUM, NOR ANY OF ITS MEMBERS OR SUBMITTERS, SHALL HAVE ANY LIABILITY WHATSOEVER TO ANY IMPLEMENTER OR THIRD PARTY FOR ANY DAMAGES OF ANY NATURE WHATSOEVER,  DIRECTLY OR INDIRECTLY, ARISING FROM THE USE OF THIS API DEFINITION.
    contact: 
        name: Lisa Mattson (COO), IMS Global
        url: http://www.imsglobal.org
        email: lmattson@imsglobal.org
    license: 
        name: IMS Global
        url: https://www.imsglobal.org/license.html

#####################################################################################
#                   Host, Base Path, Schemes and Content Types                      #
#####################################################################################
host: www.imsglobal.org
basePath: /ims/rs/v1p0
schemes: 
    - http
    - https
consumes: 
    - application/json
produces: 
    - application/json

#####################################################################################
#                                  Tags                                             #
#####################################################################################
tags: 
    - name: ResourceSearchManager
      description: |
        The set of service operations that manage searching for resources.
    - name: SubjectsManager
      description: |
        The set of service operations that manage access to the lists of subjects supported by a LOR.

#####################################################################################
#                                 Security                                          #
#####################################################################################

#####################################################################################
#                                   Paths                                           #
#####################################################################################
paths: 
    /resources:
        get:
            operationId: searchForResources
            summary: The REST read request message for the searchForResources() API call.
            tags: 
                - ResourceSearchManager
            description: |
                This is the search request. The criteria for the search are passed as query parameters and the set of identified resources are returned in the payload for the response message.
            parameters: 
                - name: limit
                  in: query
                  description: |
                      This is used as part of the data pagination mechanism to control the number of records returned in any one response message. The 'limit' defines the download segmentation value i.e. the maximum number of records to be contained in the response. The form of implementation is described in the corresponding binding document(s).
                  required: false
                  type: integer
                  format: int32
                  allowEmptyValue: false
                  default: 100
                  minimum: 1
                - name: offset
                  in: query
                  description: |
                      This is used as part of the data pagination mechanism to control the download rate of data. The 'offset' is the number of the first record to be supplied in the segmented response message. The form of implementation is described in the corresponding binding document(s).
                  required: false
                  type: integer
                  format: int32
                  allowEmptyValue: false
                  default: 0
                  minimum: 0
                - name: filter
                  in: query
                  description: |
                      The filtering rules to be applied when identifying the records to be supplied in the response message. Filtering defines the search criteria to be applied at the service provider for the identification and selection of the resources to be returned. A strict vocabulary is used for the permitted search terms (see the RS REST/JSON binding document 'Keyword Searching' in Sub-section 3.1 [RS-RJ, 18]).
                  required: false
                  type: string
                  allowEmptyValue: false
                - name: sort
                  in: query
                  description: |
                      This is used as part of the sorting mechanism to be use by the service provider. The 'sort' identifies the sort criteria to be used for the records in the response message. Use with the orderBy parameter. The form of implementation is described in the corresponding binding document(s).
                  required: false
                  type: string
                  allowEmptyValue: false
                - name: orderBy
                  in: query
                  description: |
                      This is used as part of the sorting mechanism to be use by the service provider. This defines the form of ordering for response to the sorted request i.e. ascending (asc) or descending (desc). The form of implementation is described in the corresponding binding document(s).
                  required: false
                  type: string
                  enum: 
                    - asc
                    - desc
                  allowEmptyValue: false
                - name: fields
                  in: query
                  description: |
                      To identify the range of fields, and only those fields, that should be supplied in the response message. The permitted vocabulary for these fields is determined by the payloads that are returned in the corresponding response messages.
                  required: false
                  type: array
                  items: 
                      type: string
                  collectionFormat: csv
                  allowEmptyValue: false
            responses: 
                "200" : 
                    description: |
                        The response code for when the query request has been successfully completed and the set of identified resources returned. This would be accompanied by the 'codeMajor/severity' values of 'success/status'
                    schema: 
                        $ref: "#/definitions/ResourceSetDType"
                    headers: 
                        "X-Total-Count" :
                            description: |
                                The total number of resources that are available to be returned
                            type: integer
                "400" : 
                    description: |
                        The request has been declared as 'bad'.  This will be due to the provision of bad data in the request query parameters. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.
                    schema: 
                        $ref: "#/definitions/imsx_StatusInfoDType"
                "401" : 
                    description: |
                        The request was not correctly authorised i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                    schema: 
                        $ref: "#/definitions/imsx_StatusInfoDType"
                "403" : 
                    description: |
                        This is used to indicate that the server can be reached and process the request but refuses to take any further action. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
                    schema: 
                        $ref: "#/definitions/imsx_StatusInfoDType"
                "500" : 
                    description: |
                        This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                    schema: 
                        $ref: "#/definitions/imsx_StatusInfoDType"
                "default" : 
                    description: |
                        This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.
                    schema: 
                        $ref: "#/definitions/imsx_StatusInfoDType"
                "422" : 
                    description: |
                        This error condition may occur if a JSON request body contains well-formed i.e. syntactically correct, but semantically erroneous, JSON instructions. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                    schema: 
                        $ref: "#/definitions/imsx_StatusInfoDType"
                "429" : 
                    description: |
                        The server is receiving too many requests i.e. 'server_busy'. Retry at a later time. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
                    schema: 
                        $ref: "#/definitions/imsx_StatusInfoDType"

    /subjects:
        get:
            operationId: getAllSubjects
            summary: The REST read request message for the getAllSubjects() API call.
            tags: 
                - SubjectsManager
            description: |
                To obtain, read, the list of subjects that are supported by a LOR.
            responses: 
                "200" : 
                    description: |
                        The response code for when the query request has been successfully completed and the set of subjects returned. This would be accompanied by the 'codeMajor/severity' values of 'success/status'
                    schema: 
                        $ref: "#/definitions/SubjectSetDType"
                "400" : 
                    description: |
                        The request has been declared as 'bad'.  This will be due to the provision of bad data in the request query parameters. This is accompanied by the 'codeMajor/severity' values of 'failure/error'.
                    schema: 
                        $ref: "#/definitions/imsx_StatusInfoDType"
                "401" : 
                    description: |
                        The request was not correctly authorised i.e. 'unauthorisedrequest'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                    schema: 
                        $ref: "#/definitions/imsx_StatusInfoDType"
                "403" : 
                    description: |
                        This is used to indicate that the server can be reached and process the request but refuses to take any further action. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
                    schema: 
                        $ref: "#/definitions/imsx_StatusInfoDType"
                "422" : 
                    description: |
                        This error condition may occur if a JSON request body contains well-formed i.e. syntactically correct, but semantically erroneous, JSON instructions. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                    schema: 
                        $ref: "#/definitions/imsx_StatusInfoDType"
                "429" : 
                    description: |
                        The server is receiving too many requests i.e. 'server_busy'. Retry at a later time. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'.
                    schema: 
                        $ref: "#/definitions/imsx_StatusInfoDType"
                "500" : 
                    description: |
                        This code should be used only if there is catastrophic error and there is not a more appropriate code i.e. 'internal_server_error'. This would be accompanied by the 'codeMajor/severity' values of 'failure/error'. 
                    schema: 
                        $ref: "#/definitions/imsx_StatusInfoDType"
                "default" : 
                    description: |
                        This is the response data payload to be supplied when the HTTP code is NOT explicitly defined. This would be accompanied by the 'codeMajor/severity' values of 'failure/error' and the appropriate 'codeMinor' value. The associated HTTP code will also be supplied.
                    schema: 
                        $ref: "#/definitions/imsx_StatusInfoDType"


#####################################################################################
#                               Definitions                                         #
#####################################################################################
definitions: 
    CCLTILinkDType:
        description: |
            The extended set of information used to define the presence of an LTI Link resource (this is based upon the definition for including an LTI link inside an IMS Common Cartridge or IMS Thin Common Cartridge).
        type: object
        required: 
            - title
            - vendor
        properties: 
            title: 
                description: The human readable title/label for the activity being addressed by the content available through the LTI link. Model Primitive Datatype = NormalizedString.
                type: string
            description: 
                description: A human readable description of the activity addressed by the content supplied via the LTI link. Model Primitive Datatype = String.
                type: string
            custom: 
                $ref: "#/definitions/PropertySetDType"
            extensions: 
                $ref: "#/definitions/PlatformPropertySetDType"
            launch_url: 
                description: The URL for the LTI launch. One of either the launch_url or the secure_launch_url must be specified. It is acceptable to specify both and if both are specified, the Tool Consumer (TC) decides which to use. Typically, the TC will use a secure_launch_url when embedding the Tool in a secure page and the launch_url when embedding the tool in a non-secure page. So, it is important that the Tool Provider (TP) provides the same functionality whether the launch_url or secure_launch_url is used. Model Primitive Datatype = AnyURI.
                type: string
                format: uri
            secure_launch_url: 
                description: A secure URL for the LTI launch. One of either the launch_url or the secure_launch_url must be specified. It is acceptable to specify both and if both are specified, the Tool Consumer (TC) decides which to use. Typically, the TC will use a secure_launch_url when embedding the Tool in a secure page and the launch_url when embedding the tool in a non-secure page. So, it is important that the Tool Provider (TP) provides the same functionality whether the launch_url or secure_launch_url is used. Model Primitive Datatype = AnyURI.
                type: string
                format: uri
            icon: 
                description: A URL to an icon for this tool. Model Primitive Datatype = AnyURI.
                type: string
                format: uri
            secure_icon: 
                description: A secure URL to an icon for this tool. Model Primitive Datatype = AnyURI.
                type: string
                format: uri
            vendor: 
                $ref: "#/definitions/VendorDType"
            cartridge_bundle: 
                $ref: "#/definitions/LTILinkResourceRefDType"
            cartridge_icon: 
                $ref: "#/definitions/LTILinkResourceRefDType"
            metadata: 
                $ref: "#/definitions/MetadataDType"
        additionalProperties: false
    CSMSetDType:
        description: |
            This is the is the container for the set of curriculum standards metadata. Each member of the set contains the curriculum standards metadata for a specific source of the GUIDs.
        type: object
        required: 
            - curriculumStandardsMetadata
        properties: 
            resourceLabel: 
                description: This is a human readable label used to identify the type of resource, or part of resource, to which the enclosed metadata refers. Model Primitive Datatype = NormalizedString.
                type: string
            resourcePartId: 
                description: This is used to contain the appropriate identifier that is used to identify the resource part. Model Primitive Datatype = NormalizedString.
                type: string
            curriculumStandardsMetadata: 
                description: |
                    The curriculum standards associated from a single source of the curriculum standards definition.
                type: array
                minItems: 1
                items: 
                    $ref: "#/definitions/CurriculumStandardsMetadataDType"
        additionalProperties: false
    CurriculumStandardsMetadataDType:
        description: |
            This is the container for the special metadata for curriculum standards for a particular domain of GUID provider.
        type: object
        required: 
            - setOfGUIDs
        properties: 
            providerId: 
                description: This is used to denote the originator of the GUID scheme. Model Primitive Datatype = NormalizedString.
                type: string
            setOfGUIDs: 
                description: |
                    The set of curriculum standards GUIDs that apply to the learning associated resource.
                type: array
                minItems: 1
                items: 
                    $ref: "#/definitions/SetOfGUIDsDType"
        additionalProperties: false
    LTILinkResourceRefDType:
        description: |
            The container for the link information.
        type: object
        required: 
            - name
            - resourceUri
        properties: 
            name: 
                description: The name of the type of content supplied by the link. Model Primitive Datatype = NormalizedString.
                type: string
            resourceUri: 
                description: The URI for the link. Model Primitive Datatype = AnyURI.
                type: string
                format: uri
        additionalProperties: false
    LabelledGUIDDType:
        description: |
            The labelled curriculum standard GUID.
        type: object
        required: 
            - GUID
        properties: 
            label: 
                description: A human readable string to provide a clue about the nature of the curriculum standard. Model Primitive Datatype = NormalizedString.
                type: string
            caseItemURI: 
                description: The corresponding Competency and Academic Standards (CASE) URI. This is the URI used for alignment with the IMS CASE Service 1.0 specification [CASE, 17]. Model Primitive Datatype = AnyURI.
                type: string
                format: uri
            GUID: 
                description: The GUID itself. Model Primitive Datatype = NormalizedString.
                type: string
        additionalProperties: false
    LearningObjectivesDType:
        description: |
            The container for the learning objectives which are addressed by the resource.
        type: object
        required: 
            - alignmentType
        properties: 
            alignmentType: 
                description: |
                    A category of alignment between the learning resource and the framework node.
                type: string
                enum: 
                   - assesses
                   - teaches
                   - requires
                   - textComplexity
                   - readingLevel
                   - educationalSubject
                   - educationLevel
            educationalFramework: 
                description: The framework to which the resource being described is aligned. Model Primitive Datatype = NormalizedString.
                type: string
            targetDescription: 
                description: The description of a node in an established educational framework. Model Primitive Datatype = NormalizedString.
                type: string
            targetName: 
                description: The name of a node in an established educational framework. Model Primitive Datatype = NormalizedString.
                type: string
            targetURL: 
                description: The URL of a node in an established educational framework. Model Primitive Datatype = AnyURI.
                type: string
                format: uri
            caseItemUri: 
                description: Reference to a CASE CFItem for a standard or skill [CASE, 17]. Model Primitive Datatype = AnyURI.
                type: string
                format: uri
            caseItemGUID: 
                description: Reference to CASE CFItem as a GUID [CASE, 17]. Model Primitive Datatype = NormalizedString.
                type: string
        additionalProperties: false
    MetadataDType:
        description: |
            The container for all of the metadata associated with the LTI link. Currently this metadata is restricted to the set of curriculum standards annotations.
        type: object
        properties: 
            curriculumStandardsMetadataSet: 
                $ref: "#/definitions/CSMSetDType"
        additionalProperties: false
    PlatformPropertySetDType:
        description: |
            The container for the collection of properties that are available for a specific platform.
        type: object
        required: 
            - platform
            - properties
        properties: 
            platform: 
                description: The identifier for the authoring environment. Model Primitive Datatype = NormalizedString.
                type: string
            properties: 
                description: |
                    The set of extension properties for the identified platform.
                type: array
                minItems: 1
                items: 
                    $ref: "#/definitions/PropertyDType"
        additionalProperties: false
    PropertyDType:
        description: |
            The container for the name/value pair for a specific property.
        type: object
        required: 
            - name
            - value
        properties: 
            name: 
                description: The name of the key for the property. Model Primitive Datatype = NormalizedString.
                type: string
            value: 
                description: The value for the property. Model Primitive Datatype = NormalizedString.
                type: string
        additionalProperties: false
    PropertySetDType:
        description: |
            The container for the collection of properties that have been specified.
        type: object
        required: 
            - properties
        properties: 
            properties: 
                description: |
                    The set of properties for the identified platform or orginal authoring platform.
                type: array
                minItems: 1
                items: 
                    $ref: "#/definitions/PropertyDType"
        additionalProperties: false
    ResourceDType:
        description: |
            The container for the information about a resource that is supported by a LOR.
        type: object
        required: 
            - name
            - learningResourceType
            - publisher
        properties: 
            name: 
                description: The name/title of resource. Model Primitive Datatype = NormalizedString.
                type: string
            description: 
                description: A human readable description of the contents of the resource. Model Primitive Datatype = NormalizedString.
                type: string
            subject: 
                description: |
                    The subject(s) of the resource. May have multiple subjects tagged. Model Primitive Datatype = NormalizedString.
                type: array
                minItems: 0
                items: 
                    type: string
            url: 
                description: How to access resource over Internet e.g. HTTP, FTP, etc. A resource must have either a URL or or a LTI Link. Model Primitive Datatype = AnyURI.
                type: string
                format: uri
            ltiLink: 
                $ref: "#/definitions/CCLTILinkDType"
            learningResourceType: 
                description: |
                    The type of the resource. There may be multiple types.
                type: array
                minItems: 1
                items: 
                    type: string
                    enum: 
                       - Assessment/Item
                       - Assessment/Formative
                       - Assessment/Interim
                       - Assessment/Rubric
                       - Assessment/Preparation
                       - Collection/Course
                       - Collection/Unit
                       - Collection/Curriculum Guide
                       - Collection/Lesson
                       - Game
                       - Interactive/Simulation
                       - Interactive/Animation
                       - Interactive/Whiteboard
                       - Activity/Worksheet
                       - Activity/Learning
                       - Activity/Experiment
                       - Lecture
                       - Text/Book
                       - Text/Chapter
                       - Text/Document
                       - Text/Article
                       - Text/Passage
                       - Text/Textbook
                       - Text/Reference
                       - Text/Website
                       - Media/Audio
                       - Media/Images/Visuals
                       - Media/Video
                       - Other
            language: 
                description: The languages used in the resource. International two digit code for language e.g. 'en' for English. Use the [RFC 3066] annotation. Model Primitive Datatype = Language.
                type: array
                minItems: 0
                items: 
                    type: string
            thumbnailUrl: 
                description: Link to a thumbnail representing resource. Model Primitive Datatype = AnyURI.
                type: string
                format: uri
            typicalAgeRange: 
                description: Age of the typical intended user. This is described as EITHER the minimum-maximum age range (the format is '11-12', '5-7', etc. with ONLY integers permitted) OR the age as a single integer e.g. '9'. Model Primitive Datatype = NormalizedString.
                type: string
            textComplexity: 
                description: |
                    A number indicating text complexity based on number of established measures.
                type: array
                minItems: 0
                items: 
                    $ref: "#/definitions/TextComplexityDType"
            learningObjectives: 
                description: |
                    The set of learning objectives addressed by the resource.
                type: array
                minItems: 0
                items: 
                    $ref: "#/definitions/LearningObjectivesDType"
            author: 
                description: |
                    Author or creator of the resource. Model Primitive Datatype = NormalizedString.
                type: array
                minItems: 0
                items: 
                    type: string
            publisher: 
                description: Owner of the rights to the resource or who made it available (company or person). Model Primitive Datatype = NormalizedString.
                type: string
            useRightsURL: 
                description: URL describing how resource can be licensed. Could be Creative Commons license link or link to other specific open or proprietary license. Model Primitive Datatype = AnyURI.
                type: string
                format: uri
            timeRequired: 
                description: Time that the resource takes to consume. Use the [ISO 8601] format for a duration. Model Primitive Datatype = Duration.
                type: string
                pattern: "^P(?!$)(\\d+(?:\\.\\d+)?Y)?(\\d+(?:\\.\\d+)?M)?(\\d+(?:\\.\\d+)?W)?(\\d+(?:\\.\\d+)?D)?(T(?=\\d)(\\d+(?:\\.\\d+)?H)?(\\d+(?:\\.\\d+)?M)?(\\d+(?:\\.\\d+)?S)?)?$"
            technicalFormat: 
                description: A valid MIME type format for the resource e.g. text, HTML, PDF, MPEG, MP3, etc. See https://www.iana.org/assignments/media-types/media-types.xhtml. Model Primitive Datatype = NormalizedString.
                type: string
            educationalAudience: 
                description: |
                    For whom the resource is intended.
                type: array
                minItems: 0
                items: 
                    type: string
                    enum: 
                       - student
                       - teacher
                       - administrator
                       - parent
                       - aide
                       - proctor
                       - guardian
                       - relative
            accessibilityAPI: 
                description: |
                    Which (if any) accessibility API is supported by the resource.
                type: array
                minItems: 0
                items: 
                    type: string
                    enum: 
                       - MSAA
                       - UIAutomation
                       - ARIAv1
                       - IAccessible2
                       - AndroidAccessibility
                       - ATK
                       - AT-SPI
                       - BlackberryAccessibility
                       - JavaAccessibility
                       - MacOSXAccessibility
            accessibilityInputMethods: 
                description: |
                    How the resource can be controlled by the user, which includes full keyboard controllability, mouse controllability, and voice controllability.
                type: array
                minItems: 0
                items: 
                    type: string
                    enum: 
                       - fullKeyboardControl
                       - fullMouseControl
                       - fullVoiceControl
            accessibilityFeatures: 
                description: These include alternatives and listed enhancements for the resource. These can be transformation features, navigation features, control features or augmentation features. Model Primitive Datatype = NormalizedString.
                type: array
                minItems: 0
                items: 
                    type: string
            accessibilityHazards: 
                description: |
                    The set of accessibility hazards which are encountered when using this resource.
                type: array
                minItems: 0
                items: 
                    type: string
                    enum: 
                       - flashing
                       - sound
                       - olfactoryHazard
                       - motionSimulation
            accessMode: 
                description: |
                    The human sensory perceptual system or cognitive faculty through which a person may process or perceive information.
                type: array
                minItems: 0
                items: 
                    type: string
                    enum: 
                       - auditory
                       - color
                       - itemSize
                       - olfactory
                       - orientation
                       - position
                       - tactile
                       - textOnImage
                       - textual
                       - visual
            publishDate: 
                description: Date the resource was published by the publisher. The 'date' using the [ISO 8601] format. Model Primitive Datatype = Date.
                type: string
                format: date
            rating: 
                description: |
                    A rating of the quality of the resource determined by the Search Provider. Often derived from crowdsource ratings.
                type: string
                enum: 
                   - 1
                   - 2
                   - 3
                   - 4
                   - 5
            relevance: 
                description: This is a floating point value based on relevance to the specific search. Higher relevance has a higher number. Model Primitive Datatype = Float.
                type: number
                format: float
        additionalProperties: true
    ResourceSetDType:
        description: |
            The container for the set of resources that have been supplied by the service provider. This may be empty if none of the resources fulfill the search criteria. The order of resources is not significant.
        type: object
        properties: 
            resources: 
                description: |
                    The actual resources supplied by the service provider. The order of resources is not significant.
                type: array
                minItems: 0
                items: 
                    $ref: "#/definitions/ResourceDType"
        additionalProperties: false
    SetOfGUIDsDType:
        description: |
            The  container for the set of GUIDs that annotate a resource for a particular geographical/socio-political/etc. region.
        type: object
        required: 
            - labelledGUID
        properties: 
            region: 
                description: The region responsible for the definition.  Model Primitive Datatype = NormalizedString.
                type: string
            version: 
                description: This is used to denote any relevant versioning information. Model Primitive Datatype = NormalizedString.
                type: string
            labelledGUID: 
                description: |
                    The actual GUID plus the corresponding labelling information.
                type: array
                minItems: 1
                items: 
                    $ref: "#/definitions/LabelledGUIDDType"
        additionalProperties: false
    SubjectDType:
        description: |
            This is the container for the details of a subject that is covered by the content within a LOR.
        type: object
        required: 
            - identifier
            - name
            - parent
        properties: 
            identifier: 
                description: The unique identifier, a string, of the subject node. For the root node the value will be 'null'.  Model Primitive Datatype = NormalizedString.
                type: string
            name: 
                description: The name of the subject node, which may have any character and need not be unique with the returned taxonomy.  Model Primitive Datatype = NormalizedString.
                type: string
            parent: 
                description: A string (the identifier of that subject node) that references the single parent of this node. The returned data must be a true rooted tree, where each node returned has a single parent.  Model Primitive Datatype = NormalizedString.
                type: string
        additionalProperties: false
    SubjectSetDType:
        description: |
            The container for the set of subjects that have been supplied by the service provider. This may be empty if none of the subjects fulfill the search criteria. The order of subjects is not significant.
        type: object
        properties: 
            subjects: 
                description: |
                    The actual list of subject supplied by the service provider. The order of subjects is not significant.
                type: array
                minItems: 0
                items: 
                    $ref: "#/definitions/SubjectDType"
        additionalProperties: false
    TextComplexityDType:
        description: |
            The name/pair value container for a text complexity annotation.
        type: object
        required: 
            - name
            - value
        properties: 
            name: 
                description: |
                    The name of the complexity measure. This is taken from an enumerated vocabulary.
                type: string
                enum: 
                   - Lexile
                   - Flesch-Kincaid
                   - Dale-Schall
                   - DRA
                   - Fountas-Pinnell
            value: 
                description: The text complexity measure in terms of the named measuring scale. Model Primitive Datatype = NormalizedString.
                type: string
        additionalProperties: false
    VendorDType:
        description: |
            The container for the information about the vendor who created the resource.
        type: object
        required: 
            - code
            - name
        properties: 
            code: 
                description: An identification code for the vendor. Model Primitive Datatype = NormalizedString.
                type: string
            name: 
                description: The name of the vendor. Model Primitive Datatype = NormalizedString.
                type: string
            description: 
                description: A human readable description of the vendor. Model Primitive Datatype = String.
                type: string
            url: 
                description: A URL for the vendor. Model Primitive Datatype = AnyURI.
                type: string
                format: uri
            emailContact: 
                description: Contact email for the vendor. Model Primitive Datatype = NormalizedString.
                type: string
        additionalProperties: false
    imsx_CodeMinorDType:
        description: |
            This is the container for the set of code minor status codes reported in the responses from the Service Provider.
        type: object
        required: 
            - imsx_codeMinorField
        properties: 
            imsx_codeMinorField: 
                description: |
                    Each reported code minor status code.
                type: array
                minItems: 1
                items: 
                    $ref: "#/definitions/imsx_CodeMinorFieldDType"
        additionalProperties: false
    imsx_CodeMinorFieldDType:
        description: |
            This is the container for a single code minor status code.
        type: object
        required: 
            - imsx_codeMinorFieldName
            - imsx_codeMinorFieldValue
        properties: 
            imsx_codeMinorFieldName: 
                description: This should contain the identity of the system that has produced the code minor status code report. Model Primitive Datatype = NormalizedString.
                type: string
            imsx_codeMinorFieldValue: 
                description: |
                    The code minor status code (this is a value from the corresponding enumerated vocabulary).
                type: string
                enum: 
                   - fullsuccess
                   - forbidden
                   - invalid_query_parameter
                   - unauthorisedrequest
                   - internal_server_error
                   - server_busy
                   - invalid_data
        additionalProperties: false
    imsx_StatusInfoDType:
        description: |
            This is the container for the status code and associated information returned within the HTTP messages received from the Service Provider.
        type: object
        required: 
            - imsx_codeMajor
            - imsx_severity
        properties: 
            imsx_codeMajor: 
                description: |
                    The code major value (from the corresponding enumerated vocabulary).
                type: string
                enum: 
                   - success
                   - processing
                   - failure
                   - unsupported
            imsx_severity: 
                description: |
                    The severity value (from the corresponding enumerated vocabulary).
                type: string
                enum: 
                   - status
                   - warning
                   - error
            imsx_description: 
                description: A human readable description supplied by the entity creating the status code information. Model Primitive Datatype = String.
                type: string
            imsx_codeMinor: 
                $ref: "#/definitions/imsx_CodeMinorDType"
        additionalProperties: false
