<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSPY v5 rel. 2 U (http://www.xmlspy.com) by Architekt (Vienna University of Technology) -->
<!--W3C Schema generated by XMLSPY v5 rel. 2 U (http://www.xmlspy.com)-->
<xs:schema targetNamespace="http://studierstube.icg.tu-graz.ac.at/april" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://studierstube.icg.tu-graz.ac.at/april" xmlns:xsdoc="http://studierstube.icg.tu-graz.ac.at/xsdoc" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:annotation>
        <xs:documentation>
Author: Florian Ledermann (<a href="mailto:ledermann@ims.tuwien.ac.at">ledermann@ims.tuwien.ac.at</a>)
<p>
To get an overview, the <a href="april-schema.png">graphical schema representation</a> 
  is the recommended entry point.</p>
            <p>Links to
<ul>
                    <li>
                        <a href="http://studierstube.icg.tu-graz.ac.at/april">The APRIL Homepage</a>
                    </li>
                    <li>
                        <a href="component-spec.html">APRIL Components subschema documentation</a>
                    </li>
                    <li>
                        <a href="april.xsd">APRIL Schema</a>
                    </li>
                    <li>
                        <a href="april.dtd">APRIL DTD</a>
                    </li>
                </ul>
            </p>
            <p>

APRIL provides language elements for describing
<ul>
                    <li>The input and output devices of a system and its users (Low-level interaction)</li>
                    <li>Interaction modalities available to the user (high-level interaction)</li>
                    <li>Binding of abstract story concepts to concrete media objects.</li>
                    <li>Basic arrangement of media resources (models, sounds, images, ...) in time and space through animation.</li>
                    <li>Temporal and logical progression of the presentation (flow control)</li>
                </ul>
            </p>
        </xs:documentation>
    </xs:annotation>
    <!-- -->
    <xs:element name="april">
        <xs:annotation>
            <xs:documentation>The root element of every APRIL file.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="setup" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Wrapper element for input and output device configuration. The config section of the APRIL file specified as src is imported (if present), and overlayed with the information of the local config section (this means that local elements with the same id as in the src file, and their child-elements, override the elements specified in the src file). The low-level tracking configuration is done in the OpenTracker file specified with the otsource attribute, or inline in the corresponding interaction elements (see below). If there is no setup element, APRIL looks for a file called "default.aps" in the presentations directory.</xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="host" minOccurs="0" maxOccurs="unbounded">
                                <xs:annotation>
                                    <xs:documentation>Wrapper element for all devices connected to a single computer. Multiple hosts are NOT IMPLEMENTED.</xs:documentation>
                                </xs:annotation>
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="screen" maxOccurs="unbounded">
                                            <xs:annotation>
                                                <xs:documentation>Configures a VGA output port.</xs:documentation>
                                            </xs:annotation>
                                            <xs:complexType>
                                                <xs:attribute name="resolution" type="Vec2i" use="optional" default="1600 1200">
                                                    <xs:annotation>
                                                        <xs:documentation>Screen resolution in pixels.</xs:documentation>
                                                    </xs:annotation>
                                                </xs:attribute>
                                            </xs:complexType>
                                        </xs:element>
                                        <xs:element name="display" maxOccurs="unbounded">
                                            <xs:annotation>
                                                <xs:documentation>Defines a display for rendering content on. The containing displaytracking and/or headtracking elements define optional tracking, this elements configures the position of the display window on an output port, its resolution and the default camera pose in the world.</xs:documentation>
                                            </xs:annotation>
                                            <xs:complexType>
                                                <xs:all>
                                                    <xs:element name="headtracking" type="TrackableType" minOccurs="0">
                                                        <xs:annotation>
                                                            <xs:documentation>Configures the headtracking for the parent display element.</xs:documentation>
                                                        </xs:annotation>
                                                    </xs:element>
                                                    <xs:element name="displaytracking" type="TrackableType" minOccurs="0">
                                                        <xs:annotation>
                                                            <xs:documentation>Configures tracking of the center of the display.</xs:documentation>
                                                        </xs:annotation>
                                                    </xs:element>
                                                    <xs:element name="pointer" minOccurs="0">
                                                        <xs:annotation>
                                                            <xs:documentation>Configures a 2d-pointing device for the display, which can be used to interact with widgets or point on real/virtual things. Currently this is hard-coded to use the mouse input.</xs:documentation>
                                                        </xs:annotation>
                                                    </xs:element>
                                                </xs:all>
                                                <xs:attribute name="id" type="xs:ID" use="optional">
                                                    <xs:annotation>
                                                        <xs:documentation>ID to uniquely identify this display.</xs:documentation>
                                                    </xs:annotation>
                                                </xs:attribute>
                                                <xs:attribute name="screen" type="xs:int" use="optional" default="1">
                                                    <xs:annotation>
                                                        <xs:documentation>The screen number this display window should be rendered on.</xs:documentation>
                                                    </xs:annotation>
                                                </xs:attribute>
                                                <xs:attribute name="screenPosition" type="ScreenSizeType" use="optional" default="0 0">
                                                    <xs:annotation>
                                                        <xs:documentation>position of the top left corner of the display window on the screen in pixels or percentage.</xs:documentation>
                                                    </xs:annotation>
                                                </xs:attribute>
                                                <xs:attribute name="screenSize" type="ScreenSizeType" use="optional" default="fullscreen">
                                                    <xs:annotation>
                                                        <xs:documentation>Size of the display on screen in pixels or percentage.</xs:documentation>
                                                    </xs:annotation>
                                                </xs:attribute>
                                                <xs:attribute name="stereo" type="xs:boolean" use="optional" default="false">
                                                    <xs:annotation>
                                                        <xs:documentation>Flag indicating if frame-interleved stereo should be used.</xs:documentation>
                                                    </xs:annotation>
                                                </xs:attribute>
                                                <xs:attribute name="worldPosition" type="Vec3f" use="optional" default="0 0 0">
                                                    <xs:annotation>
                                                        <xs:documentation>The position of the center of the image plane in world coordinates. Overridden if a displaytracking element is used.</xs:documentation>
                                                    </xs:annotation>
                                                </xs:attribute>
                                                <xs:attribute name="worldSize" type="Vec2f" use="optional" default="0.4 0.3">
                                                    <xs:annotation>
                                                        <xs:documentation>Size of the image plane in the world.</xs:documentation>
                                                    </xs:annotation>
                                                </xs:attribute>
                                                <xs:attribute name="worldOrientation" type="Vec4f" use="optional" default="0 1 0 0">
                                                    <xs:annotation>
                                                        <xs:documentation>Orientation of the image plane in the world. Overridden if a displaytracking element is used.</xs:documentation>
                                                    </xs:annotation>
                                                </xs:attribute>
                                                <xs:attribute name="eyeOffsetL" type="Vec3f" use="optional" default="-0.03 0 0">
                                                    <xs:annotation>
                                                        <xs:documentation>Offest of the left eye for a stereo display.</xs:documentation>
                                                    </xs:annotation>
                                                </xs:attribute>
                                                <xs:attribute name="eyeOffsetR" type="Vec3f" use="optional" default="0.03 0 0">
                                                    <xs:annotation>
                                                        <xs:documentation>Offest of the right eye for stereo displays.</xs:documentation>
                                                    </xs:annotation>
                                                </xs:attribute>
                                                <xs:attribute name="viewpointPosition" type="Vec3f" use="optional" default="0 0 0.5">
                                                    <xs:annotation>
                                                        <xs:documentation>The world position of the viewpoint. Overridden if a headtrtacking element is used.</xs:documentation>
                                                    </xs:annotation>
                                                </xs:attribute>
                                                <xs:attribute name="mode" use="optional" default="AR">
                                                    <xs:annotation>
                                                        <xs:documentation>"AR" (default value) displays the actors of the presentation. "VR" also renders the stage elements for a virtual reality view onto the scene.</xs:documentation>
                                                    </xs:annotation>
                                                    <xs:simpleType>
                                                        <xs:restriction base="xs:string">
                                                            <xs:enumeration value="AR"/>
                                                            <xs:enumeration value="VR"/>
                                                            <xs:enumeration value="light"/>
                                                        </xs:restriction>
                                                    </xs:simpleType>
                                                </xs:attribute>
                                                <xs:attribute name="debug" type="xs:boolean" use="optional" default="false">
                                                    <xs:annotation>
                                                        <xs:documentation>If set to true, debug information is shown in the display.</xs:documentation>
                                                    </xs:annotation>
                                                </xs:attribute>
                                            </xs:complexType>
                                        </xs:element>
                                        <xs:element name="station" type="TrackableType" minOccurs="0" maxOccurs="unbounded">
                                            <xs:annotation>
                                                <xs:documentation>Defines a tracked artifact like a marker.</xs:documentation>
                                            </xs:annotation>
                                        </xs:element>
                                        <xs:element name="button" type="TrackableType" minOccurs="0" maxOccurs="unbounded">
                                            <xs:annotation>
                                                <xs:documentation>NOT IMPLEMENTED. A hardware button that can be used for user input.</xs:documentation>
                                            </xs:annotation>
                                        </xs:element>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                        <xs:attribute name="src" type="xs:anyURI">
                            <xs:annotation>
                                <xs:documentation>URI of external file containing the config section to use. If a src is specified, any inline specifications will be ignored and the configuration specified in the given file will be used.
<question>We should support something like overlays, i.e. the config loaded from file is overlayed with the inline definitions!</question>
                                </xs:documentation>
                            </xs:annotation>
                        </xs:attribute>
                        <xs:attribute name="otfile" type="xs:anyURI">
                            <xs:annotation>
                                <xs:documentation>URI of OpenTracker config file to use as a basis for the tracking configuration. Named OpenTracker nodes referenced in the APRIL file are referenced from this file.</xs:documentation>
                            </xs:annotation>
                        </xs:attribute>
                        <xs:attribute name="workspacepath" type="xs:anyURI">
                            <xs:annotation>
                                <xs:documentation>Path to the executable(s) of the traget platform.</xs:documentation>
                            </xs:annotation>
                        </xs:attribute>
                    </xs:complexType>
                </xs:element>
                <xs:element name="presentation" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>This is the top-level wrapper element of a APRIL presentation.</xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="story">
                                <xs:annotation>
                                    <xs:documentation>The content of this element specifies the logic (or the "story") of the presentation as a hierarchical state machine. The syntax is derived from XMI, the official UML-to-XML serialization syntax, but simplified for better readability.</xs:documentation>
                                </xs:annotation>
                                <xs:complexType>
                                    <xs:complexContent>
                                        <xs:restriction base="Scene">
                                            <xs:sequence>
                                                <xs:element ref="annotation" minOccurs="0" maxOccurs="unbounded"/>
                                                <xs:choice>
                                                    <xs:sequence>
                                                        <xs:element ref="scene" minOccurs="0" maxOccurs="unbounded"/>
                                                        <xs:element ref="transition" minOccurs="0" maxOccurs="unbounded"/>
                                                    </xs:sequence>
                                                    <xs:sequence>
                                                        <xs:element ref="concurrentScene" maxOccurs="unbounded"/>
                                                    </xs:sequence>
                                                </xs:choice>
                                            </xs:sequence>
                                            <xs:attribute name="initial" use="prohibited"/>
                                            <xs:attribute name="name" use="optional">
                                                <xs:annotation>
                                                    <xs:documentation>A unique name to identify this story.</xs:documentation>
                                                </xs:annotation>
                                            </xs:attribute>
                                        </xs:restriction>
                                    </xs:complexContent>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="cast">
                                <xs:annotation>
                                    <xs:documentation>This element holds all references to used media resources (models, images, sounds, scripts etc.).</xs:documentation>
                                </xs:annotation>
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:choice maxOccurs="unbounded">
                                            <xs:element name="stage" type="VisibleActorType" minOccurs="0" maxOccurs="unbounded">
                                                <xs:annotation>
                                                    <xs:documentation>Defines geometry as a proxy for real world objects. In augmented reality applications, this is not displayed, but used for correct rendering of intersections between virtual and real content, for example. In VR and authoring setups, these objects may be rendered as regular scene objects. </xs:documentation>
                                                </xs:annotation>
                                            </xs:element>
                                            <xs:element name="actor" minOccurs="0" maxOccurs="unbounded">
                                                <xs:annotation>
                                                    <xs:documentation>Defines an actor of the presentation as an instance of a nAPRIL component. Inside the actor element, default values for its input fields can be set by using input elements.</xs:documentation>
                                                </xs:annotation>
                                                <xs:complexType>
                                                    <xs:sequence>
                                                        <xs:element name="input" minOccurs="0" maxOccurs="unbounded">
                                                            <xs:annotation>
                                                                <xs:documentation>Defines the default value for a specific input for this presentation.</xs:documentation>
                                                            </xs:annotation>
                                                            <xs:complexType>
                                                                <xs:attribute name="id" type="xs:normalizedString" use="required">
                                                                    <xs:annotation>
                                                                        <xs:documentation>Id ofthe field to set.</xs:documentation>
                                                                    </xs:annotation>
                                                                </xs:attribute>
                                                                <xs:attribute name="value" type="xs:string" use="required">
                                                                    <xs:annotation>
                                                                        <xs:documentation>Default value of that field.</xs:documentation>
                                                                    </xs:annotation>
                                                                </xs:attribute>
                                                            </xs:complexType>
                                                        </xs:element>
                                                    </xs:sequence>
                                                    <xs:attribute name="id" type="xs:ID" use="required">
                                                        <xs:annotation>
                                                            <xs:documentation>Unique id of the actor.</xs:documentation>
                                                        </xs:annotation>
                                                    </xs:attribute>
                                                    <xs:attribute name="src" type="xs:anyURI" use="required">
                                                        <xs:annotation>
                                                            <xs:documentation>Source of the component definition file.</xs:documentation>
                                                        </xs:annotation>
                                                    </xs:attribute>
                                                </xs:complexType>
                                            </xs:element>
                                            <xs:element name="light" minOccurs="0" maxOccurs="unbounded">
                                                <xs:annotation>
                                                    <xs:documentation>A light source, either real or virtual. NOT IMPLEMENTED.</xs:documentation>
                                                </xs:annotation>
                                            </xs:element>
                                            <xs:element name="sound" minOccurs="0" maxOccurs="unbounded">
                                                <xs:annotation>
                                                    <xs:documentation>A sound to be played in the presentation. NOT IMPLEMENTED.</xs:documentation>
                                                </xs:annotation>
                                            </xs:element>
                                        </xs:choice>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="behaviors">
                                <xs:annotation>
                                    <xs:documentation>The behaviours section binds behaviours of objects to states of the story logic.</xs:documentation>
                                </xs:annotation>
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="behavior" minOccurs="0" maxOccurs="unbounded">
                                            <xs:annotation>
                                                <xs:documentation>A behavior is a set of property changes bound to a state of the tory logic. Whenever the state is entered, the actions defined in the "entry" sub-element are performed. If the story is still in this state after perfomring the entry actions, the "do" actions are performed, and can be interrupted at any time by leaving the state. Upon leving the state, the "exit" actions are guaranteed to perform.</xs:documentation>
                                            </xs:annotation>
                                            <xs:complexType>
                                                <xs:sequence>
                                                    <xs:element name="entry" minOccurs="0">
                                                        <xs:annotation>
                                                            <xs:documentation>The "entry" actions are performed when the associated state is entered. Actions defined here are guaranteed to perform, now matter how long the story remains in this state. Actions should therefore only be "set" and "connect", and very short "animate"ions.</xs:documentation>
                                                        </xs:annotation>
                                                        <xs:complexType>
                                                            <xs:complexContent>
                                                                <xs:extension base="LabelType">
                                                                    <xs:attribute name="duration" type="xs:duration" use="optional" default="PT0.0S">
                                                                        <xs:annotation>
                                                                            <xs:documentation>Allows explicit setting of the duration of the entry substate. If this is not used, the dration is calculated from the set and animate elements inside.</xs:documentation>
                                                                        </xs:annotation>
                                                                    </xs:attribute>
                                                                </xs:extension>
                                                            </xs:complexContent>
                                                        </xs:complexType>
                                                    </xs:element>
                                                    <xs:element name="do" type="LabelType" minOccurs="0">
                                                        <xs:annotation>
                                                            <xs:documentation>Actions in this group are performed as long as the story is in the associated state. Note that actions might not be called at all, if the state is immediately left. This is the only place where looped animations make sense, because they can be cancelled by leaving the state. </xs:documentation>
                                                        </xs:annotation>
                                                    </xs:element>
                                                    <xs:element name="exit" type="LabelType" minOccurs="0">
                                                        <xs:annotation>
                                                            <xs:documentation>Actions defined here are executed when the associated state is left. They are guaranteed to perform.</xs:documentation>
                                                        </xs:annotation>
                                                    </xs:element>
                                                </xs:sequence>
                                                <xs:attribute name="scene" type="xs:IDREF" use="required">
                                                    <xs:annotation>
                                                        <xs:documentation>ID of the scene this behavior should be bound to.</xs:documentation>
                                                    </xs:annotation>
                                                </xs:attribute>
                                            </xs:complexType>
                                        </xs:element>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="interactions">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="event" minOccurs="0" maxOccurs="unbounded">
                                            <xs:complexType>
                                                <xs:sequence>
                                                    <xs:choice maxOccurs="unbounded">
                                                        <xs:element name="timeout">
                                                            <xs:annotation>
                                                                <xs:documentation>This triggers the associated transition automatically after a specified time.</xs:documentation>
                                                            </xs:annotation>
                                                            <xs:complexType>
                                                                <xs:complexContent>
                                                                    <xs:extension base="Interaction">
                                                                        <xs:attribute name="time" type="xs:duration" use="required">
                                                                            <xs:annotation>
                                                                                <xs:documentation>Time after which the transition should trigger.</xs:documentation>
                                                                            </xs:annotation>
                                                                        </xs:attribute>
                                                                    </xs:extension>
                                                                </xs:complexContent>
                                                            </xs:complexType>
                                                        </xs:element>
                                                        <xs:element name="disabled" type="Interaction">
                                                            <xs:annotation>
                                                                <xs:documentation>This disables a transition. Same as leaving it empty.</xs:documentation>
                                                            </xs:annotation>
                                                        </xs:element>
                                                        <xs:element name="always" type="Interaction">
                                                            <xs:annotation>
                                                                <xs:documentation>This always triggers the transition immediately.</xs:documentation>
                                                            </xs:annotation>
                                                        </xs:element>
                                                        <xs:element name="buttonaction">
                                                            <xs:annotation>
                                                                <xs:documentation>This creates or uses a button when the transition becomes available, that can be pressed by the user to trigger the transition.</xs:documentation>
                                                            </xs:annotation>
                                                            <xs:complexType>
                                                                <xs:complexContent>
                                                                    <xs:extension base="Interaction">
                                                                        <xs:attribute name="virtual" type="xs:boolean" use="optional" default="true">
                                                                            <xs:annotation>
                                                                                <xs:documentation>Whether to create a virtual button. DEPRECATED.</xs:documentation>
                                                                            </xs:annotation>
                                                                        </xs:attribute>
                                                                        <xs:attribute name="caption" type="xs:string" use="optional">
                                                                            <xs:annotation>
                                                                                <xs:documentation>The label printed on the (virtual) button.</xs:documentation>
                                                                            </xs:annotation>
                                                                        </xs:attribute>
                                                                    </xs:extension>
                                                                </xs:complexContent>
                                                            </xs:complexType>
                                                        </xs:element>
                                                        <xs:element name="rayaction">
                                                            <xs:annotation>
                                                                <xs:documentation>This allows the user to use a raypicker to point at objects in the scene. If the specified actor or stage object is selected, the transition fires.</xs:documentation>
                                                            </xs:annotation>
                                                            <xs:complexType>
                                                                <xs:complexContent>
                                                                    <xs:extension base="Interaction">
                                                                        <xs:attribute name="target" type="xs:IDREF" use="required">
                                                                            <xs:annotation>
                                                                                <xs:documentation>ID of the actor or stage object that must be selected to trigger the transition.</xs:documentation>
                                                                            </xs:annotation>
                                                                        </xs:attribute>
                                                                    </xs:extension>
                                                                </xs:complexContent>
                                                            </xs:complexType>
                                                        </xs:element>
                                                        <xs:element name="evaluator">
                                                            <xs:annotation>
                                                                <xs:documentation>Evaluates an output of an actor against a fixed value or another output. If the expression evaluates to true, the transition fires.</xs:documentation>
                                                            </xs:annotation>
                                                            <xs:complexType>
                                                                <xs:complexContent>
                                                                    <xs:extension base="Interaction">
                                                                        <xs:attribute name="source" type="xs:IDREF" use="required">
                                                                            <xs:annotation>
                                                                                <xs:documentation>Actor or tracking element that should be used as input.</xs:documentation>
                                                                            </xs:annotation>
                                                                        </xs:attribute>
                                                                        <xs:attribute name="output" type="xs:string" use="required">
                                                                            <xs:annotation>
                                                                                <xs:documentation>Output field of the source to use. For tracking elements, position and orientation are available outputs.</xs:documentation>
                                                                            </xs:annotation>
                                                                        </xs:attribute>
                                                                        <xs:attribute name="comparator" use="optional" default="equal">
                                                                            <xs:annotation>
                                                                                <xs:documentation>The kind of comparison to perform. One of equal (default), lessThan, greaterThan, lessOrEqual, greaterOrEqual, notEqual, isInside (bounding box check), notInside.</xs:documentation>
                                                                            </xs:annotation>
                                                                            <xs:simpleType>
                                                                                <xs:restriction base="xs:NMTOKEN">
                                                                                    <xs:enumeration value="isInside"/>
                                                                                    <xs:enumeration value="notInside"/>
                                                                                    <xs:enumeration value="lessThan"/>
                                                                                    <xs:enumeration value="greaterThan"/>
                                                                                    <xs:enumeration value="lessOrEqual"/>
                                                                                    <xs:enumeration value="greaterOrEqual"/>
                                                                                    <xs:enumeration value="equal"/>
                                                                                    <xs:enumeration value="notEqual"/>
                                                                                </xs:restriction>
                                                                            </xs:simpleType>
                                                                        </xs:attribute>
                                                                        <xs:attribute name="value" type="xs:string" use="optional">
                                                                            <xs:annotation>
                                                                                <xs:documentation>The fixed value the source output should be compared to.</xs:documentation>
                                                                            </xs:annotation>
                                                                        </xs:attribute>
                                                                        <xs:attribute name="source2" type="xs:IDREF" use="optional">
                                                                            <xs:annotation>
                                                                                <xs:documentation>A second actor or tracking element that delivers the output for comparison.</xs:documentation>
                                                                            </xs:annotation>
                                                                        </xs:attribute>
                                                                        <xs:attribute name="output2" type="xs:string" use="optional">
                                                                            <xs:annotation>
                                                                                <xs:documentation>The output of the second source to be used.</xs:documentation>
                                                                            </xs:annotation>
                                                                        </xs:attribute>
                                                                    </xs:extension>
                                                                </xs:complexContent>
                                                            </xs:complexType>
                                                        </xs:element>
                                                    </xs:choice>
                                                </xs:sequence>
                                                <xs:attribute name="id" type="xs:ID" use="required">
                                                    <xs:annotation>
                                                        <xs:documentation>ID of the transition this interaction is mapped to.</xs:documentation>
                                                    </xs:annotation>
                                                </xs:attribute>
                                            </xs:complexType>
                                        </xs:element>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                        <xs:attribute name="id" type="xs:ID" use="required">
                            <xs:annotation>
                                <xs:documentation>Unique ID for this presentation. Depending on the implementation of the transformation of APRIL to a specific platform, this will be used for generating file- or folder names for the resulting files.</xs:documentation>
                            </xs:annotation>
                        </xs:attribute>
                        <xs:attribute name="name" type="xs:string" use="optional" default="Unnamed Presentation">
                            <xs:annotation>
                                <xs:documentation>The name of the presentation. This can be used by target platforms as a human-readable title for the presentation.</xs:documentation>
                            </xs:annotation>
                        </xs:attribute>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <!-- -->
    <xs:element name="scene" type="Scene">
        <xs:annotation>
            <xs:documentation>A state in a hierarchical state machine.</xs:documentation>
        </xs:annotation>
    </xs:element>
    <xs:element name="transition">
        <xs:annotation>
            <xs:documentation>A transition from one state to another, specifying the transition event name.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:attribute name="event" type="xs:Name" use="required">
                <xs:annotation>
                    <xs:documentation>Name of the event to trigger the transition.</xs:documentation>
                </xs:annotation>
            </xs:attribute>
            <xs:attribute name="source" type="xs:Name" use="required">
                <xs:annotation>
                    <xs:documentation>Id of the source scene of the transition.</xs:documentation>
                </xs:annotation>
            </xs:attribute>
            <xs:attribute name="target" type="xs:Name" use="required">
                <xs:annotation>
                    <xs:documentation>Id of the target scene of the transition.</xs:documentation>
                </xs:annotation>
            </xs:attribute>
            <xs:attribute name="guard" type="xs:string">
                <xs:annotation>
                    <xs:documentation>A guard string, that can contian the id of another state. This means that the transition is only available if the story is currently in this state.</xs:documentation>
                </xs:annotation>
            </xs:attribute>
        </xs:complexType>
    </xs:element>
    <xs:element name="concurrentScene" type="Scene">
        <xs:annotation>
            <xs:documentation>Wrapper element to seperate multiple concurrent sub-engines inside a superstate.</xs:documentation>
        </xs:annotation>
    </xs:element>
    <xs:element name="annotation">
        <xs:annotation>
            <xs:documentation>Inside this element, any annotation might be added to describe what is happening inside this scene.</xs:documentation>
        </xs:annotation>
    </xs:element>
    <!-- -->
    <xs:complexType name="Interaction" abstract="true">
        <xs:attribute name="auto" type="xs:boolean" use="optional" default="false">
            <xs:annotation>
                <xs:documentation>If set to true, the transition triggers automatically if it is the only available transition. NOT IMPLEMENTED</xs:documentation>
            </xs:annotation>
        </xs:attribute>
    </xs:complexType>
    <xs:complexType name="ActorType" mixed="false">
        <xs:annotation>
            <xs:documentation>Base type for stage, actor, light and sound elements. DEPRECATED.</xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="inline" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>You can specify content inline by wrapping it with this tag and putting it as a first child of the actor element. Note that if a src attribute is present on the parent element, the inline content will be treated as if specified within an alt tag, i.e. only used when the content specified by src cannot be retrieved.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="alt" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:complexContent>
                        <xs:restriction base="ActorType">
                            <xs:sequence>
                                <xs:element name="inline" minOccurs="0">
                                    <xs:annotation>
                                        <xs:documentation>You can specify content inline by wrapping it with this tag and putting it as a first child of the actor element. Note that if a src attribute is present on the parent element, the inline content will be treated as if specified within an alt tag, i.e. only used when the content specified by src cannot be retrieved.</xs:documentation>
                                    </xs:annotation>
                                </xs:element>
                            </xs:sequence>
                            <xs:attribute name="id" use="prohibited">
                                <xs:annotation>
                                    <xs:documentation>Unique id of this element.</xs:documentation>
                                </xs:annotation>
                            </xs:attribute>
                        </xs:restriction>
                    </xs:complexContent>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="type" type="xs:string" use="required">
            <xs:annotation>
                <xs:documentation>The MIME-type of the content.</xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="src" type="xs:anyURI" use="optional">
            <xs:annotation>
                <xs:documentation>The URI to load the content from.</xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="id" type="xs:ID" use="required">
            <xs:annotation>
                <xs:documentation>Unique id of this element.</xs:documentation>
            </xs:annotation>
        </xs:attribute>
    </xs:complexType>
    <xs:complexType name="ActionType">
        <xs:annotation>
            <xs:documentation>Base type for set, animate, connect and control elements.</xs:documentation>
        </xs:annotation>
        <xs:attribute name="input" type="xs:string" use="required">
            <xs:annotation>
                <xs:documentation>Which input field of the actor to set.</xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="actor" type="xs:IDREF" use="required">
            <xs:annotation>
                <xs:documentation>The target actor.</xs:documentation>
            </xs:annotation>
        </xs:attribute>
    </xs:complexType>
    <xs:complexType name="LabelType">
        <xs:annotation>
            <xs:documentation>Base type for entry, exit, do elements.</xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:sequence maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation>For every actor, you can specify a sequence of set, animate and connect statements here.</xs:documentation>
                </xs:annotation>
                <xs:element name="set" minOccurs="0" maxOccurs="unbounded">
                    <xs:annotation>
                        <xs:documentation>Sets the given input of a component instance to the given value.</xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                        <xs:complexContent>
                            <xs:extension base="ActionType">
                                <xs:attribute name="to" type="xs:string" use="required">
                                    <xs:annotation>
                                        <xs:documentation>New value for the input.</xs:documentation>
                                    </xs:annotation>
                                </xs:attribute>
                                <xs:attribute name="time" type="xs:duration" use="optional" default="PT0.0S">
                                    <xs:annotation>
                                        <xs:documentation>Time after enter/exit the change should happen.</xs:documentation>
                                    </xs:annotation>
                                </xs:attribute>
                            </xs:extension>
                        </xs:complexContent>
                    </xs:complexType>
                </xs:element>
                <xs:element name="animate" minOccurs="0" maxOccurs="unbounded">
                    <xs:annotation>
                        <xs:documentation>Animates the given input. For further information, see the SMIL animation spec.</xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                        <xs:complexContent>
                            <xs:extension base="ActionType">
                                <xs:attribute name="begin" type="xs:duration" use="optional">
                                    <xs:annotation>
                                        <xs:documentation>The start time of the animation, measured from the enter/exit time of the state.</xs:documentation>
                                    </xs:annotation>
                                </xs:attribute>
                                <xs:attribute name="duration" type="xs:duration" use="required">
                                    <xs:annotation>
                                        <xs:documentation>The duration of the animation.</xs:documentation>
                                    </xs:annotation>
                                </xs:attribute>
                                <xs:attribute name="to" type="xs:string" use="optional">
                                    <xs:annotation>
                                        <xs:documentation>Target value of the input.</xs:documentation>
                                    </xs:annotation>
                                </xs:attribute>
                                <xs:attribute name="by" type="xs:string" use="optional">
                                    <xs:annotation>
                                        <xs:documentation>Relative target value of the input. NOT IMPLEMENTED</xs:documentation>
                                    </xs:annotation>
                                </xs:attribute>
                                <xs:attribute name="calcMode" type="xs:token" use="optional" default="linear">
                                    <xs:annotation>
                                        <xs:documentation>CalcMode like defined in the SMIL animation spec. NOT IMPLEMENTED, always linear at the moment.</xs:documentation>
                                    </xs:annotation>
                                </xs:attribute>
                            </xs:extension>
                        </xs:complexContent>
                    </xs:complexType>
                </xs:element>
                <xs:element name="connect" minOccurs="0" maxOccurs="unbounded">
                    <xs:annotation>
                        <xs:documentation>Connects an input of an actor to an output of another actor (master). The connection remains for the duration of the container state.</xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                        <xs:complexContent>
                            <xs:extension base="ActionType">
                                <xs:attribute name="master" type="xs:IDREF" use="required">
                                    <xs:annotation>
                                        <xs:documentation>Master actor to connect the field from.</xs:documentation>
                                    </xs:annotation>
                                </xs:attribute>
                                <xs:attribute name="output" type="xs:string" use="required">
                                    <xs:annotation>
                                        <xs:documentation>Which output of the master actor to use.</xs:documentation>
                                    </xs:annotation>
                                </xs:attribute>
                            </xs:extension>
                        </xs:complexContent>
                    </xs:complexType>
                </xs:element>
                <xs:element name="control" minOccurs="0" maxOccurs="unbounded">
                    <xs:annotation>
                        <xs:documentation>Allows the user to control an input of an actor. If the id of a station is given, this station is used to control the input (via its position and orientation outputs), otherwise PUC is used to control the input.</xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                        <xs:complexContent>
                            <xs:extension base="ActionType">
                                <xs:attribute name="min" type="xs:anySimpleType" use="optional">
                                    <xs:annotation>
                                        <xs:documentation>Lower limit of the value range that can be set.</xs:documentation>
                                    </xs:annotation>
                                </xs:attribute>
                                <xs:attribute name="max" type="xs:anySimpleType" use="optional">
                                    <xs:annotation>
                                        <xs:documentation>Upper limit of the value range that can be set.</xs:documentation>
                                    </xs:annotation>
                                </xs:attribute>
                                <xs:attribute name="label" type="xs:string" use="optional">
                                    <xs:annotation>
                                        <xs:documentation>A label shown to the user together with the control for changing the input.</xs:documentation>
                                    </xs:annotation>
                                </xs:attribute>
                                <xs:attribute name="station" type="xs:string" use="optional">
                                    <xs:annotation>
                                        <xs:documentation>ID of a station (defined in the setup element) to be used to contol the property. Station inputs can only be used to control inputs with types SFVec3f or SFRotation.</xs:documentation>
                                    </xs:annotation>
                                </xs:attribute>
                            </xs:extension>
                        </xs:complexContent>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="TrackableType">
        <xs:annotation>
            <xs:documentation>Base type for trackable objects. Allows specification of an OT source either by reference or by inline OT code.</xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:any namespace="http://studierstube.icg.tu-graz.ac.at/opentracker" minOccurs="0"/>
        </xs:sequence>
        <xs:attribute name="id" type="xs:ID" use="optional">
            <xs:annotation>
                <xs:documentation>ID to identify this element.</xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="otsource" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation>DEF name of an OpenTracker node in the included OpenTracker file (or an earlier configured inline OT node)</xs:documentation>
            </xs:annotation>
        </xs:attribute>
    </xs:complexType>
    <xs:complexType name="VisibleActorType">
        <xs:annotation>
            <xs:documentation>Base type for visible actors. DEPRECATED.</xs:documentation>
        </xs:annotation>
        <xs:complexContent>
            <xs:extension base="ActorType">
                <xs:attribute name="position" type="Vec3f" use="optional" default="0 0 0">
                    <xs:annotation>
                        <xs:documentation>Position of the object in world coordinates.</xs:documentation>
                    </xs:annotation>
                </xs:attribute>
                <xs:attribute name="orientation" type="Vec4f" use="optional" default="0 0 1 0">
                    <xs:annotation>
                        <xs:documentation>Orientation of the object in the world.</xs:documentation>
                    </xs:annotation>
                </xs:attribute>
                <xs:attribute name="scale" type="Vec3f" use="optional" default="1 1 1">
                    <xs:annotation>
                        <xs:documentation>Scale factor for this object.</xs:documentation>
                    </xs:annotation>
                </xs:attribute>
                <xs:attribute name="transparency" type="xs:float" use="optional" default="0.0">
                    <xs:annotation>
                        <xs:documentation>Transparency value for this object. DEPRECTED, use components for all your actors. Transparency for real-world objects doesn't make much sense...</xs:documentation>
                    </xs:annotation>
                </xs:attribute>
                <xs:attribute name="visible" type="xs:boolean" use="optional" default="true">
                    <xs:annotation>
                        <xs:documentation>DEPRECATED</xs:documentation>
                    </xs:annotation>
                </xs:attribute>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="Scene">
        <xs:annotation>
            <xs:documentation>Base type for scenes.</xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="annotation" minOccurs="0" maxOccurs="unbounded"/>
            <xs:choice>
                <xs:sequence>
                    <xs:element ref="scene" minOccurs="0" maxOccurs="unbounded"/>
                    <xs:element ref="transition" minOccurs="0" maxOccurs="unbounded"/>
                </xs:sequence>
                <xs:sequence>
                    <xs:element ref="concurrentScene" maxOccurs="unbounded"/>
                </xs:sequence>
            </xs:choice>
        </xs:sequence>
        <xs:attribute name="name" type="xs:ID" use="required">
            <xs:annotation>
                <xs:documentation>Name of the state.</xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="initial" type="xs:boolean" use="optional" default="false">
            <xs:annotation>
                <xs:documentation>Marker attribute for initial states.</xs:documentation>
            </xs:annotation>
        </xs:attribute>
    </xs:complexType>
    <!-- -->
    <xs:simpleType name="FloatList">
        <xs:annotation>
            <xs:documentation>list of double values, base type for restricted data types like vectors, rotations, etc.</xs:documentation>
        </xs:annotation>
        <xs:list itemType="xs:double"/>
    </xs:simpleType>
    <xs:simpleType name="IntegerList">
        <xs:annotation>
            <xs:documentation>list of integer values, useful for list of indices.</xs:documentation>
        </xs:annotation>
        <xs:list itemType="xs:integer"/>
    </xs:simpleType>
    <xs:simpleType name="Vec2f">
        <xs:annotation>
            <xs:documentation>a simple type storing two float values, separated by spaces.</xs:documentation>
        </xs:annotation>
        <xs:restriction base="FloatList">
            <xs:length value="2"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="Vec3f">
        <xs:annotation>
            <xs:documentation>a simple type storing three float values separated by spaces.</xs:documentation>
        </xs:annotation>
        <xs:restriction base="FloatList">
            <xs:length value="3" fixed="false"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="Vec4f">
        <xs:annotation>
            <xs:documentation>a simple type storing four float values separated by spaces.</xs:documentation>
        </xs:annotation>
        <xs:restriction base="FloatList">
            <xs:length value="4" fixed="false"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="Vec2i">
        <xs:annotation>
            <xs:documentation>a simple type storing two integer values separated by spaces.</xs:documentation>
        </xs:annotation>
        <xs:restriction base="IntegerList">
            <xs:length value="2" fixed="false"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="ScreenSizeType">
        <xs:annotation>
            <xs:documentation>either two numbers, indicating absolute pixels, or two percentage values, or the keyword "fullscreen".</xs:documentation>
        </xs:annotation>
        <xs:union memberTypes="Vec2i">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="fullscreen"/>
                </xs:restriction>
            </xs:simpleType>
            <xs:simpleType>
                <xs:restriction base="xs:string"/>
            </xs:simpleType>
        </xs:union>
    </xs:simpleType>
</xs:schema>
