<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:element name="systems">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="system" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="system">
        <xs:complexType>
            <xs:all>
                <xs:element ref="id"/>
                <xs:element ref="priority"/>
                <xs:element ref="components"/>
                <xs:element ref="connections"/>
                <xs:element ref="title" minOccurs="0"/>
            </xs:all>
        </xs:complexType>
    </xs:element>
    <xs:element name="id" type="xs:string"/>
    <xs:element name="priority" type="xs:short"/>
    <xs:element name="components">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="component" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="component">
        <xs:complexType>
            <xs:all>
                <xs:element ref="id"/>
                <xs:element ref="schedule"/>
                <xs:element ref="library"/>
                <xs:element ref="parameters"/>
                <xs:element ref="position" minOccurs="0"/>
                <xs:element ref="title" minOccurs="0"/>
            </xs:all>
            <xs:attribute name="doc" use="optional" type="xs:NCName"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="schedule">
        <xs:complexType>
            <xs:all>
                <xs:element ref="priority"/>
                <xs:element ref="offset"/>
                <xs:element ref="cycle"/>
                <xs:element ref="response"/>
            </xs:all>
        </xs:complexType>
    </xs:element>
    <xs:element name="offset" type="xs:short"/>
    <xs:element name="cycle" type="xs:short"/>
    <xs:element name="response" type="xs:short"/>
    <xs:element name="library" type="xs:NCName"/>
    <xs:element name="parameters">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="parameter" maxOccurs="unbounded" minOccurs="0"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="parameter">
        <xs:complexType>
            <xs:all>
                <xs:element ref="id"/>
                <xs:element ref="type"/>
                <xs:element ref="unit"/>
                <xs:element ref="value"/>
            </xs:all>
        </xs:complexType>
    </xs:element>
    <xs:element name="type" type="xs:string"/>
    <xs:element name="unit" type="xs:string"/>
    <xs:element name="value" type="xs:string"/>
    <xs:element name="position">
        <xs:complexType>
            <xs:all>
                <xs:element ref="x"/>
                <xs:element ref="y"/>
            </xs:all>
        </xs:complexType>
    </xs:element>
    <xs:element name="x" type="xs:double"/>
    <xs:element name="y" type="xs:double"/>
    <xs:element name="connections">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="connection" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="connection">
        <xs:complexType>
            <xs:choice minOccurs="1" maxOccurs="unbounded">
                <xs:element ref="id" maxOccurs="1"/>
                <xs:element ref="source" maxOccurs="1"/>
                <xs:element ref="target"/>
            </xs:choice>
            <xs:attribute name="doc" use="optional" type="xs:NCName"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="source">
        <xs:complexType>
            <xs:all>
                <xs:element name="component" type="xs:string"/> 
                <xs:element ref="output"/>
            </xs:all>
        </xs:complexType>
    </xs:element>
    <xs:element name="output" type="xs:short"/>
    <xs:element name="target">
        <xs:complexType>
            <xs:all>
                <xs:element name="component" type="xs:string"/>
                <xs:element ref="input"/>
            </xs:all>
        </xs:complexType>
    </xs:element>
    <xs:element name="input" type="xs:short"/>
    <xs:element name="title" type="xs:string"/>
</xs:schema>
