<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns:ARSTV="urn:arstv:ver1:represent:ARSTVmetadata:2011:07" xmlns:mpeg7="urn:mpeg:mpeg7:schema:2001" xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:arstv:ver1:represent:ARSTVmetadata:2011:07" elementFormDefault="qualified" attributeFormDefault="unqualified">
  <import namespace="urn:mpeg:mpeg7:schema:2001" schemaLocation="mpeg7-cdp-2004.xsd"/>

  <!-- ################################################ -->
  <element name="ARSTV" type="ARSTV:ARSTVType"/>
  <complexType name="ARSTVType">
    <sequence>
      <element name="DescriptionMetadata" type="mpeg7:DescriptionMetadataType" minOccurs="0"/>
      <element name="InitialInstruction" type="abm:InitialInstructionType" minOccurs="0" maxOccurs="unbounded"/>
      <element name="Instruction" type="ARSTM:InstructionType" minOccurs="0" maxOccurs="unbounded"/>
    </sequence>
  </complexType>

  <!-- ################################################ -->
  <!--  Inital Instruction type                              -->
  <!-- ################################################ -->
  <element name="InitInstruction" type="arstv:InitialInstructionType"/>
  <complexType name="InitialInstructionType">
    <sequence>
      <element name="AugmentedObject" type="arstv:AugmentedObjectType" maxOccurs="unbounded"/>
    </sequence>
    <attribute name="id" type="ID" use="optional"/>
    <attribute name="contentsNum" type="unsignedInt" use="optional"/>
  </complexType>

  <!-- ################################################ -->
  <!--  Instruction Base type                                 -->
  <!-- ################################################ -->
  <complexType name="InstructionBaseType" abstract="true">
    <complexContent>
      <restriction base="anyType">
        <attribute name="id" type="ID" use="optional"/>
      </restriction>
    </complexContent>
  </complexType>

  <!-- ################################################ -->
  <!--  Instruction type                                       -->
  <!-- ################################################ -->
  <complexType name="InstructionType">
    <complexContent>
      <extension base="ARSTV:InstructionBaseType">
        <sequence>
          <element name="ReferenceResources" type="arstv:ReferenceResourcesType" minOccurs="0"/>
          <element name="AugmentationRegion" type=" arstv:AugmentationRegionType" />
          <element name="AugmentedObject" type=" arstv:AugmentedObjectType" />
          <element name="EnvironmentInfo" type=" arstv:EnvironmentInfoType" minOccurs="0" maxOccurs="unbounded"/>
          <element name="UserInteraction" type=" arstv:UserInteractionType" minOccurs="0" maxOccurs="unbounded"/>
        </sequence>
        <attribute name="firstInstFlag" type="boolean" use="required"/>
        <attribute name="augRegionIndicator" type="unsignedInt" use="required"/>
        <attribute name="pts" type="unsignedInt" use="required"/>
        <attribute name="duration" type="unsignedInt" use="required"/>
        <attribute name="timeScale" type="unsignedInt" use="required"/>
        <attribute name="numInstruction" type="unsignedInt" use="required"/>
        <attribute name="priority" type="unsignedInt" use="required"/>
      </extension>
    </complexContent>
  </complexType>

  <!-- ########################################## -->
  <!--  Definition of Reference Resource Type     -->
  <!-- ########################################## -->
  <complexType name="ReferenceResourcesType">
    <sequence>
      <element name="Resources" type="string" maxOccurs="unbounded"/>
    </sequence>
  </complexType>

  <!-- ########################################## -->
  <!--  Definition of Augmentation Region Type     -->
  <!-- ########################################## -->
  <complexType name="AugmentationRegionType">
    <sequence>
      <element name="TransformMatrix" type="ARSTV:FloatMatrixType" minOccurs="0"/>
      <element name="Coordinates" type="ARSTV:CoordinateType" minOccurs="0"/>
      <element name="SRT" type="ARSTV:SRTType" minOccurs="0"/>
    </sequence>
  </complexType>

  <complexType name="CoordinateType">
    <attribute name="x1" type="ARSTV:zeroToOneType" use="required"/>
    <attribute name="y1" type="ARSTV:zeroToOneType" use="required"/>
    <attribute name="z1" type="ARSTV:minusOneToOneType" use="required"/>
    <attribute name="x2" type="ARSTV:zeroToOneType" use="required"/>
    <attribute name="y2" type="ARSTV:zeroToOneType" use="required"/>
    <attribute name="z2" type="ARSTV:minusOneToOneType" use="required"/>
    <attribute name="x3" type="ARSTV:zeroToOneType" use="required"/>
    <attribute name="y3" type="ARSTV:zeroToOneType" use="required"/>
    <attribute name="z3" type="ARSTV:minusOneToOneType" use="required"/>
    <attribute name="x4" type="ARSTV:zeroToOneType" use="required"/>
    <attribute name="y4" type="ARSTV:zeroToOneType" use="required"/>
    <attribute name="z4" type="ARSTV:minusOneToOneType" use="required"/>
  </complexType>

  <complexType name="SRTType">
    <attribute name="sx" type="float" use="required"/>
    <attribute name="sy" type="float" use="required"/>
    <attribute name="sz" type="float" use="required"/>
    <attribute name="rx" type="float" use="required"/>
    <attribute name="ry" type="float" use="required"/>
    <attribute name="rz" type="float" use="required"/>
    <attribute name="tx" type="float" use="required"/>
    <attribute name="ty" type="float" use="required"/>
    <attribute name="tz" type="float" use="required"/>
  </complexType>

  <!-- FloatMatrixType -->
  <complexType name="FloatMatrixType">
    <simpleContent>
      <extension base="ARSTV:FloatVector">
        <attribute ref="mpeg7:dim" use="required"/>
      </extension>
    </simpleContent>
  </complexType>

  <simpleType name="FloatVector">
    <list itemType="float"/>
  </simpleType>
  <simpleType name="zeroToOneType">
    <restriction base="float">
      <minInclusive value="0.0"/>
      <maxInclusive value="+1.0"/>
    </restriction>
  </simpleType>

  <simpleType name="minusOneToOneType">
    <restriction base="float">
      <minInclusive value="-1.0"/>
      <maxInclusive value="+1.0"/>
    </restriction>
  </simpleType>

  <!-- ########################################## -->
  <!--  Definition of Augmented Object Type        -->
  <!-- ########################################## -->
  <complexType name="AugmentedObjectType">
    <choice>
      <element name="Inline" type="mpeg7:InlineMediaType" minOccurs="0"/>
      <element name="Remote" type="anyURI" minOccurs="0"/>
      <element name="Tactile" type="arstv:TactileType" minOccurs="0"/>
    </choice>
    <attribute name="targetID" type="anyURI" use="optional"/>
    <attribute name="clearFlag" type="boolean" use="optional"/>
    <attribute name="service" type="unsignedInt" use="optional" default="1"/>
    <simpleType>
      <restriction base="string">
        <enumeration value="happy"/>
        <enumeration value="sad"/>
        <enumeration value="angry"/>
        <enumeration value="sick"/>
      </restriction>
    </simpleType>
    </attribute>
  </complexType>

  <!-- ########################################## -->
  <!--  Definition of Tactile Type                    -->
  <!-- ########################################## -->
  <complexType name="TactileType">
    <sequence>
      <element name="ArrayIntensity" type="mpeg7:FloatMatrixType"/>
    </sequence>
    <attribute name="tactileEffect" type="arstv:tactileEffectType" use="required"/>
    <attribute name="timeSamples" type="positiveInteger" use="required"/>
  </complexType>

  <simpleType name="tactileEffectType">
    <restriction base="string">
      <enumeration value="pressure"/>
      <enumeration value="vibration"/>
      <enumeration value="electric"/>
    </restriction>
  </simpleType>

  <!-- ########################################## -->
  <!--  Definition of Environment Info Type         -->
  <!-- ########################################## -->
  <complexType name="EnvironmentInfoType">
    <sequence>
      <element name="GlobalPosition" type="arstv:GlobalPositionType" minOccurs="0" maxOccurs="unbounded"/>
      <element name="Light" type="arstv:LightType" minOccurs="0" maxOccurs="unbounded"/>
      <element name="Camera" type="arstv:CameraType" minOccurs="0" maxOccurs="unbounded"/>
    </sequence>
  </complexType>

  <!--#################################### -->
  <!--Definition of Global Position type    -->
  <!--#################################### -->
  <complexType name="GlobalPositionType">
    <sequence>
      <element name="Address" type="mpeg7:PlaceType" minOccurs="0"/>
    </sequence>
    <attribute name="longitude" use="required">
      <simpleType>
        <restriction base="double">
          <minInclusive value="-180.0"/>
          <maxInclusive value="180.0"/>
        </restriction>
      </simpleType>
    </attribute>
    <attribute name="latitude" use="required">
      <simpleType>
        <restriction base="double">
          <minInclusive value="-90.0"/>
          <maxInclusive value="90.0"/>
        </restriction>
      </simpleType>
    </attribute>
  </complexType>

  <!--#################################### -->
  <!--Definition of Light type                -->
  <!--#################################### -->
  <complexType name="LightType">
    <sequence>
      <element name="Position" type="ARSTV:DirectionType" minOccurs="0"/>
      <element name="Rotation" type="ARSTV:RotationType" minOccurs="0"/>
    </sequence>
    <attribute name="type" type="unsignedInt" use="optional"/>
    <attribute name="color" type="ARSTV:ColorType" use="optional"/>
    <attribute name="intensity" type="ARSTV:zeroToOneType"/>
  </complexType>

  <complexType name="PositionType">
    <attribute name="px" type="float" use="optional"/>
    <attribute name="py" type="float" use="optional"/>
    <attribute name="pz" type="float" use="optional"/>
  </complexType>

  <complexType name="RotationType">
    <attribute name="vx" type="float" use="optional"/>
    <attribute name="vy" type="float" use="optional"/>
    <attribute name="vz" type="float" use="optional"/>
  </complexType>

  <!--#################################### -->
  <!--Definition of Color type                -->
  <!--#################################### -->
  <simpleType name="ColorType">
    <restriction base="NMTOKEN">
      <whiteSpace value="collapse"/>
      <pattern value="#[0-9A-Fa-f]{6}"/>
    </restriction>
  </simpleType>

  <!--#################################### -->
  <!--Definition of Camera type               -->
  <!--#################################### -->
  <complexType name="CameraType">
    <attribute name="fov" type="float" use="optional"/>
  </complexType>

  <!-- ########################################## -->
  <!--  Definition of User Interaction Type         -->
  <!-- ########################################## -->
  <complexType name="UserInteractionType">
    <sequence>
      <element name="Resource" type="arstv:ResourceType" minOccurs="0"/>
      <element name="SRT" type="arstv:SRTType" minOccurs="0"/>
    </sequence>
    <attribute name="event" type="unsignedInt" use="optional"/>
  </complexType>

</schema>