Files
edgetx-gx12/companion/src/radio.xsd
T

692 lines
30 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:annotation>
<xs:documentation xml:lang="en">
Radio data schema for companion9x.
</xs:documentation>
</xs:annotation>
<xs:simpleType name="CalibrationValue">
<xs:restriction base="xs:int">
<xs:minInclusive value="-125"/>
<xs:maxInclusive value="125"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="Calibration">
<xs:attribute name="middle" type="CalibrationValue" use="required"/>
<xs:attribute name="negative" type="CalibrationValue" use="required"/>
<xs:attribute name="positive" type="CalibrationValue" use="required"/>
</xs:complexType>
<xs:complexType name="PPMCalibration">
<xs:attribute name="middle" type="CalibrationValue" use="required"/>
</xs:complexType>
<xs:simpleType name="Switch">
<xs:restriction base="xs:string">
<!-- TODO accepter minuscules/majuscules -->
<xs:enumeration value="OFF"/>
<xs:enumeration value="!SWC"/>
<xs:enumeration value="!SWB"/>
<xs:enumeration value="!SWA"/>
<xs:enumeration value="!SW9"/>
<xs:enumeration value="!SW8"/>
<xs:enumeration value="!SW7"/>
<xs:enumeration value="!SW6"/>
<xs:enumeration value="!SW5"/>
<xs:enumeration value="!SW4"/>
<xs:enumeration value="!SW3"/>
<xs:enumeration value="!SW2"/>
<xs:enumeration value="!SW1"/>
<xs:enumeration value="!TRN"/>
<xs:enumeration value="!GEA"/>
<xs:enumeration value="!AIL"/>
<xs:enumeration value="!ID2"/>
<xs:enumeration value="!ID1"/>
<xs:enumeration value="!ID0"/>
<xs:enumeration value="!ELE"/>
<xs:enumeration value="!RUD"/>
<xs:enumeration value="!THR"/>
<!-- 0 -->
<xs:enumeration value="THR"/>
<xs:enumeration value="RUD"/>
<xs:enumeration value="ELE"/>
<xs:enumeration value="ID0"/>
<xs:enumeration value="ID1"/>
<xs:enumeration value="ID2"/>
<xs:enumeration value="AIL"/>
<xs:enumeration value="GEA"/>
<xs:enumeration value="TRN"/>
<xs:enumeration value="SW1"/>
<xs:enumeration value="SW2"/>
<xs:enumeration value="SW3"/>
<xs:enumeration value="SW4"/>
<xs:enumeration value="SW5"/>
<xs:enumeration value="SW6"/>
<xs:enumeration value="SW7"/>
<xs:enumeration value="SW8"/>
<xs:enumeration value="SW9"/>
<xs:enumeration value="SWA"/>
<xs:enumeration value="SWB"/>
<xs:enumeration value="SWC"/>
<xs:enumeration value="ON"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="TimerSwitch">
<xs:restriction base="xs:string">
<xs:enumeration value="!mSWC"/>
<xs:enumeration value="!mSWB"/>
<xs:enumeration value="!mSWA"/>
<xs:enumeration value="!mSW9"/>
<xs:enumeration value="!mSW8"/>
<xs:enumeration value="!mSW7"/>
<xs:enumeration value="!mSW6"/>
<xs:enumeration value="!mSW5"/>
<xs:enumeration value="!mSW4"/>
<xs:enumeration value="!mSW3"/>
<xs:enumeration value="!mSW2"/>
<xs:enumeration value="!mSW1"/>
<xs:enumeration value="!mTRN"/>
<xs:enumeration value="!mGEA"/>
<xs:enumeration value="!mAIL"/>
<xs:enumeration value="!mID2"/>
<xs:enumeration value="!mID1"/>
<xs:enumeration value="!mID0"/>
<xs:enumeration value="!mELE"/>
<xs:enumeration value="!mRUD"/>
<xs:enumeration value="!mTHR"/>
<xs:enumeration value="!SWC"/>
<xs:enumeration value="!SWB"/>
<xs:enumeration value="!SWA"/>
<xs:enumeration value="!SW9"/>
<xs:enumeration value="!SW8"/>
<xs:enumeration value="!SW7"/>
<xs:enumeration value="!SW6"/>
<xs:enumeration value="!SW5"/>
<xs:enumeration value="!SW4"/>
<xs:enumeration value="!SW3"/>
<xs:enumeration value="!SW2"/>
<xs:enumeration value="!SW1"/>
<xs:enumeration value="!TRN"/>
<xs:enumeration value="!GEA"/>
<xs:enumeration value="!AIL"/>
<xs:enumeration value="!ID2"/>
<xs:enumeration value="!ID1"/>
<xs:enumeration value="!ID0"/>
<xs:enumeration value="!ELE"/>
<xs:enumeration value="!RUD"/>
<xs:enumeration value="!THR"/>
<xs:enumeration value="!P3%"/>
<xs:enumeration value="!P3"/>
<xs:enumeration value="!P2%"/>
<xs:enumeration value="!P2"/>
<xs:enumeration value="!P1%"/>
<xs:enumeration value="!P1"/>
<xs:enumeration value="!AL%"/>
<xs:enumeration value="!ALs"/>
<xs:enumeration value="!TH%"/>
<xs:enumeration value="!THs"/>
<xs:enumeration value="!EL%"/>
<xs:enumeration value="!ELs"/>
<xs:enumeration value="!RU%"/>
<xs:enumeration value="!RUs"/>
<xs:enumeration value="!ABS"/>
<!-- TODO on affiche 2x ABS -->
<xs:enumeration value="OFF"/>
<!-- TODO a retirer + decalage -->
<xs:enumeration value="ABS"/>
<xs:enumeration value="RUs"/>
<xs:enumeration value="RU%"/>
<xs:enumeration value="ELs"/>
<xs:enumeration value="EL%"/>
<xs:enumeration value="THs"/>
<xs:enumeration value="TH%"/>
<xs:enumeration value="ALs"/>
<xs:enumeration value="AL%"/>
<xs:enumeration value="P1"/>
<xs:enumeration value="P1%"/>
<xs:enumeration value="P2"/>
<xs:enumeration value="P2%"/>
<xs:enumeration value="P3"/>
<xs:enumeration value="P3%"/>
<xs:enumeration value="THR"/>
<xs:enumeration value="RUD"/>
<xs:enumeration value="ELE"/>
<xs:enumeration value="ID0"/>
<xs:enumeration value="ID1"/>
<xs:enumeration value="ID2"/>
<xs:enumeration value="AIL"/>
<xs:enumeration value="GEA"/>
<xs:enumeration value="TRN"/>
<xs:enumeration value="SW1"/>
<xs:enumeration value="SW2"/>
<xs:enumeration value="SW3"/>
<xs:enumeration value="SW4"/>
<xs:enumeration value="SW5"/>
<xs:enumeration value="SW6"/>
<xs:enumeration value="SW7"/>
<xs:enumeration value="SW8"/>
<xs:enumeration value="SW9"/>
<xs:enumeration value="SWA"/>
<xs:enumeration value="SWB"/>
<xs:enumeration value="SWC"/>
<xs:enumeration value="mTHR"/>
<xs:enumeration value="mRUD"/>
<xs:enumeration value="mELE"/>
<xs:enumeration value="mID0"/>
<xs:enumeration value="mID1"/>
<xs:enumeration value="mID2"/>
<xs:enumeration value="mAIL"/>
<xs:enumeration value="mGEA"/>
<xs:enumeration value="mTRN"/>
<xs:enumeration value="mSW1"/>
<xs:enumeration value="mSW2"/>
<xs:enumeration value="mSW3"/>
<xs:enumeration value="mSW4"/>
<xs:enumeration value="mSW5"/>
<xs:enumeration value="mSW6"/>
<xs:enumeration value="mSW7"/>
<xs:enumeration value="mSW8"/>
<xs:enumeration value="mSW9"/>
<xs:enumeration value="mSWA"/>
<xs:enumeration value="mSWB"/>
<xs:enumeration value="mSWC"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Source">
<xs:restriction base="xs:string">
<!-- TODO accepter minuscules/majuscules -->
<xs:enumeration value="RUD"/>
<xs:enumeration value="THR"/>
<xs:enumeration value="ELE"/>
<xs:enumeration value="AIL"/>
<xs:enumeration value="P1"/>
<xs:enumeration value="P2"/>
<xs:enumeration value="P3"/>
<xs:enumeration value="MAX"/>
<xs:enumeration value="FULL"/>
<xs:enumeration value="CYC1"/>
<xs:enumeration value="CYC2"/>
<xs:enumeration value="CYC3"/>
<xs:enumeration value="PPM1"/>
<xs:enumeration value="PPM2"/>
<xs:enumeration value="PPM3"/>
<xs:enumeration value="PPM4"/>
<xs:enumeration value="PPM5"/>
<xs:enumeration value="PPM6"/>
<xs:enumeration value="PPM7"/>
<xs:enumeration value="PPM8"/>
<xs:enumeration value="CH1"/>
<xs:enumeration value="CH2"/>
<xs:enumeration value="CH3"/>
<xs:enumeration value="CH4"/>
<xs:enumeration value="CH5"/>
<xs:enumeration value="CH6"/>
<xs:enumeration value="CH7"/>
<xs:enumeration value="CH8"/>
<xs:enumeration value="CH9"/>
<xs:enumeration value="CH10"/>
<xs:enumeration value="CH11"/>
<xs:enumeration value="CH12"/>
<xs:enumeration value="CH13"/>
<xs:enumeration value="CH14"/>
<xs:enumeration value="CH15"/>
<xs:enumeration value="CH16"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Output">
<xs:restriction base="xs:string">
<xs:enumeration value="CH1"/>
<xs:enumeration value="CH2"/>
<xs:enumeration value="CH3"/>
<xs:enumeration value="CH4"/>
<xs:enumeration value="CH5"/>
<xs:enumeration value="CH6"/>
<xs:enumeration value="CH7"/>
<xs:enumeration value="CH8"/>
<xs:enumeration value="CH9"/>
<xs:enumeration value="CH10"/>
<xs:enumeration value="CH11"/>
<xs:enumeration value="CH12"/>
<xs:enumeration value="CH13"/>
<xs:enumeration value="CH14"/>
<xs:enumeration value="CH15"/>
<xs:enumeration value="CH16"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Stick">
<xs:restriction base="xs:string">
<xs:enumeration value="rudder"/>
<xs:enumeration value="aileron"/>
<xs:enumeration value="elevator"/>
<xs:enumeration value="throttle"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Weight100">
<xs:restriction base="xs:int">
<xs:minInclusive value="-100"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Weight125">
<xs:restriction base="xs:int">
<xs:minInclusive value="-125"/>
<xs:maxInclusive value="125"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="TrimValue">
<xs:restriction base="xs:int">
<xs:minInclusive value="-1024"/>
<xs:maxInclusive value="+1024"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="TrimType">
<xs:attribute name="phaseRef" type="xs:int"/>
<!-- TODO either phaseRef or value -->
<xs:attribute name="value" type="TrimValue"/>
</xs:complexType>
<!-- TODO <xs:key name="phaseRef">
<xs:selector xpath="model/phases/phase"/>
<xs:field xpath="@id"/>
</xs:key> -->
<xs:element name="radio">
<xs:complexType>
<xs:sequence>
<xs:element name="global-settings" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="calibration" minOccurs="0">
<xs:complexType>
<xs:all>
<xs:element name="rudder" type="Calibration"/>
<xs:element name="throttle" type="Calibration"/>
<xs:element name="aileron" type="Calibration"/>
<xs:element name="elevator" type="Calibration"/>
<xs:element name="p1" type="Calibration"/>
<xs:element name="p2" type="Calibration"/>
<xs:element name="p3" type="Calibration"/>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="contrast" type="xs:unsignedByte" minOccurs="0"/>
<xs:element name="battery" minOccurs="0">
<xs:complexType>
<xs:attribute name="calibration" type="xs:unsignedByte" use="required"/>
<xs:attribute name="warning" type="xs:unsignedByte" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="light-switch" type="Switch" minOccurs="0"/>
<xs:element name="ppm-input-calibration" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="multiplier" type="xs:int"/>
<xs:element name="ch1" type="PPMCalibration"/>
<xs:element name="ch2" type="PPMCalibration"/>
<xs:element name="ch3" type="PPMCalibration"/>
<xs:element name="ch4" type="PPMCalibration"/>
<!-- <xs:element name="ch5" type="PPMCalibration"/>
<xs:element name="ch6" type="PPMCalibration"/>
<xs:element name="ch7" type="PPMCalibration"/>
<xs:element name="ch8" type="PPMCalibration"/> //-->
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="view" type="xs:unsignedByte" minOccurs="0"/>
<!-- switch -->
<xs:element name="beeper" type="xs:unsignedByte" minOccurs="0"/>
<!-- switch -->
<xs:element name="inactivity-timer" type="xs:byte" minOccurs="0"/>
<xs:element name="timer-beeps" minOccurs="0">
<xs:complexType>
<xs:attribute name="minute" type="xs:boolean"/>
<xs:attribute name="countdown" type="xs:boolean"/>
<xs:attribute name="screen-flash" type="xs:boolean"/>
</xs:complexType>
</xs:element>
<xs:element name="splash-screen" type="xs:boolean" minOccurs="0"/>
<xs:element name="filter-input" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="single"/>
<xs:enumeration value="oversample"/>
<xs:enumeration value="filter"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="light-auto-off-timer" type="xs:unsignedByte" minOccurs="0"/>
<xs:element name="default-channel-order" type="xs:unsignedByte" minOccurs="0"/>
<xs:element name="PPM_Multiplier" type="xs:byte" minOccurs="0"/>
<xs:element name="owner-name" type="xs:string" minOccurs="0"/>
<xs:element name="sticks" minOccurs="0">
<xs:complexType>
<xs:attribute name="mode" type="xs:unsignedByte" use="required"/>
<xs:attribute name="throttle-reverse" type="xs:boolean"/>
</xs:complexType>
</xs:element>
<xs:element name="warnings" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="warning" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="name" use="required" >
<xs:simpleType>
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="throttle"/>
<xs:enumeration value="switchs"/>
<xs:enumeration value="memory"/>
<xs:enumeration value="silent"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="value" type="xs:boolean" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="models" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="model" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:normalizedString"/>
<xs:element name="timer" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="mode" type="TimerSwitch" use="required"/>
<xs:attribute name="direction" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="down"/>
<xs:enumeration value="up"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="value" type="xs:time" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="modulation" minOccurs="0">
<xs:complexType>
<xs:attribute name="type">
<xs:simpleType>
<xs:restriction base="xs:string">
<!-- TODO accepter minuscules/majuscules -->
<xs:enumeration value="PPM"/>
<xs:enumeration value="PCM"/>
<xs:enumeration value="Silver A"/>
<xs:enumeration value="Silver B"/>
<xs:enumeration value="Silver C"/>
<xs:enumeration value="Trac 09"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="channels">
<xs:simpleType>
<xs:restriction base="xs:nonNegativeInteger">
<xs:maxExclusive value="17"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="delay" type="xs:nonNegativeInteger"/>
<xs:attribute name="polarity">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="positive"/>
<xs:enumeration value="negative"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="trims" minOccurs="0">
<xs:complexType>
<xs:attribute name="extended" type="xs:boolean"/>
<xs:attribute name="inc">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="exponential"/>
<xs:enumeration value="extra-fine"/>
<xs:enumeration value="fine"/>
<xs:enumeration value="medium"/>
<xs:enumeration value="coarse"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="throttleTrim" type="xs:boolean"/>
<xs:attribute name="throttleTrimExpo" type="xs:boolean"/>
</xs:complexType>
</xs:element>
<xs:element name="centerBeep" minOccurs="0">
<xs:complexType>
<xs:attribute name="rudder" type="xs:boolean"/>
<xs:attribute name="elevator" type="xs:boolean"/>
<xs:attribute name="throttle" type="xs:boolean"/>
<xs:attribute name="aileron" type="xs:boolean"/>
<xs:attribute name="p1" type="xs:boolean"/>
<xs:attribute name="p2" type="xs:boolean"/>
<xs:attribute name="p3" type="xs:boolean"/>
</xs:complexType>
</xs:element>
<xs:element name="heliSwashplate" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="invert">
<xs:complexType>
<xs:sequence>
<xs:element name="aileron" type="xs:boolean"/>
<xs:element name="collective" type="xs:boolean"/>
<xs:element name="elevator" type="xs:boolean"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="type">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="off"/>
<xs:enumeration value="120"/>
<xs:enumeration value="120Xfine"/>
<xs:enumeration value="140"/>
<xs:enumeration value="90"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="source" type="Source"/>
<xs:attribute name="value" type="xs:int"/>
</xs:complexType>
</xs:element>
<xs:element name="phases" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="phase" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="trims">
<xs:complexType>
<xs:sequence>
<xs:element name="rudder" type="TrimType"/>
<xs:element name="elevator" type="TrimType"/>
<xs:element name="throttle" type="TrimType"/>
<xs:element name="aileron" type="TrimType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:int" use="required"/>
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="switch" type="Switch"/>
<xs:attribute name="fadeIn" type="xs:int"/>
<xs:attribute name="fadeOut" type="xs:int"/>
</xs:complexType>
<xs:unique name="uniquePhaseId">
<xs:selector xpath="model/phases/phase"/>
<xs:field xpath="@id"/>
</xs:unique>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="outputs" minOccurs="0">
<!-- TODO pas de minOccurs -->
<xs:complexType>
<xs:sequence>
<xs:element name="curve" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="point">
<xs:complexType>
<xs:attribute name="x" type="Weight100"/>
<xs:attribute name="y" type="Weight100"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:string"/>
</xs:complexType>
<xs:unique name="uniqueCurveForEachModel">
<xs:selector xpath="model/outputs/curve"/>
<xs:field xpath="@id"/>
</xs:unique>
</xs:element>
<xs:element name="output" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="limit">
<xs:complexType>
<xs:attribute name="min" type="Weight100"/>
<xs:attribute name="max" type="Weight100"/>
</xs:complexType>
</xs:element>
<xs:element name="revert" type="xs:boolean"/>
<xs:element name="offset" type="Weight100"/>
<xs:element name="mixer" minOccurs="1" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="source" type="Source"/>
<xs:element name="weight" type="Weight125"/>
<xs:element name="offset" type="Weight125"/>
<xs:element name="switch" type="Switch"/>
<xs:element name="curve" type="xs:string"/>
<xs:element name="delay">
<xs:complexType>
<xs:attribute name="up" type="xs:int"/>
<xs:attribute name="down" type="xs:int"/>
</xs:complexType>
</xs:element>
<xs:element name="speed">
<xs:complexType>
<xs:attribute name="up" type="xs:int"/>
<xs:attribute name="down" type="xs:int"/>
</xs:complexType>
</xs:element>
<xs:element name="trim" type="xs:boolean"/>
<xs:element name="warning">
<xs:simpleType>
<xs:restriction base="xs:int">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="3"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
<xs:attribute name="method">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="add"/>
<xs:enumeration value="replace"/>
<xs:enumeration value="multiply"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<xs:key name="curveKeyRef">
<xs:selector xpath="model/outputs/curve"/>
<xs:field xpath="@id"/>
</xs:key>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="Output"/>
</xs:complexType>
<xs:unique name="uniqueOutputForEachModel">
<xs:selector xpath="model/outputs/output"/>
<xs:field xpath="@id"/>
</xs:unique>
</xs:element>
</xs:sequence>
<xs:attribute name="extendedLimits" type="xs:boolean"/>
</xs:complexType>
</xs:element>
<xs:element name="inputs" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="input">
<xs:complexType>
<xs:sequence>
<xs:element name="switch">
<xs:complexType>
<xs:sequence>
<xs:element name="expo">
<xs:complexType>
<xs:attribute name="left" type="Weight100"/>
<xs:attribute name="right" type="Weight100"/>
</xs:complexType>
</xs:element>
<xs:element name="max">
<xs:complexType>
<xs:attribute name="left" type="Weight100"/>
<xs:attribute name="right" type="Weight100"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="value" type="Switch"/>
</xs:complexType>
</xs:element>
<xs:element name="trim" type="TrimValue"/>
</xs:sequence>
<xs:attribute name="id" type="Stick"/>
</xs:complexType>
<xs:unique name="uniqueInputForEachModel">
<xs:selector xpath="model/inputs/input"/>
<xs:field xpath="@id"/>
</xs:unique>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>