1<?xml version="1.0" encoding="UTF-8"?>
2<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
3
4    <!-- BEGIN W3cXmlAttributes.xsd -->
5    <xs:annotation>
6        <xs:documentation>
7            See http://www.w3.org/XML/1998/namespace.html and
8            http://www.w3.org/TR/REC-xml for information about this namespace.
9
10            This schema document describes the XML namespace, in a form
11            suitable for import by other schema documents.
12
13            Note that local names in this namespace are intended to be defined
14            only by the World Wide Web Consortium or its subgroups.  The
15            following names are currently defined in this namespace and should
16            not be used with conflicting semantics by any Working Group,
17            specification, or document instance:
18
19            base (as an attribute name): denotes an attribute whose value
20            provides a URI to be used as the base for interpreting any
21            relative URIs in the scope of the element on which it
22            appears; its value is inherited.  This name is reserved
23            by virtue of its definition in the XML Base specification.
24
25            id   (as an attribute name): denotes an attribute whose value
26            should be interpreted as if declared to be of type ID.
27            The xml:id specification is not yet a W3C Recommendation,
28            but this attribute is included here to facilitate experimentation
29            with the mechanisms it proposes.  Note that it is _not_ included
30            in the specialAttrs attribute group.
31
32            lang (as an attribute name): denotes an attribute whose value
33            is a language code for the natural language of the content of
34            any element; its value is inherited.  This name is reserved
35            by virtue of its definition in the XML specification.
36
37            space (as an attribute name): denotes an attribute whose
38            value is a keyword indicating what whitespace processing
39            discipline is intended for the content of the element; its
40            value is inherited.  This name is reserved by virtue of its
41            definition in the XML specification.
42
43            Father (in any context at all): denotes Jon Bosak, the chair of
44            the original XML Working Group.  This name is reserved by
45            the following decision of the W3C XML Plenary and
46            XML Coordination groups:
47
48            In appreciation for his vision, leadership and dedication
49            the W3C XML Plenary on this 10th day of February, 2000
50            reserves for Jon Bosak in perpetuity the XML name
51            xml:Father
52        </xs:documentation>
53    </xs:annotation>
54
55    <xs:annotation>
56        <xs:documentation>This schema defines attributes and an attribute group
57            suitable for use by
58            schemas wishing to allow xml:base, xml:lang, xml:space or xml:id
59            attributes on elements they define.
60
61            To enable this, such a schema must import this schema
62            for the XML namespace, e.g. as follows:
63            &lt;schema . . .>
64            . . .
65            &lt;import namespace="http://www.w3.org/XML/1998/namespace"
66            schemaLocation="http://www.w3.org/2005/08/xml.xsd"/>
67
68            Subsequently, qualified reference to any of the attributes
69            or the group defined below will have the desired effect, e.g.
70
71            &lt;type . . .>
72            . . .
73            &lt;attributeGroup ref="xml:specialAttrs"/>
74
75            will define a type which will schema-validate an instance
76            element with any of those attributes</xs:documentation>
77    </xs:annotation>
78
79    <xs:annotation>
80        <xs:documentation>In keeping with the XML Schema WG's standard versioning
81            policy, this schema document will persist at
82            http://www.w3.org/2005/08/xml.xsd.
83            At the date of issue it can also be found at
84            http://www.w3.org/2001/xml.xsd.
85            The schema document at that URI may however change in the future,
86            in order to remain compatible with the latest version of XML Schema
87            itself, or with the XML namespace itself.  In other words, if the XML
88            Schema or XML namespaces change, the version of this document at
89            http://www.w3.org/2001/xml.xsd will change
90            accordingly; the version at
91            http://www.w3.org/2005/08/xml.xsd will not change.
92        </xs:documentation>
93    </xs:annotation>
94
95    <xs:attribute name="lang">
96        <xs:annotation>
97            <xs:documentation>Attempting to install the relevant ISO 2- and 3-letter
98                codes as the enumerated possible values is probably never
99                going to be a realistic possibility.  See
100                RFC 3066 at http://www.ietf.org/rfc/rfc3066.txt and the IANA registry
101                at http://www.iana.org/assignments/lang-tag-apps.htm for
102                further information.
103
104                The union allows for the 'un-declaration' of xml:lang with
105                the empty string.</xs:documentation>
106        </xs:annotation>
107        <xs:simpleType>
108            <xs:union memberTypes="xs:language">
109                <xs:simpleType name="langEnum">
110                    <xs:restriction base="xs:string">
111                        <xs:enumeration value=""/>
112                    </xs:restriction>
113                </xs:simpleType>
114            </xs:union>
115        </xs:simpleType>
116    </xs:attribute>
117
118    <xs:attribute name="space">
119        <xs:simpleType name="spaceEnum">
120            <xs:restriction base="xs:NCName">
121                <xs:enumeration value="default"/>
122                <xs:enumeration value="preserve"/>
123            </xs:restriction>
124        </xs:simpleType>
125    </xs:attribute>
126
127    <xs:attribute name="base" type="xs:anyURI">
128        <xs:annotation>
129            <xs:documentation>See http://www.w3.org/TR/xmlbase/ for
130                information about this attribute.</xs:documentation>
131        </xs:annotation>
132    </xs:attribute>
133
134    <xs:attribute name="id" type="xs:ID">
135        <xs:annotation>
136            <xs:documentation>See http://www.w3.org/TR/xml-id/ for
137                information about this attribute.</xs:documentation>
138        </xs:annotation>
139    </xs:attribute>
140
141    <xs:attributeGroup name="specialAttrs">
142        <xs:attribute ref="xml:base"/>
143        <xs:attribute ref="xml:lang"/>
144        <xs:attribute ref="xml:space"/>
145    </xs:attributeGroup>
146    <!-- END W3cXmlAttributes.xsd -->
147
148    <!-- BEGIN ParameterSettings.xsd -->
149    <!-- BUG b/147297854 - removed "abstract" from type definition -->
150    <xs:complexType name="BooleanParameterType">
151        <xs:simpleContent>
152            <xs:extension base="xs:string">
153                <xs:attribute name="Name" type="ParameterNameEnumType" use="required"/>
154            </xs:extension>
155            <!--xs:restriction base="xs:string">
156                <xs:pattern value="([01][\s]*)+"/>
157                <xs:pattern value="((0x0|0x1)[\s]*)+"/>
158                <xs:attribute name="Name" type="xs:string" use="required"/>
159            </xs:restriction-->
160        </xs:simpleContent>
161    </xs:complexType>
162    <xs:complexType name="IntegerParameterType">
163        <xs:simpleContent>
164            <xs:extension base="xs:string">
165                <xs:attribute name="Name" type="ParameterNameEnumType" use="required"/>
166            </xs:extension>
167            <!--xs:restriction base="xs:string">
168                <xs:pattern value="(0|([+-]?[1-9][0-9]*))(\s+(0|([+-]?[1-9][0-9]*)))*"/>
169                <xs:pattern value="(0x[0-9a-fA-F]+)(\s+(0x[0-9a-fA-F]+))*"/>
170                <xs:attribute name="Name" type="xs:string" use="required"/>
171            </xs:restriction-->
172        </xs:simpleContent>
173    </xs:complexType>
174    <xs:complexType name="EnumParameterType">
175        <xs:simpleContent>
176            <xs:extension base="xs:string">
177                <xs:attribute name="Name" type="ParameterNameEnumType" use="required"/>
178            </xs:extension>
179            <!--xs:extension base="xs:string">
180                <xs:attribute name="Name" type="xs:string" use="required"/>
181            </xs:extension-->
182        </xs:simpleContent>
183    </xs:complexType>
184    <xs:complexType name="PointParameterType">
185        <xs:simpleContent>
186            <xs:extension base="xs:string">
187                <xs:attribute name="Name" type="ParameterNameEnumType" use="required"/>
188            </xs:extension>
189            <!--xs:restriction base="xs:string">
190                <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]+)?)*"/>
191                <xs:pattern value="(0x[0-9a-fA-F]+)(\s+(0x[0-9a-fA-F]+))*"/>
192                <xs:attribute name="Name" type="xs:NMTOKEN" use="required"/>
193            </xs:restriction-->
194        </xs:simpleContent>
195    </xs:complexType>
196    <xs:complexType name="BitParameterBlockType">
197        <xs:sequence>
198            <xs:element name="BitParameter" maxOccurs="unbounded" type="IntegerParameterType"/>
199        </xs:sequence>
200        <xs:attribute name="Name" type="ParameterNameEnumType" use="required"/>
201    </xs:complexType>
202    <xs:complexType name="StringParameterType">
203        <xs:simpleContent>
204            <xs:extension base="xs:string">
205                <xs:attribute name="Name" type="ParameterNameEnumType" use="required"/>
206            </xs:extension>
207        </xs:simpleContent>
208    </xs:complexType>
209    <xs:group name="ParameterBlockGroup">
210        <xs:choice>
211            <xs:element name="BooleanParameter" type="BooleanParameterType"/>
212            <xs:element name="IntegerParameter" type="IntegerParameterType"/>
213            <xs:element name="EnumParameter" type="EnumParameterType"/>
214            <xs:element name="FixedPointParameter" type="PointParameterType"/>
215            <xs:element name="FloatingPointParameter" type="PointParameterType"/>
216            <xs:element name="BitParameterBlock" type="BitParameterBlockType">
217                <xs:unique name="BitParameterBlockSubElementsUniqueness">
218                    <xs:selector xpath="*"/>
219                    <xs:field xpath="@Name"/>
220                </xs:unique>
221            </xs:element>
222            <xs:element name="StringParameter" type="StringParameterType"/>
223            <!--xs:element name="Component" type="ParameterBlockType"/-->
224            <xs:element name="ParameterBlock" type="ParameterBlockType">
225                <xs:unique name="ParameterBlockSubElementsUniqueness">
226                    <xs:selector xpath="*"/>
227                    <xs:field xpath="@Name"/>
228                </xs:unique>
229            </xs:element>
230        </xs:choice>
231    </xs:group>
232    <xs:complexType name="ParameterBlockType">
233        <xs:sequence>
234            <xs:group ref="ParameterBlockGroup" maxOccurs="unbounded"/>
235        </xs:sequence>
236        <xs:attribute name="Name" type="xs:NMTOKEN" use="required"/>
237    </xs:complexType>
238    <!-- END ParameterSettings.xsd -->
239
240    <!-- BEGIN ConfigurableDomain.xsd -->
241    <xs:complexType name="SelectionCriterionRuleType">
242        <xs:attribute name="SelectionCriterion" type="xs:NMTOKEN" use="required"/>
243        <xs:attribute name="MatchesWhen" use="required">
244            <xs:simpleType name="MatchesWhenEnum">
245                <xs:restriction base="xs:NMTOKEN">
246                    <xs:enumeration value="Is"/>
247                    <xs:enumeration value="IsNot"/>
248                    <xs:enumeration value="Includes"/>
249                    <xs:enumeration value="Excludes"/>
250                </xs:restriction>
251            </xs:simpleType>
252        </xs:attribute>
253        <xs:attribute name="Value" use="required" type="xs:NMTOKEN"/>
254    </xs:complexType>
255    <xs:group name="RuleGroup">
256        <xs:choice>
257            <xs:element name="CompoundRule" type="CompoundRuleType"/>
258            <xs:element name="SelectionCriterionRule" type="SelectionCriterionRuleType"/>
259        </xs:choice>
260    </xs:group>
261    <xs:complexType name="CompoundRuleType">
262        <xs:sequence>
263            <xs:group ref="RuleGroup" minOccurs="0" maxOccurs="unbounded"/>
264        </xs:sequence>
265        <xs:attribute name="Type">
266            <xs:simpleType name="TypeEnum">
267                <xs:restriction base="xs:NMTOKEN">
268                    <xs:enumeration value="Any"/>
269                    <xs:enumeration value="All"/>
270                </xs:restriction>
271            </xs:simpleType>
272        </xs:attribute>
273    </xs:complexType>
274    <xs:complexType name="ConfigurationsType">
275        <xs:sequence>
276            <xs:element maxOccurs="unbounded" name="Configuration">
277                <xs:complexType>
278                    <xs:sequence>
279                        <xs:element name="CompoundRule" type="CompoundRuleType" minOccurs="0" maxOccurs="1"/>
280                    </xs:sequence>
281                    <xs:attribute name="Name" use="required" type="xs:NCName"/>
282                </xs:complexType>
283            </xs:element>
284        </xs:sequence>
285    </xs:complexType>
286    <xs:group name="ComponentGroup">
287        <xs:sequence>
288            <xs:group ref="ParameterBlockGroup"/>
289        </xs:sequence>
290    </xs:group>
291    <xs:complexType name="ComponentType">
292        <xs:sequence>
293            <xs:choice>
294                <xs:group ref="ComponentGroup" maxOccurs="unbounded"/>
295                <xs:element name="Subsystem" type="ComponentType" maxOccurs="unbounded"/>
296            </xs:choice>
297        </xs:sequence>
298        <xs:attribute name="Name" use="required" type="xs:NCName"/>
299    </xs:complexType>
300    <xs:complexType name="ConfigurableElementsType">
301        <xs:sequence>
302            <xs:element maxOccurs="unbounded" minOccurs="0" name="ConfigurableElement">
303                <xs:complexType>
304                    <xs:attribute name="Path" use="required">
305                        <xs:simpleType>
306                            <xs:restriction base="xs:anyURI">
307                                <xs:pattern value="/.*[^/]"/>
308                            </xs:restriction>
309                        </xs:simpleType>
310                    </xs:attribute>
311                </xs:complexType>
312            </xs:element>
313        </xs:sequence>
314    </xs:complexType>
315    <xs:complexType name="ConfigurableElementSettingsType">
316        <xs:choice>
317            <xs:element name="BooleanParameter" type="BooleanParameterType"/>
318            <xs:element name="IntegerParameter" type="IntegerParameterType"/>
319            <xs:element name="EnumParameter" type="EnumParameterType"/>
320            <xs:element name="FixedPointParameter" type="PointParameterType"/>
321            <xs:element name="FloatingPointParameter" type="PointParameterType"/>
322            <xs:element name="BitParameter" type="IntegerParameterType"/>
323            <xs:element name="BitParameterBlock" type="BitParameterBlockType">
324                <xs:unique name="BitParameterBlockSubElementsUniqueness">
325                    <xs:selector xpath="*"/>
326                    <xs:field xpath="@Name"/>
327                </xs:unique>
328            </xs:element>
329            <xs:element name="StringParameter" type="StringParameterType"/>
330            <!--xs:element name="Component" type="ParameterBlockType"/-->
331            <xs:element name="ParameterBlock" type="ParameterBlockType">
332                <xs:unique name="ParameterBlockSubElementsUniqueness">
333                    <xs:selector xpath="*"/>
334                    <xs:field xpath="@Name"/>
335                </xs:unique>
336            </xs:element>
337        </xs:choice>
338        <!--xs:choice>
339            <xs:element name="BitParameter" type="IntegerParameterType"/>
340            <xs:group ref="ComponentGroup"/>
341        </xs:choice-->
342        <xs:attribute name="Path" use="required">
343            <xs:simpleType>
344                <xs:restriction base="xs:anyURI">
345                    <xs:pattern value="/.*[^/]"/>
346                </xs:restriction>
347            </xs:simpleType>
348        </xs:attribute>
349    </xs:complexType>
350    <xs:complexType name="SettingsType">
351        <xs:sequence>
352            <xs:element maxOccurs="unbounded" minOccurs="0" name="Configuration">
353                <xs:complexType>
354                    <xs:sequence>
355                        <xs:element name="ConfigurableElement" minOccurs="0" maxOccurs="unbounded" type="ConfigurableElementSettingsType"/>
356                    </xs:sequence>
357                    <xs:attribute name="Name" use="required" type="xs:NCName"/>
358                </xs:complexType>
359                <xs:unique name="ConfigurableElementUniqueness">
360                    <xs:selector xpath="ConfigurableElement"/>
361                    <xs:field xpath="@Path"/>
362                </xs:unique>
363            </xs:element>
364        </xs:sequence>
365    </xs:complexType>
366    <xs:complexType name="ConfigurableDomainType">
367        <xs:sequence>
368            <xs:element name="Configurations" type="ConfigurationsType"/>
369            <xs:element name="ConfigurableElements" type="ConfigurableElementsType"/>
370            <xs:element name="Settings" type="SettingsType" minOccurs="0"/>
371        </xs:sequence>
372        <xs:attribute name="Name" use="required" type="xs:NCName"/>
373        <xs:attribute name="SequenceAware" use="optional" type="xs:boolean" default="false"/>
374    </xs:complexType>
375    <xs:element name="ConfigurableDomain" type="ConfigurableDomainType"/>
376    <!-- END ConfigurableDomain.xsd -->
377
378    <!-- BEGIN ConfigurableDomains.xsd -->
379    <xs:element name="ConfigurableDomains">
380        <xs:complexType>
381            <xs:sequence>
382                <xs:element maxOccurs="unbounded" name="ConfigurableDomain" type="ConfigurableDomainType">
383                    <xs:key name="ConfigurableElementKey">
384                        <xs:selector xpath="ConfigurableElements/ConfigurableElement"/>
385                        <xs:field xpath="@Path"/>
386                    </xs:key>
387                    <xs:keyref refer="ConfigurableElementKey" name="ConfigurableDomainReference">
388                        <xs:selector xpath="Settings/Configuration/ConfigurableElement"/>
389                        <xs:field xpath="@Path"/>
390                    </xs:keyref>
391                    <xs:key name="ConfigurationKey">
392                        <xs:selector xpath="Configurations/Configuration"/>
393                        <xs:field xpath="@Name"/>
394                    </xs:key>
395                    <xs:keyref refer="ConfigurationKey" name="ConfigurationReference2">
396                        <xs:selector xpath="ConfigurableElements/ConfigurableElement/Configuration"/>
397                        <xs:field xpath="@Name"/>
398                    </xs:keyref>
399                    <xs:keyref refer="ConfigurationKey" name="ConfigurationReference">
400                        <xs:selector xpath="Settings/Configuration"/>
401                        <xs:field xpath="@Name"/>
402                    </xs:keyref>
403                </xs:element>
404            </xs:sequence>
405            <xs:attribute name="SystemClassName" use="required" type="xs:NCName"/>
406        </xs:complexType>
407        <xs:unique name="ConfigurableDomainUniqueness">
408            <xs:selector xpath="ConfigurableDomain"/>
409            <xs:field xpath="@Name"/>
410        </xs:unique>
411    </xs:element>
412    <!-- END ConfigurableDomains.xsd -->
413
414    <xs:simpleType name="ParameterNameEnumType">
415        <xs:restriction base="xs:string">
416            <xs:enumeration value="volume_profile"/>
417
418            <xs:enumeration value="communication"/>
419            <xs:enumeration value="ambient"/>
420            <xs:enumeration value="builtin_mic"/>
421            <xs:enumeration value="bluetooth_sco_headset"/>
422            <xs:enumeration value="wired_headset"/>
423            <xs:enumeration value="hdmi"/>
424            <xs:enumeration value="telephony_rx"/>
425            <xs:enumeration value="back_mic"/>
426            <xs:enumeration value="remote_submix"/>
427            <xs:enumeration value="anlg_dock_headset"/>
428            <xs:enumeration value="dgtl_dock_headset"/>
429            <xs:enumeration value="usb_accessory"/>
430            <xs:enumeration value="usb_device"/>
431            <xs:enumeration value="fm_tuner"/>
432            <xs:enumeration value="tv_tuner"/>
433            <xs:enumeration value="line"/>
434            <xs:enumeration value="spdif"/>
435            <xs:enumeration value="bluetooth_a2dp" />
436            <xs:enumeration value="loopback" />
437            <xs:enumeration value="ip" />
438            <xs:enumeration value="bus" />
439            <xs:enumeration value="proxy"/>
440            <xs:enumeration value="usb_headset"/>
441            <xs:enumeration value="bluetooth_ble"/>
442            <xs:enumeration value="hdmi_arc"/>
443            <xs:enumeration value="echo_reference"/>
444            <xs:enumeration value="ble_headset"/>
445            <xs:enumeration value="stub"/>
446            <xs:enumeration value="hdmi_earc"/>
447
448            <xs:enumeration value="device_address"/>
449
450            <xs:enumeration value="earpiece" />
451            <xs:enumeration value="speaker" />
452            <xs:enumeration value="wired_headphone" />
453            <xs:enumeration value="bluetooth_sco" />
454            <xs:enumeration value="bluetooth_sco_carkit"/>
455            <xs:enumeration value="bluetooth_a2dp_headphones"/>
456            <xs:enumeration value="bluetooth_a2dp_speaker"/>
457            <xs:enumeration value="telephony_tx"/>
458            <xs:enumeration value="fm"/>
459            <xs:enumeration value="aux_line"/>
460            <xs:enumeration value="speaker_safe"/>
461            <xs:enumeration value="hearing_aid" />
462            <xs:enumeration value="echo_canceller" />
463            <xs:enumeration value="ble_speaker" />
464            <xs:enumeration value="ble_broadcast" />
465        </xs:restriction>
466    </xs:simpleType>
467</xs:schema>
468