<?xml version="1.0" encoding="UTF-8"?>
<!-- Written by hand using Emacs by Anders Nilsson <anders.nilsson@cs.lth.se> -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="3.0.1">
  <xs:annotation>
    <xs:appinfo>
      XML Schema for the form markup language developed by Pierre
      Nugues (pierre.nugues@cs.lth.se) for use in the SMErobot EU FP6
      project.
    </xs:appinfo>
  </xs:annotation>

  <xs:element name="configuration-sheet" type="ConfigSheetType"/>      
  <xs:element name="specifications" type="SpecificationsType"/>
  <xs:element name="spec" type="SpecType"/>
  <xs:element name="one-of" type="OneOfType"/>
  <xs:element name="option" type="OptionType" />
  <xs:element name="command" type="CommandType" />
  <xs:element name="param" type="ParamType" />
  <xs:element name="img" type="ImgType" />
  <xs:element name="snd" type="SndType" />
  <xs:element name="tasks" type="TasksType" />
  <xs:element name="task" type="TaskType" />
  <xs:element name="args" type="ArgsType" />
<!--   <xs:element name="meta-arg" type="MetaArgsType" />   -->
  <xs:element name="task-sequence" type="TaskSequenceType" />

  <xs:complexType name="ConfigSheetType">
    <xs:sequence>
      <xs:element ref="specifications" />
      <xs:element ref="tasks" />
      <xs:element ref="task-sequence" />
    </xs:sequence>
    <xs:attribute name="name" type="xs:string" />
    <xs:attribute name="id" type="xs:string" />
  </xs:complexType>

  <xs:complexType name="SpecificationsType">
    <xs:sequence>
      <xs:element ref="spec" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>      
  </xs:complexType>

  <xs:complexType name="SpecType">
    <xs:sequence> 
      <xs:element ref="one-of" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>    
    <xs:attribute name="name" type="xs:string" />
    <xs:attribute name="id" type="xs:string" />
  </xs:complexType>

  <xs:complexType name="OneOfType">
    <xs:sequence>
      <xs:element ref="option" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>      
  </xs:complexType>

  <xs:complexType name="OptionType">
    <xs:sequence>
      <xs:element name="meta-arg" minOccurs="0">
        <xs:complexType>
          <xs:simpleContent>
            <xs:extension base="xs:string">
              <xs:attribute name="name" type="xs:string" />         
            </xs:extension>
          </xs:simpleContent>
        </xs:complexType>
      </xs:element>
      <xs:element ref="command"  minOccurs="1"/>
      <xs:element ref="param"  minOccurs="0" maxOccurs="unbounded"/>
      <xs:element ref="img"  minOccurs="0"/>
      <xs:element ref="snd"  minOccurs="0"/>
    </xs:sequence>      
  </xs:complexType>

  <xs:complexType name="CommandType">
    <xs:attribute name="code" type="xs:string" />
  </xs:complexType>

  <xs:complexType name="ParamType">
    <xs:attribute name="name" type="xs:string" />
    <xs:attribute name="text" type="xs:string" />
    <xs:attribute name="value" type="xs:string" />
    <xs:attribute name="unit" type="xs:string" />
  </xs:complexType>

  <xs:complexType name="ImgType">
    <xs:attribute name="src" type="xs:string" />
  </xs:complexType>

  <xs:complexType name="SndType">
    <xs:attribute name="src" type="xs:string" />
  </xs:complexType>

  <xs:complexType name="TasksType">
    <xs:sequence>
      <xs:element ref="task" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>      
  </xs:complexType>

  <xs:complexType name="TaskType">
    <xs:sequence>
      <xs:element ref="args" minOccurs="0"/>
      <xs:element ref="one-of" minOccurs="0"/>
    </xs:sequence>      
    <xs:attribute name="name" type="xs:string" />
    <xs:attribute name="id" type="xs:string" />
  </xs:complexType>

  <xs:complexType name="ArgsType">
    <xs:sequence>
      <xs:element name="arg0" type="xs:string"/>
      <xs:element name="arg1" type="xs:string"/>
    </xs:sequence>      
  </xs:complexType>

<!--   <xs:complexType name="MetaArgsType"> -->
<!--     <xs:simpleContent> -->
<!--       <xs:extension base="xs:string"> -->
<!--       </xs:extension> -->
<!--     </xs:simpleContent> -->
<!--     <xs:attribute name="name" type="xs:string" /> -->
<!--   </xs:complexType> -->

  <xs:complexType name="TaskSequenceType">
    <xs:sequence>
      <xs:element name="task" type="TaskType" maxOccurs="unbounded"/>
    </xs:sequence>      
  </xs:complexType>

  

</xs:schema>