1<?xml version="1.0" encoding="UTF-8"?>
2<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
3    <xs:complexType name="ParameterType" abstract="true">
4        <xs:simpleContent>
5            <xs:extension base="xs:string">
6                <xs:attribute name="Name" type="xs:NMTOKEN" use="required"/>
7                <xs:attribute name="ValueSpace" use="optional">
8                    <xs:simpleType name="ValueSpaceEnum">
9                        <xs:restriction base="xs:string">
10                            <xs:enumeration value="Raw"/>
11                            <xs:enumeration value="Real"/>
12                        </xs:restriction>
13                    </xs:simpleType>
14                </xs:attribute>
15            </xs:extension>
16        </xs:simpleContent>
17    </xs:complexType>
18    <xs:complexType name="BooleanParameterType">
19        <xs:simpleContent>
20            <xs:restriction base="ParameterType">
21                <xs:pattern value="([01][\s]*)+"/>
22                <xs:pattern value="((0x0|0x1)[\s]*)+"/>
23                <xs:attribute name="ValueSpace" use="prohibited"/>
24            </xs:restriction>
25        </xs:simpleContent>
26    </xs:complexType>
27    <xs:complexType name="IntegerParameterType">
28        <xs:simpleContent>
29            <xs:restriction base="ParameterType">
30                <xs:pattern value="(0|([+-]?[1-9][0-9]*))(\s+(0|([+-]?[1-9][0-9]*)))*"/>
31                <xs:pattern value="(0x[0-9a-fA-F]+)(\s+(0x[0-9a-fA-F]+))*"/>
32                <xs:attribute name="ValueSpace" use="prohibited"/>
33            </xs:restriction>
34        </xs:simpleContent>
35    </xs:complexType>
36    <xs:complexType name="EnumParameterType">
37        <xs:simpleContent>
38            <xs:restriction base="ParameterType">
39                <xs:attribute name="ValueSpace" use="prohibited"/>
40            </xs:restriction>
41        </xs:simpleContent>
42    </xs:complexType>
43    <xs:complexType name="PointParameterType">
44        <xs:simpleContent>
45            <xs:restriction base="ParameterType">
46                <xs:pattern value="((0|[+-]?0\.[0-9]+|(([+-]?[1-9][0-9]*)(\.[0-9]+)?))([Ee][+-]?[0-9]+)?)(\s+(0|[+-]?0\.[0-9]+|(([+-]?[1-9][0-9]*)(\.[0-9]+)?))([Ee][+-]?[0-9]+)?)*"/>
47                <xs:pattern value="(0x[0-9a-fA-F]+)(\s+(0x[0-9a-fA-F]+))*"/>
48            </xs:restriction>
49        </xs:simpleContent>
50    </xs:complexType>
51    <xs:complexType name="BitParameterBlockType">
52        <xs:sequence>
53            <xs:element name="BitParameter" maxOccurs="unbounded" type="IntegerParameterType"/>
54        </xs:sequence>
55        <xs:attribute name="Name" type="xs:NMTOKEN" use="required"/>
56    </xs:complexType>
57    <xs:complexType name="StringParameterType">
58        <xs:simpleContent>
59            <xs:extension base="xs:string">
60                <xs:attribute name="Name" type="xs:NMTOKEN" use="required"/>
61            </xs:extension>
62        </xs:simpleContent>
63    </xs:complexType>
64    <xs:group name="ParameterBlockGroup">
65        <xs:choice>
66            <xs:element name="BooleanParameter" type="BooleanParameterType"/>
67            <xs:element name="IntegerParameter" type="IntegerParameterType"/>
68            <xs:element name="EnumParameter" type="EnumParameterType"/>
69            <xs:element name="FixedPointParameter" type="PointParameterType"/>
70            <xs:element name="FloatingPointParameter" type="PointParameterType"/>
71            <xs:element name="BitParameterBlock" type="BitParameterBlockType">
72                <xs:unique name="BitParameterBlockSubElementsUniqueness">
73                    <xs:selector xpath="*"/>
74                    <xs:field xpath="@Name"/>
75                </xs:unique>
76            </xs:element>
77            <xs:element name="StringParameter" type="StringParameterType"/>
78            <xs:element name="Component" type="ParameterBlockType"/>
79            <xs:element name="ParameterBlock" type="ParameterBlockType">
80                <xs:unique name="ParameterBlockSubElementsUniqueness">
81                    <xs:selector xpath="*"/>
82                    <xs:field xpath="@Name"/>
83                </xs:unique>
84            </xs:element>
85        </xs:choice>
86    </xs:group>
87    <xs:complexType name="ParameterBlockType">
88        <xs:sequence>
89            <xs:group ref="ParameterBlockGroup" maxOccurs="unbounded"/>
90        </xs:sequence>
91        <xs:attribute name="Name" type="xs:NMTOKEN" use="required"/>
92    </xs:complexType>
93</xs:schema>
94