<?xml version = "1.0" encoding = "UTF-8"?>
<xs:schema xmlns="http://www.imsglobal.org/xsd/ims_openvideo_v1p0"
     targetNamespace="http://www.imsglobal.org/xsd/ims_openvideo_v1p0"
     xmlns:xs="http://www.w3.org/2001/XMLSchema"
     xmlns:sch="http://purl.oclc.org/dsdl/schematron"
     version="IMS OPEN VIDEO MD 1.0.0"
     elementFormDefault="qualified"
     attributeFormDefault="unqualified">
    <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="https://purl.imsglobal.org/spec/w3/2001/schema/xsd/xml.xsd" />

    <xs:annotation>
        <xs:documentation>
            XSD Data File Information
            =========================
            Author:         Derek Sessions (Panopto) and Colin Smythe (IMS Global)
            Date:           1st January 2022
            Version:        1.0
            Status:         Candidate Final Public
            Description:    This is the Platform Specific Model of the IMS OpenVideo Metadata v1.0 Specification Information Model. It is this representation that is used to produce the XSD binding for the IMS OpenVideo Metadata v1.0.

            History:        This original release of the OpenVideo Metadata specification.
            
            License:        IPR and Distribution Notices
            
                            This machine readable file is derived from the IMS OpenVideo Metadata Version 1.0
                            found at http://www.imsglobal.org/ov and the original IMS Global schema binding or code base
                            http://www.imsglobal.org/ov.
            
                            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-2022. 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:     2022-01-20
            
            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-2022  (c) IMS Global Learning Consortium Inc.  All Rights Reserved.
        </xs:documentation>
    </xs:annotation>

    <xs:annotation>
        <xs:documentation>
            Schematron Namespace Declaration
            =================================
            The set of namespaces used by the schematron rules.
        </xs:documentation>
        <xs:appinfo>
            <sch:ns uri="http://www.imsglobal.org/xsd/ims_openvideo_v1p0" prefix="imsov" />
        </xs:appinfo>
    </xs:annotation>

    <xs:annotation>
        <xs:documentation>
            Schematron Strict Selection Validation Rules
            ============================================
            This is the set of Schematron rules that have been created to enforce the use of the "Unordered" stereotype.
            These rules ensure that the number of entries in an unordered complexType of an element obey the multiplicity constraints.
            This is required so that any-order/any-multiplicity complexTypes can be constructed and validated.
        </xs:documentation>
        <xs:appinfo>
            <sch:title>Schematron validation rules for the enforcement of the Unordered stereotype.</sch:title>

            <!-- RULESET ******************************************************************* -->
            <sch:pattern abstract="false" id="SessionDType">
                <sch:title>[RULESET] For the SessionDType complexType.</sch:title>

                <sch:rule abstract="false" context="imsov:session">

                    <sch:assert test="count(imsov:title) = 1">
                        [RULE for Root Class Attribute 1] Invalid number of "title" elements: <sch:value-of select="count(imsov:title)" />.
                    </sch:assert>

                    <sch:assert test="count(imsov:description) = 0 or count(imsov:description) = 1">
                        [RULE for Root Class Attribute 2] Invalid number of "description" elements: <sch:value-of select="count(imsov:description)" />.
                    </sch:assert>

                    <sch:assert test="count(imsov:dateCreated) = 0 or count(imsov:dateCreated) = 1">
                        [RULE for Root Class Attribute 3] Invalid number of "dateCreated" elements: <sch:value-of select="count(imsov:dateCreated)" />.
                    </sch:assert>

                    <sch:assert test="count(imsov:location) = 0 or count(imsov:location) = 1">
                        [RULE for Root Class Attribute 4] Invalid number of "location" elements: <sch:value-of select="count(imsov:location)" />.
                    </sch:assert>

                    <sch:assert test="count(imsov:captureManifest) = 0 or count(imsov:captureManifest) = 1">
                        [RULE for Root Class Attribute 5] Invalid number of "captureManifest" elements: <sch:value-of select="count(imsov:captureManifest)" />.
                    </sch:assert>

                    <sch:assert test="count(imsov:markers) = 0 or count(imsov:markers) = 1">
                        [RULE for Root Class Attribute 6] Invalid number of "markers" elements: <sch:value-of select="count(imsov:markers)" />.
                    </sch:assert>

                    <sch:assert test="count(imsov:streams) = 0 or count(imsov:streams) = 1">
                        [RULE for Root Class Attribute 7] Invalid number of "streams" elements: <sch:value-of select="count(imsov:streams)" />.
                    </sch:assert>

                    <sch:assert test="count(imsov:contributors) = 0 or count(imsov:contributors) = 1">
                        [RULE for Root Class Attribute 8] Invalid number of "contributors" elements: <sch:value-of select="count(imsov:contributors)" />.
                    </sch:assert>

                    <sch:assert test="count(imsov:recorders) = 0 or count(imsov:recorders) = 1">
                        [RULE for Root Class Attribute 9] Invalid number of "recorders" elements: <sch:value-of select="count(imsov:recorders)" />.
                    </sch:assert>

                    <sch:assert test="count(imsov:tags) = 0 or count(imsov:tags) = 1">
                        [RULE for Root Class Attribute 10] Invalid number of "tags" elements: <sch:value-of select="count(imsov:tags)" />.
                    </sch:assert>

                    <sch:assert test="count(imsov:thumbnail) = 0 or count(imsov:thumbnail) = 1">
                        [RULE for Root Class Attribute 11] Invalid number of "thumbnail" elements: <sch:value-of select="count(imsov:thumbnail)" />.
                    </sch:assert>

                    <sch:assert test="count(imsov:thumbnailTime) = 0 or count(imsov:thumbnailTime) = 1">
                        [RULE for Root Class Attribute 12] Invalid number of "thumbnailTime" elements: <sch:value-of select="count(imsov:thumbnailTime)" />.
                    </sch:assert>

                    <sch:assert test="count(imsov:copyright) = 0 or count(imsov:copyright) = 1">
                        [RULE for Root Class Attribute 13] Invalid number of "copyright" elements: <sch:value-of select="count(imsov:copyright)" />.
                    </sch:assert>

                    <sch:assert test="count(imsov:license) = 0 or count(imsov:license) = 1">
                        [RULE for Root Class Attribute 14] Invalid number of "license" elements: <sch:value-of select="count(imsov:license)" />.
                    </sch:assert>

                    <sch:assert test="count(imsov:restrictions) = 0 or count(imsov:restrictions) = 1">
                        [RULE for Root Class Attribute 16] Invalid number of "restrictions" elements: <sch:value-of select="count(imsov:restrictions)" />.
                    </sch:assert>

                    <sch:assert test="count(imsov:cuts) = 0 or count(imsov:cuts) = 1">
                        [RULE for Root Class Attribute 18] Invalid number of "cuts" elements: <sch:value-of select="count(imsov:cuts)" />.
                    </sch:assert>

                </sch:rule>

            </sch:pattern>
            <!-- *************************************************************************** -->

        </xs:appinfo>
    </xs:annotation>

    <!-- Generate Global Attributes (non-assigned) ******************************************************** -->

    <!-- ================================================================================================== -->

    <!-- Generate Global Attributes *********************************************************************** -->

    <!-- ================================================================================================== -->

    <!-- Generate Global List Types *********************************************************************** -->

    <!-- ================================================================================================== -->

    <!-- Generate Namespaced extension Group  ************************************************************* -->

    <xs:group name="grpStrict.any">
        <xs:annotation>
            <xs:documentation>
                Any namespaced element from any namespace, other than the target namespace, may be included within an "any" element.
                The namespace for the imported element must be defined in the instance, and the schema must be imported.
                The extension has a definition of "strict" i.e. they must have their own namespace.
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:any namespace = "##other" processContents = "strict" minOccurs = "0" maxOccurs = "unbounded" />
        </xs:sequence>
    </xs:group>

    <!-- ================================================================================================== -->

    <!-- Generate Special DataTypes  ********************************************************************** -->

    <!-- ================================================================================================== -->

    <!-- Generate the enumerated simpleType declarations ************************************************** -->

    <!-- ================================================================================================== -->

    <!-- Generate the simpleType elements based on IMS data-types (Parameter) ***************************** -->

    <!-- ================================================================================================== -->

    <!-- Generate the simpleType elements based on IMS data-types (Derived) ******************************* -->

    <!-- ================================================================================================== -->

    <!-- Generate the simpleType elements based on IMS data-types (Union) ********************************* -->

    <!-- ================================================================================================== -->

    <!-- Generate the simpleType elements based on IMS data-types (Complex) ******************************* -->

    <!-- ================================================================================================== -->

    <!-- Generate the derived data-type elements based upon simpleType ************************************ -->

    <xs:simpleType name="CRC32DType">
        <xs:restriction base="xs:string">
            <xs:pattern value="[a-fA-F0-9]{8}" />
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="ExtensionStringDType">
        <xs:restriction base="xs:normalizedString">
            <xs:pattern value="(ext:)[a-z|A-Z|0-9|.|-|_]+" />
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="IPAddressDType">
        <xs:restriction base="xs:string">
            <xs:pattern value="((1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]).){3}(1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])" />
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="MimeTypeDType">
        <xs:restriction base="xs:string">
            <xs:pattern value="[\p{IsBasicLatin}-[()&lt;&gt;@,;:\\&quot;/\[\]?=]]+/[\p{IsBasicLatin}-[()&lt;&gt;@,;:\\&quot;/\[\]?=]]+" />
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="URLDType">
        <xs:restriction base="xs:string" />
    </xs:simpleType>

    <!-- ================================================================================================== -->

    <!-- Generate the derived data-type elements based upon derived simpleType **************************** -->

    <!-- ================================================================================================== -->

    <!-- Generate the ComplexTypes ************************************************************************ -->

    <xs:complexType name="AttachmentDType" abstract="false" mixed="false">
        <xs:annotation>
            <xs:documentation source="documentation">
                The container for the information for a single attachment.                                
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="url" type="URLDType" minOccurs="1" maxOccurs="1" />
            <xs:element name="mimeType" type="MimeTypeDType" minOccurs="1" maxOccurs="1" />
            <xs:element name="checksum" type="CRC32DType" minOccurs="0" maxOccurs="1" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="CaptionsDType" abstract="false" mixed="false">
        <xs:annotation>
            <xs:documentation source="documentation">
                The information about a single caption for this stream for closed captioning and search.  
                This allows for per-stream captioning.                                                    
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="file" type="AttachmentDType" minOccurs="1" maxOccurs="1" />
            <xs:element name="source" type="xs:normalizedString" minOccurs="0" maxOccurs="1" />
            <xs:element name="visible" type="xs:boolean" default="true" minOccurs="0" maxOccurs="1" />
            <xs:element name="description" type="xs:string" minOccurs="0" maxOccurs="1" />
        </xs:sequence>
        <xs:attribute ref="xml:lang" use="optional" />
    </xs:complexType>

    <xs:complexType name="CaptureManifestDType" abstract="false" mixed="false">
        <xs:annotation>
            <xs:documentation source="documentation">
                This is the container for the collection of contextual information about the materials su-
                pplied in this session.                                                                   
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="scheduledStartTime" type="xs:dateTime" minOccurs="0" maxOccurs="1" />
            <xs:element name="scheduledDuration" type="xs:integer" minOccurs="0" maxOccurs="1" />
            <xs:element name="recordingStartTime" type="xs:dateTime" minOccurs="0" maxOccurs="1" />
            <xs:element name="recordingDuration" type="xs:integer" minOccurs="0" maxOccurs="1" />
            <xs:element name="uploadedStartTime" type="xs:dateTime" minOccurs="0" maxOccurs="1" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="ContactInfoDType" abstract="false" mixed="false">
        <xs:annotation>
            <xs:documentation source="documentation">
                The container for the contact information for the contributor.                            
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="email" type="xs:normalizedString" minOccurs="0" maxOccurs="1" />
            <xs:element name="telephone" type="xs:normalizedString" minOccurs="0" maxOccurs="1" />
            <xs:element name="mobile" type="xs:normalizedString" minOccurs="0" maxOccurs="1" />
            <xs:element name="sms" type="xs:normalizedString" minOccurs="0" maxOccurs="1" />
            <xs:element name="address" type="xs:normalizedString" minOccurs="0" maxOccurs="1" />
            <xs:element name="socialmedia" type="SocialMediaDType" minOccurs="0" maxOccurs="unbounded" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="ContributorDType" abstract="false" mixed="false">
        <xs:annotation>
            <xs:documentation source="documentation">
                This is the container for the information about a person, group or organization who has s-
                ome relationship to this session. The information includes the name, role and contact det-
                ails for the contributor.                                                                 
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="role" minOccurs="0" maxOccurs="1">
                <xs:simpleType>
                    <xs:union>
                        <xs:simpleType>
                            <xs:restriction base="xs:string">
                                <xs:enumeration value="guest" />
                                <xs:enumeration value="faculty" />
                                <xs:enumeration value="teachingassistant" />
                                <xs:enumeration value="co-presenter" />
                                <xs:enumeration value="audiencemember" />
                                <xs:enumeration value="presenter" />
                                <xs:enumeration value="moderator" />
                                <xs:enumeration value="group" />
                                <xs:enumeration value="organization" />
                            </xs:restriction>
                        </xs:simpleType>
                        <xs:simpleType>
                            <xs:restriction base="ExtensionStringDType" />
                        </xs:simpleType>
                    </xs:union>
                </xs:simpleType>
            </xs:element>
            <xs:element name="name" type="NameDType" minOccurs="0" maxOccurs="1" />
            <xs:element name="title" type="xs:normalizedString" minOccurs="0" maxOccurs="1" />
            <xs:element name="link" type="URLDType" minOccurs="0" maxOccurs="1" />
            <xs:element name="bio" type="xs:string" minOccurs="0" maxOccurs="1" />
            <xs:element name="image" type="URLDType" minOccurs="0" maxOccurs="1" />
            <xs:element name="contactInformation" type="ContactInfoDType" minOccurs="0" maxOccurs="unbounded" />
        </xs:sequence>
        <xs:attribute name="contributorID" use="required" type="xs:normalizedString" />
    </xs:complexType>

    <xs:complexType name="ContributorsDType" abstract="false" mixed="false">
        <xs:annotation>
            <xs:documentation source="documentation">
                The container for the information about the set of contributors.                          
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="contributor" type="ContributorDType" minOccurs="1" maxOccurs="unbounded" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="CutDType" abstract="false" mixed="false">
        <xs:annotation>
            <xs:documentation source="documentation">
                The information for a single cut i.e. what to omit from the final playable output.        
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="startTime" type="xs:duration" minOccurs="1" maxOccurs="1" />
            <xs:element name="duration" type="xs:duration" minOccurs="1" maxOccurs="1" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="CutsDType" abstract="false" mixed="false">
        <xs:annotation>
            <xs:documentation source="documentation">
                The container for the information about the set of cuts.                                  
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="cut" type="CutDType" minOccurs="1" maxOccurs="unbounded" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="DeckMarkerDType" abstract="false" mixed="false">
        <xs:annotation>
            <xs:documentation source="documentation">
                The container for the information about a single slider/image marker.                     
            </xs:documentation>
        </xs:annotation>
        <xs:complexContent>
            <xs:extension base="MarkerBaseDType">
                <xs:sequence>
                    <xs:element name="file" type="AttachmentDType" minOccurs="1" maxOccurs="1" />
                    <xs:element name="deckFileIndex" type="xs:integer" minOccurs="0" maxOccurs="1" />
                    <xs:element name="deckFile" type="AttachmentDType" minOccurs="0" maxOccurs="1" />
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="FileMarkerDType" abstract="false" mixed="false">
        <xs:annotation>
            <xs:documentation source="documentation">
                The base set of information plus details about the attached file.                         
            </xs:documentation>
        </xs:annotation>
        <xs:complexContent>
            <xs:extension base="MarkerBaseDType">
                <xs:sequence>
                    <xs:element name="file" type="AttachmentDType" minOccurs="1" maxOccurs="1" />
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="HighlightMarkerDType" abstract="false" mixed="false">
        <xs:annotation>
            <xs:documentation source="documentation">
                The marker for the user-inserted highlight information. This adds style, duration and lay-
                out information to the base marker.                                                       
            </xs:documentation>
        </xs:annotation>
        <xs:complexContent>
            <xs:extension base="MarkerBaseDType">
                <xs:sequence>
                    <xs:element name="duration" type="xs:duration" minOccurs="0" maxOccurs="1" />
                    <xs:element name="layout" type="LayoutDType" minOccurs="0" maxOccurs="1" />
                    <xs:element name="style" type="xs:string" minOccurs="0" maxOccurs="1" />
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="LayoutDType" abstract="false" mixed="false">
        <xs:annotation>
            <xs:documentation source="documentation">
                The location details for the marker with respect to the reference video. This information 
                is the relative X=0 Y=0 point for the marker and the width and height of rthe canvas for  
                the marker.  These are supplied as integer percentage point values in the range 0-100% (X-
                =0%,Y=0% is the bottom left corner of the video and width=100% and height=100% makes the  
                marker the same size as the video).                                                       
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="posX" type="xs:integer" minOccurs="1" maxOccurs="1" />
            <xs:element name="posY" type="xs:integer" minOccurs="1" maxOccurs="1" />
            <xs:element name="width" type="xs:integer" minOccurs="1" maxOccurs="1" />
            <xs:element name="height" type="xs:integer" minOccurs="1" maxOccurs="1" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="LocationDType" abstract="false" mixed="false">
        <xs:annotation>
            <xs:documentation source="documentation">
                The container for the information about the location where the associated video was captu-
                red.                                                                                      
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="address" type="xs:normalizedString" minOccurs="1" maxOccurs="1" />
            <xs:element name="room" type="xs:normalizedString" minOccurs="0" maxOccurs="1" />
            <xs:element name="buildingName" type="xs:normalizedString" minOccurs="0" maxOccurs="1" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="MarkerDType" abstract="false" mixed="false">
        <xs:annotation>
            <xs:documentation source="documentation">
                The container for information about the generic marker. This MUST NOT be used to replace  
                one of the predefined marker definitions.                                                 
            </xs:documentation>
        </xs:annotation>
        <xs:complexContent>
            <xs:extension base="MarkerBaseDType">
                <xs:sequence>
                    <xs:element name="type" type="xs:normalizedString" minOccurs="1" maxOccurs="1" />
                    <xs:element name="file" type="AttachmentDType" minOccurs="0" maxOccurs="1" />
                    <xs:element name="duration" type="xs:duration" minOccurs="0" maxOccurs="1" />
                    <xs:element name="layout" type="LayoutDType" minOccurs="0" maxOccurs="1" />
                    <xs:element name="style" type="xs:string" minOccurs="0" maxOccurs="1" />
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="MarkerBaseDType" abstract="false" mixed="false">
        <xs:annotation>
            <xs:documentation source="documentation">
                The base set of information for every predefined marker and the generic marker.           
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="title" type="xs:normalizedString" minOccurs="0" maxOccurs="1" />
            <xs:element name="description" type="xs:normalizedString" minOccurs="0" maxOccurs="1" />
            <xs:element name="startTime" type="xs:duration" minOccurs="1" maxOccurs="1" />
            <xs:element name="userId" type="xs:normalizedString" minOccurs="0" maxOccurs="1" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="MarkersDType" abstract="false" mixed="false">
        <xs:annotation>
            <xs:documentation source="documentation">
                The container for the set of markers.                                                     
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="imageMarker" type="DeckMarkerDType" minOccurs="0" maxOccurs="unbounded" />
            <xs:element name="confusionPointMarker" type="MarkerBaseDType" minOccurs="0" maxOccurs="unbounded" />
            <xs:element name="bookMarker" type="FileMarkerDType" minOccurs="0" maxOccurs="unbounded" />
            <xs:element name="chapterMarker" type="FileMarkerDType" minOccurs="0" maxOccurs="unbounded" />
            <xs:element name="currentSpeakerMarker" type="SpeakerMarkerDType" minOccurs="0" maxOccurs="unbounded" />
            <xs:element name="highlightMarker" type="HighlightMarkerDType" minOccurs="0" maxOccurs="unbounded" />
            <xs:element name="noteMarker" type="FileMarkerDType" minOccurs="0" maxOccurs="unbounded" />
            <xs:element name="relatedVideoMarker" type="RelatedVideoMarkerDType" minOccurs="0" maxOccurs="unbounded" />
            <xs:element name="slideMarker" type="DeckMarkerDType" minOccurs="0" maxOccurs="unbounded" />
            <xs:element name="marker" type="MarkerDType" minOccurs="0" maxOccurs="unbounded" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="NameDType" abstract="false" mixed="false">
        <xs:annotation>
            <xs:documentation source="documentation">
                The container for the names for the contributor.                                          
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="givenName" type="xs:normalizedString" minOccurs="0" maxOccurs="1" />
            <xs:element name="familyName" type="xs:normalizedString" minOccurs="0" maxOccurs="1" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="RecordingAgentDType" abstract="false" mixed="false">
        <xs:annotation>
            <xs:documentation source="documentation">
                The container for the information about the platform/device that was used to make the vid-
                eo recording.                                                                             
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="recordingAgentType" minOccurs="0" maxOccurs="1">
                <xs:simpleType>
                    <xs:union>
                        <xs:simpleType>
                            <xs:restriction base="ExtensionStringDType" />
                        </xs:simpleType>
                        <xs:simpleType>
                            <xs:restriction base="xs:string">
                                <xs:enumeration value="Classroom Capture" />
                                <xs:enumeration value="User Generated Content" />
                            </xs:restriction>
                        </xs:simpleType>
                    </xs:union>
                </xs:simpleType>
            </xs:element>
            <xs:element name="name" type="xs:normalizedString" minOccurs="0" maxOccurs="1" />
            <xs:element name="vendor" type="xs:normalizedString" minOccurs="1" maxOccurs="1" />
            <xs:element name="product" type="xs:normalizedString" minOccurs="1" maxOccurs="1" />
            <xs:element name="version" type="xs:normalizedString" minOccurs="1" maxOccurs="1" />
            <xs:element name="isAppliance" type="xs:boolean" minOccurs="0" maxOccurs="1" />
            <xs:element name="ip" type="IPAddressDType" minOccurs="0" maxOccurs="1" />
            <xs:element name="os" minOccurs="0" maxOccurs="1">
                <xs:simpleType>
                    <xs:union>
                        <xs:simpleType>
                            <xs:restriction base="xs:string">
                                <xs:enumeration value="windows" />
                                <xs:enumeration value="macos" />
                                <xs:enumeration value="linux" />
                            </xs:restriction>
                        </xs:simpleType>
                        <xs:simpleType>
                            <xs:restriction base="ExtensionStringDType" />
                        </xs:simpleType>
                    </xs:union>
                </xs:simpleType>
            </xs:element>
            <xs:element name="browser" type="xs:normalizedString" minOccurs="0" maxOccurs="1" />
        </xs:sequence>
        <xs:attribute name="agentID" use="required" type="xs:normalizedString" />
    </xs:complexType>

    <xs:complexType name="RecordingAgentsDType" abstract="false" mixed="false">
        <xs:annotation>
            <xs:documentation source="documentation">
                The container for the information about the set of recording agents.                      
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="recorder" type="RecordingAgentDType" minOccurs="1" maxOccurs="unbounded" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="RelatedVideoMarkerDType" abstract="false" mixed="false">
        <xs:annotation>
            <xs:documentation source="documentation">
                The information inclusion of a relative video i.e. an video-in-video presentation. This a-
                dds to the base marker the file, duration, layout and style details.                      
            </xs:documentation>
        </xs:annotation>
        <xs:complexContent>
            <xs:extension base="MarkerBaseDType">
                <xs:sequence>
                    <xs:element name="file" type="AttachmentDType" minOccurs="1" maxOccurs="1" />
                    <xs:element name="duration" type="xs:duration" minOccurs="0" maxOccurs="1" />
                    <xs:element name="layout" type="LayoutDType" minOccurs="0" maxOccurs="1" />
                    <xs:element name="style" type="xs:string" minOccurs="0" maxOccurs="1" />
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="RenditionDType" abstract="false" mixed="false">
        <xs:annotation>
            <xs:documentation source="documentation">
                Definition of a single bitrate version of the video (typically lower than bitrate of cano-
                nical version). This can allow a receiving player to provide a better playback experience 
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="renditionType" minOccurs="1" maxOccurs="1">
                <xs:simpleType>
                    <xs:union>
                        <xs:simpleType>
                            <xs:restriction base="ExtensionStringDType" />
                        </xs:simpleType>
                        <xs:simpleType>
                            <xs:restriction base="xs:string">
                                <xs:enumeration value="alternativeAudio" />
                                <xs:enumeration value="alternativeBitrate" />
                                <xs:enumeration value="audioDescription" />
                            </xs:restriction>
                        </xs:simpleType>
                    </xs:union>
                </xs:simpleType>
            </xs:element>
            <xs:element name="file" type="AttachmentDType" minOccurs="1" maxOccurs="1" />
            <xs:element name="bitrate" type="xs:integer" minOccurs="0" maxOccurs="1" />
            <xs:element name="alternateLanguage" type="xs:normalizedString" minOccurs="0" maxOccurs="1" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="SessionDType" abstract="false" mixed="false">
        <xs:annotation>
            <xs:documentation source="documentation">
                This is the top-level container for the OpenVideo metadata.                               
            </xs:documentation>
        </xs:annotation>
        <xs:choice minOccurs = "0" maxOccurs = "unbounded">
            <xs:element name="title" type="xs:normalizedString" minOccurs="1" maxOccurs="1" />
            <xs:element name="description" type="xs:string" minOccurs="0" maxOccurs="1" />
            <xs:element name="dateCreated" type="xs:dateTime" minOccurs="0" maxOccurs="1" />
            <xs:element name="location" type="LocationDType" minOccurs="0" maxOccurs="1" />
            <xs:element name="captureManifest" type="CaptureManifestDType" minOccurs="0" maxOccurs="1" />
            <xs:element name="markers" type="MarkersDType" minOccurs="0" maxOccurs="1" />
            <xs:element name="streams" type="StreamsDType" minOccurs="0" maxOccurs="1" />
            <xs:element name="contributors" type="ContributorsDType" minOccurs="0" maxOccurs="1" />
            <xs:element name="recorders" type="RecordingAgentsDType" minOccurs="0" maxOccurs="1" />
            <xs:element name="tags" type="TagsDType" minOccurs="0" maxOccurs="1" />
            <xs:element name="thumbnail" type="AttachmentDType" minOccurs="0" maxOccurs="1" />
            <xs:element name="thumbnailTime" type="ThumbnailTimeDType" minOccurs="0" maxOccurs="1" />
            <xs:element name="copyright" type="xs:string" minOccurs="0" maxOccurs="1" />
            <xs:element name="license" type="xs:string" minOccurs="0" maxOccurs="1" />
            <xs:element name="credit" type="xs:normalizedString" minOccurs="0" maxOccurs="unbounded" />
            <xs:element name="restrictions" type="xs:normalizedString" minOccurs="0" maxOccurs="1" />
            <xs:element name="attachments" type="AttachmentDType" minOccurs="0" maxOccurs="unbounded" />
            <xs:element name="cuts" type="CutsDType" minOccurs="0" maxOccurs="1" />
            <xs:group ref="grpStrict.any" />
        </xs:choice>
    </xs:complexType>

    <xs:complexType name="SpeakerMarkerDType" abstract="false" mixed="false">
        <xs:annotation>
            <xs:documentation source="documentation">
                The marker for the current speaker information. This adds file, duration and layout infor-
                mation to the base marker.                                                                
            </xs:documentation>
        </xs:annotation>
        <xs:complexContent>
            <xs:extension base="MarkerBaseDType">
                <xs:sequence>
                    <xs:element name="file" type="AttachmentDType" minOccurs="0" maxOccurs="1" />
                    <xs:element name="duration" type="xs:duration" minOccurs="0" maxOccurs="1" />
                    <xs:element name="layout" type="LayoutDType" minOccurs="0" maxOccurs="1" />
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="StreamDType" abstract="false" mixed="false">
        <xs:annotation>
            <xs:documentation source="documentation">
                The container for the information about a single stream to be used in the session. This i-
                ncludes information about the associated cuts, transcripts and renditions.                
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="title" type="xs:normalizedString" minOccurs="0" maxOccurs="1" />
            <xs:element name="startTime" type="xs:duration" minOccurs="1" maxOccurs="1" />
            <xs:element name="file" type="AttachmentDType" minOccurs="1" maxOccurs="1" />
            <xs:element name="bitrate" type="xs:integer" minOccurs="0" maxOccurs="1" />
            <xs:element name="recorderID" type="xs:normalizedString" minOccurs="0" maxOccurs="1" />
            <xs:element name="rendition" type="RenditionDType" minOccurs="0" maxOccurs="unbounded" />
            <xs:element name="cut" type="CutDType" minOccurs="0" maxOccurs="unbounded" />
            <xs:element name="source" minOccurs="1" maxOccurs="1">
                <xs:simpleType>
                    <xs:union>
                        <xs:simpleType>
                            <xs:restriction base="ExtensionStringDType" />
                        </xs:simpleType>
                        <xs:simpleType>
                            <xs:restriction base="xs:string">
                                <xs:enumeration value="presenter" />
                                <xs:enumeration value="screen" />
                                <xs:enumeration value="content" />
                                <xs:enumeration value="other" />
                            </xs:restriction>
                        </xs:simpleType>
                    </xs:union>
                </xs:simpleType>
            </xs:element>
            <xs:element name="providesAudio" type="xs:boolean" minOccurs="1" maxOccurs="1" />
            <xs:element name="captions" type="CaptionsDType" minOccurs="0" maxOccurs="unbounded" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="StreamsDType" abstract="false" mixed="false">
        <xs:annotation>
            <xs:documentation source="documentation">
                The container for the set of streams to be used in the session.                           
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="stream" type="StreamDType" minOccurs="1" maxOccurs="unbounded" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="TagDType" abstract="false" mixed="false">
        <xs:annotation>
            <xs:documentation source="documentation">
                The information for a single tag. This is supplied as a name/value tuple.                 
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="name" type="xs:normalizedString" minOccurs="0" maxOccurs="1" />
            <xs:element name="value" type="xs:normalizedString" minOccurs="1" maxOccurs="1" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="TagsDType" abstract="false" mixed="false">
        <xs:annotation>
            <xs:documentation source="documentation">
                The container for the set of tags/keywords used describe the contents in the video.       
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="tag" type="TagDType" minOccurs="1" maxOccurs="unbounded" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="ThumbnailTimeDType" abstract="false" mixed="false">
        <xs:annotation>
            <xs:documentation source="documentation">
                The container for information about the time and file to be used to generate a custom ses-
                sion thumbnail.                                                                           
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="startTime" type="xs:duration" minOccurs="1" maxOccurs="1" />
            <xs:element name="sourceFile" type="AttachmentDType" minOccurs="1" maxOccurs="1" />
        </xs:sequence>
    </xs:complexType>

    <!-- ================================================================================================== -->

    <!-- Generate the SOAP Binding ComplexTypes *********************************************************** -->

    <!-- ================================================================================================== -->

    <!-- Generate the derived ComplexTypes **************************************************************** -->

    <xs:complexType name="SocialMediaDType" abstract="false" mixed="false">
        <xs:annotation>
            <xs:documentation source="documentation">
                Identifies a Social Media source: the identification is as a URL.                         
            </xs:documentation>
        </xs:annotation>
        <xs:simpleContent>
            <xs:extension base="URLDType">
                <xs:attribute name="smtype" use="required" type="xs:normalizedString" />
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>

    <!-- ================================================================================================== -->

    <!-- Declaration of the elements (Complex) ************************************************************ -->

    <!-- ================================================================================================== -->

    <!-- Declaration of the elements (Derived) ************************************************************ -->

    <!-- ================================================================================================== -->

    <!-- Declaration of the root element(s) *************************************************************** -->

    <xs:element name="session" type="SessionDType" />

    <!-- ================================================================================================== -->

</xs:schema>
