1<?xml version="1.0" encoding="UTF-8"?>
2<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
3    <xs:include schemaLocation="ParameterSettings.xsd"/>
4    <xs:complexType name="SelectionCriterionRuleType">
5        <xs:attribute name="SelectionCriterion" type="xs:NMTOKEN" use="required"/>
6        <xs:attribute name="MatchesWhen" use="required">
7            <xs:simpleType name="MatchesWhenEnum">
8                <xs:restriction base="xs:NMTOKEN">
9                    <xs:enumeration value="Is"/>
10                    <xs:enumeration value="IsNot"/>
11                    <xs:enumeration value="Includes"/>
12                    <xs:enumeration value="Excludes"/>
13                </xs:restriction>
14            </xs:simpleType>
15        </xs:attribute>
16        <xs:attribute name="Value" use="required" type="xs:NMTOKEN"/>
17    </xs:complexType>
18    <xs:group name="RuleGroup">
19        <xs:choice>
20            <xs:element name="CompoundRule" type="CompoundRuleType"/>
21            <xs:element name="SelectionCriterionRule" type="SelectionCriterionRuleType"/>
22        </xs:choice>
23    </xs:group>
24    <xs:complexType name="CompoundRuleType">
25        <xs:sequence>
26            <xs:group ref="RuleGroup" minOccurs="0" maxOccurs="unbounded"/>
27        </xs:sequence>
28        <xs:attribute name="Type">
29            <xs:simpleType name="TypeEnum">
30                <xs:restriction base="xs:NMTOKEN">
31                    <xs:enumeration value="Any"/>
32                    <xs:enumeration value="All"/>
33                </xs:restriction>
34            </xs:simpleType>
35        </xs:attribute>
36    </xs:complexType>
37    <xs:complexType name="ConfigurationsType">
38        <xs:sequence>
39            <xs:element maxOccurs="unbounded" name="Configuration">
40                <xs:complexType>
41                    <xs:sequence>
42                        <xs:element name="CompoundRule" type="CompoundRuleType" minOccurs="0" maxOccurs="1"/>
43                    </xs:sequence>
44                    <xs:attribute name="Name" use="required" type="xs:NCName"/>
45                </xs:complexType>
46            </xs:element>
47        </xs:sequence>
48    </xs:complexType>
49    <xs:group name="ComponentGroup">
50        <xs:sequence>
51            <xs:group ref="ParameterBlockGroup"/>
52        </xs:sequence>
53    </xs:group>
54    <xs:complexType name="ComponentType">
55        <xs:sequence>
56            <xs:choice>
57                <xs:group ref="ComponentGroup" maxOccurs="unbounded"/>
58                <xs:element name="Subsystem" type="ComponentType" maxOccurs="unbounded"/>
59            </xs:choice>
60        </xs:sequence>
61        <xs:attribute name="Name" use="required" type="xs:NCName"/>
62    </xs:complexType>
63    <xs:complexType name="ConfigurableElementsType">
64        <xs:sequence>
65            <xs:element maxOccurs="unbounded" minOccurs="0" name="ConfigurableElement">
66                <xs:complexType>
67                    <xs:attribute name="Path" use="required">
68                        <xs:simpleType>
69                            <xs:restriction base="xs:anyURI">
70                                <xs:pattern value="/.*[^/]"/>
71                            </xs:restriction>
72                        </xs:simpleType>
73                    </xs:attribute>
74                </xs:complexType>
75            </xs:element>
76        </xs:sequence>
77    </xs:complexType>
78    <xs:complexType name="ConfigurableElementSettingsType">
79        <xs:choice>
80            <xs:element name="BitParameter" type="IntegerParameterType"/>
81            <xs:group ref="ComponentGroup"/>
82        </xs:choice>
83        <xs:attribute name="Path" use="required">
84            <xs:simpleType>
85                <xs:restriction base="xs:anyURI">
86                    <xs:pattern value="/.*[^/]"/>
87                </xs:restriction>
88            </xs:simpleType>
89        </xs:attribute>
90    </xs:complexType>
91    <xs:complexType name="SettingsType">
92        <xs:sequence>
93            <xs:element maxOccurs="unbounded" minOccurs="0" name="Configuration">
94                <xs:complexType>
95                    <xs:sequence>
96                        <xs:element name="ConfigurableElement" minOccurs="0" maxOccurs="unbounded" type="ConfigurableElementSettingsType"/>
97                    </xs:sequence>
98                    <xs:attribute name="Name" use="required" type="xs:NCName"/>
99                </xs:complexType>
100                <xs:unique name="ConfigurableElementUniqueness">
101                    <xs:selector xpath="ConfigurableElement"/>
102                    <xs:field xpath="@Path"/>
103                </xs:unique>
104            </xs:element>
105        </xs:sequence>
106    </xs:complexType>
107    <xs:complexType name="ConfigurableDomainType">
108        <xs:sequence>
109            <xs:element name="Configurations" type="ConfigurationsType"/>
110            <xs:element name="ConfigurableElements" type="ConfigurableElementsType"/>
111            <xs:element name="Settings" type="SettingsType" minOccurs="0"/>
112        </xs:sequence>
113        <xs:attribute name="Name" use="required" type="xs:NCName"/>
114        <xs:attribute name="SequenceAware" use="optional" type="xs:boolean" default="false"/>
115    </xs:complexType>
116    <xs:element name="ConfigurableDomain" type="ConfigurableDomainType"/>
117</xs:schema>
118