<?xml version="1.0" encoding="UTF-8"?>
<!--
	Document Title: XML Schema for User Interface Socket Description
	Document URL: http://myurc.org/ns/uisocketdesc
	Schema Documentation: http://myurc.org/ns/uisocketdesc/uisocketdesc.html
	Author: Gottfried Zimmermann, Trace Center
	Publisher: Universal Remote Console Consortium
	Reference: ISO/IEC 24752-2:2007, Information Technology - User Interfaces - Universal Remote Console,
		Part 2: User Interface Socket Description
	Copyright 2007, URCC

	Abstract: This is the XML Schema Definition file for the User Interface Socket Description language, 
as specified by ISO/IEC 24752 part 2.  In case of any differences between this specification and 
ISO/IEC 24752-2, the normative ISO standard shall take precedence.  In fact, this XSD file doesn't exactly 
reflect the UISD syntax as specified in ISO/IEC 24752-2 due to limitations of the XSD syntax.  The user's 
attention is drawn to the included annotations which may hint at such deviations.

MIME type of UI Socket Description: “application/urc-uisocketdesc+xml”.

	Versioning: This XML Schema Definition file will be updated in the future to reflect new revisions of 
the URC standard, if the new revision is backward compatible.  Otherwise a new XML Schema Definition file 
will be created with a new URL.

	Annotations: This XML Schema has been documented by embedded xsd:annotation elements.  Where elements or attributes are contained in complex types, the pertaining type definition is annotated rather than the reference to it.

	Disclaimer: THIS DOCUMENT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE 
COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY 
SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING 
FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OF THIS DOCUMENT.
-->
<xsd:schema xmlns:uis="http://myurc.org/ns/uisocketdesc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" targetNamespace="http://myurc.org/ns/uisocketdesc" xsi:schemaLocation="http://www.w3.org/2001/XMLSchema http://www.w3.org/2001/XMLSchema.xsd" elementFormDefault="qualified" attributeFormDefault="unqualified" version="ISO/IEC FDIS 24752-2:2007">
	<xsd:annotation>
		<xsd:documentation>
			<dc:title xml:lang="en-US">XML Schema for User Interface Socket Description</dc:title>
			<dc:creator>Gottfried Zimmermann, Trace Center</dc:creator>
			<dc:publisher xml:lang="en-US">Universal Remote Console Consortium</dc:publisher>
			<dc:description xml:lang="en-US">This is the XML schema for ISO/IEC 24752-2:2007</dc:description>
			<dc:language xml:lang="en-US">English</dc:language>
			<dcterms:issued>2004-01-28</dcterms:issued>
			<dcterms:modified>2007-08-18</dcterms:modified>
			<dc:rights xml:lang="en-US">Copyright 2007 URCC</dc:rights>
		</xsd:documentation>
	</xsd:annotation>
	<xsd:import namespace="http://www.w3.org/2001/XMLSchema" schemaLocation="http://www.w3.org/2001/XMLSchema.xsd"/>	
	<xsd:import namespace="http://purl.org/dc/elements/1.1/" schemaLocation="http://dublincore.org/schemas/xmls/qdc/2006/01/06/dc.xsd"/>
	<xsd:import namespace="http://purl.org/dc/terms/" schemaLocation="http://dublincore.org/schemas/xmls/qdc/2006/01/06/dcterms.xsd"/>
	<xsd:element name="uiSocket" type="uis:uiSocketType">
		<xsd:annotation>
			<xsd:documentation>Root element</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<xsd:complexType name="uiSocketType">
		<xsd:annotation>
			<xsd:documentation>Type for root element of User Interface Socket Description</xsd:documentation>
		</xsd:annotation>
		<xsd:choice minOccurs="1" maxOccurs="unbounded">
			<xsd:any namespace="http://purl.org/dc/elements/1.1/ http://purl.org/dc/terms/" processContents="lax">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">Due to XSD syntax limitations, this is not as restrictive as ISO/IEC 24752-2: dcterms:conformsTo is required as a minimum.</xsd:documentation>
				</xsd:annotation>
			</xsd:any>
			<xsd:element name="set" type="uis:setType"/>
			<xsd:element name="variable" type="uis:variableType"/>
			<xsd:element name="constant" type="uis:constantType"/>
			<xsd:element name="command" type="uis:commandType"/>
			<xsd:element name="notify" type="uis:notifyType"/>
			<xsd:element ref="xsd:schema">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">ISO/IEC 24752-2 is more restrictive: schema element may occur only once; must contain type definitions in XML Schema Definition language; schema element must not have a targetNamespace attribute.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="mapping" type="uis:mappingType" minOccurs="0" maxOccurs="unbounded"/>
		</xsd:choice>
		<xsd:attribute name="about" type="xsd:anyURI" use="required">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Globally unique name (URI) of Socket described.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="id" type="xsd:ID" use="required"/>
		<xsd:attribute name="sufficient" type="xsd:boolean" use="optional" default="false">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Default value for sufficiency of commands in this Socket Description.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="complete" type="xsd:boolean" use="optional" default="false">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Default value for completeness of commands in this Socket Description.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>
	<xsd:complexType name="setType">
		<xsd:annotation>
			<xsd:documentation xml:lang="en">Type for set element.  Set elements may be used to create a socket-internal hierarchical structure.  Sets may be nested.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:annotation>
				<xsd:documentation xml:lang="en">This schema requires specific order of children due to XSD syntax limitations. This is more restrictive than ISO/IEC 24752-2.</xsd:documentation>
			</xsd:annotation>
			<xsd:any namespace="http://purl.org/dc/elements/1.1/ http://purl.org/dc/terms/" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
			<xsd:element name="mapping" type="uis:mappingType" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">Platform-specific binding information for the set.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>			
			<xsd:element name="dependency" type="uis:setDependencyType" minOccurs="0" maxOccurs="1"/>
			<xsd:choice minOccurs="1" maxOccurs="unbounded">
				<xsd:element name="set" type="uis:setType"/>
				<xsd:element name="variable" type="uis:variableType"/>
				<xsd:element name="constant" type="uis:constantType"/>
				<xsd:element name="command" type="uis:commandType"/>
				<xsd:element name="notify" type="uis:notifyType"/>
			</xsd:choice>
		</xsd:sequence>
		<xsd:attribute name="id" type="xsd:ID" use="required"/>
		<xsd:attribute name="dim" type="uis:dimType" use="optional"/>
	</xsd:complexType>
	<xsd:complexType name="setDependencyType">
		<xsd:annotation>
			<xsd:documentation xml:lang="en">Type for set dependency.</xsd:documentation>
		</xsd:annotation>
		<xsd:all>
			<xsd:element name="relevant" type="uis:xpathExpressionType" minOccurs="0" maxOccurs="1">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">XPath expression indicating when the set may be presented to the user, based on state information of the Target.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="write" type="uis:xpathExpressionType" minOccurs="0" maxOccurs="1">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">XPath expression indicating when the user can change the value of variables or trigger commands inside the set element.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="insert" type="uis:xpathExpressionType" minOccurs="0" maxOccurs="1">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">XPath expression indicating when the user can insert or remove actual indices for the set element.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
		</xsd:all>
	</xsd:complexType>
	<xsd:complexType name="xpathExpressionType">
		<xsd:annotation>
			<xsd:documentation xml:lang="en">XPath 2.0 expression as dependency.  Note that this schema cannot validate the XPath syntax used in a UI Socket Description.</xsd:documentation>
		</xsd:annotation>
		<xsd:simpleContent>
			<xsd:extension base="xsd:string">
				<xsd:attribute name="id" type="xsd:ID" use="optional"/>
			</xsd:extension>
		</xsd:simpleContent>
	</xsd:complexType>
	<xsd:simpleType name="dimType">
		<xsd:annotation>
			<xsd:documentation xml:lang="en">Type for dim attribute on sets and socket elements.  Specifies a non-empty, ordered, white-space separated list of type names which denote the index spaces for the set/element.</xsd:documentation>
		</xsd:annotation>
		<xsd:list itemType="xsd:QName"/>
	</xsd:simpleType>
	<xsd:complexType name="variableType">
		<xsd:annotation>
			<xsd:documentation xml:lang="en">Variables are used to expose the state of a Target to a user, and to let the user change the Target state.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:annotation>
				<xsd:documentation xml:lang="en">This schema requires specific order of children due to XSD syntax limitations. This is more restrictive than ISO/IEC 24752-2.</xsd:documentation>
			</xsd:annotation>
			<xsd:any namespace="http://purl.org/dc/elements/1.1/ http://purl.org/dc/terms/" processContents="lax" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">Describes the variable with DCMI properties.</xsd:documentation>
				</xsd:annotation>
			</xsd:any>
			<xsd:element name="mapping" type="uis:mappingType" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">Platform-specific binding information for the variable.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="dependency" type="uis:variableDependencyType" minOccurs="0" maxOccurs="1"/>
			<xsd:element name="selection" type="uis:selectionType" minOccurs="0" maxOccurs="1">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">Set of values that either restrict the variable's value space (closed selection) or provide suggested values for user input (open selection).</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
		</xsd:sequence>
		<xsd:attribute name="id" type="xsd:ID" use="required"/>
		<xsd:attribute name="type" type="xsd:QName" use="required">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Type of the variable, may be imported.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="secret" type="xsd:boolean" use="optional" default="false">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Whether the variable's value is sensitive regarding security and privacy.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="sensitive" type="xsd:boolean" use="optional" default="false">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Whether the variable shall be presented to the user under all circumstances.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="timeout" type="xsd:boolean" use="optional" default="false">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Whether this variable holds the timeout duration for one or multiple user response timeouts of the Target. If true, type must be xsd:duration.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="optional" type="xsd:boolean" use="optional" default="false">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">If true, the variable may not be available at runtime due to various constraints.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="final" type="xsd:boolean" use="optional" default="false">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Whether the variable will never change during a session.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="dim" type="uis:dimType" use="optional"/>
		<xsd:attribute name="includesRes" type="xsd:boolean" use="optional" default="false">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Whether the variable comes with resources at runtime.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>
	<xsd:complexType name="variableDependencyType">
		<xsd:annotation>
			<xsd:documentation xml:lang="en">Type for variable dependency element.</xsd:documentation>
		</xsd:annotation>
		<xsd:all>
			<xsd:element name="relevant" type="uis:xpathExpressionType" minOccurs="0" maxOccurs="1">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">XPath expression indicating when the variable may be presented to the user, based on state information of the Target.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="write" type="uis:xpathExpressionType" minOccurs="0" maxOccurs="1">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">XPath expression indicating when the user can change the value of the variable. </xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="insert" type="uis:xpathExpressionType" minOccurs="0" maxOccurs="1">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">XPath expression indicating when the user can insert or remove actual indices for the variable element.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="calculate" type="uis:xpathExpressionType" minOccurs="0" maxOccurs="1">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">XPath expression specifying how the value of the variable depends on the values of other variables.  Only allowed for permanently read-only variables (those with a write dependency of "false()").</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="length" type="uis:xpathExpressionType" minOccurs="0" maxOccurs="1">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">XPath expression that evaluates to a number which specifies the allowed length of the variable at runtime.  Allowed only if the type of the pertaining variable is xsd:string, or derived from xsd:string.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="minLength" type="uis:xpathExpressionType" minOccurs="0" maxOccurs="1">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">XPath expression that evaluates to a number which specifies the minimum allowed length of the variable at runtime.  Allowed only if the type of the pertaining variable is xsd:string, or derived from xsd:string.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="maxLength" type="uis:xpathExpressionType" minOccurs="0" maxOccurs="1">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">XPath expression that evaluates to a number which specifies the maximum allowed length of the variable at runtime.  Allowed only if the type of the pertaining variable is xsd:string, or derived from xsd:string.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="pattern" type="uis:xpathExpressionType" minOccurs="0" maxOccurs="1">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">XPath expression that evaluates to a string which specifies a regular expression that defines a pattern for the allowed values of the variable at runtime.  Allowed only if the type of the pertaining variable is xsd:string, or derived from xsd:string.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="minInclusive" type="uis:xpathExpressionType" minOccurs="0" maxOccurs="1">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">XPath expression that evaluates to a value of the same type as the variable it belongs to.  This value specifies the minimum value (inclusively) of the variable at runtime.  Allowed only if variable has a type whose value space is totally ordered.  </xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="maxInclusive" type="uis:xpathExpressionType" minOccurs="0" maxOccurs="1">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">XPath expression that evaluates to a value of the same type as the variable it belongs to.  This value specifies the maximum value (inclusively) of the variable at runtime.  Allowed only if variable has a type whose value space is totally ordered.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="minExclusive" type="uis:xpathExpressionType" minOccurs="0" maxOccurs="1">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">XPath expression that evaluates to a value of the same type as the variable it belongs to.  This value specifies the minimum value (exclusively) of the variable at runtime.  Allowed only if variable has a type whose value space is totally ordered.  </xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="maxExclusive" type="uis:xpathExpressionType" minOccurs="0" maxOccurs="1">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">XPath expression that evaluates to a value of the same type as the variable it belongs to.  This value specifies the maximum value (exclusively) of the variable at runtime.  Allowed only if variable has a type whose value space is totally ordered.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
		</xsd:all>
		<xsd:attribute name="id" type="xsd:ID" use="optional"/>
	</xsd:complexType>
	<xsd:complexType name="selectionType">
		<xsd:annotation>
			<xsd:documentation xml:lang="en">Type for a set of values pertaining to a variable or command parameter.  This set either restricts the variable's/parameter's value space (closed selection) or provide suggested values for user input (open selection).</xsd:documentation>
		</xsd:annotation>
		<xsd:choice minOccurs="1" maxOccurs="unbounded">
			<xsd:element name="selectionSetStatic" type="uis:selectionSetStaticType">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">Selection set that does not change dynamically with the Target's state.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="selectionSetDynamic" type="uis:selectionSetDynamicType">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">Selection set that can change dynamically with the Target's state.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
		</xsd:choice>
		<xsd:attribute name="closed" type="xsd:boolean" use="optional" default="true">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Whether the set of values is closed.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>
	<xsd:complexType name="selectionSetStaticType">
		<xsd:attribute name="id" type="xsd:ID" use="required"/>
		<xsd:attribute name="typeRef" type="xsd:QName" use="required">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Reference to a type defining a static set of values.  The referenced type must be derived by restriction from a simple type.  </xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>
	<xsd:complexType name="selectionSetDynamicType">
		<xsd:attribute name="id" type="xsd:ID" use="required"/>
		<xsd:attribute name="varRef" type="xsd:IDREF" use="required">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Reference to socket variable of type uis:valueList or uis:csvlist, providing a list of allowed values.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>
	<xsd:complexType name="constantType" mixed="true">
		<xsd:annotation>
			<xsd:documentation xml:lang="en">Constants are used to represent static information that is known prior to runtime.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:annotation>
				<xsd:documentation xml:lang="en">This schema requires specific order of children due to XSD syntax limitations. This is more restrictive than ISO/IEC 24752-2.</xsd:documentation>
			</xsd:annotation>
			<xsd:any namespace="http://purl.org/dc/elements/1.1/ http://purl.org/dc/terms/" processContents="lax" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">Describes the constant with DCMI properties.</xsd:documentation>
				</xsd:annotation>
			</xsd:any>
			<xsd:element name="mapping" type="uis:mappingType" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">Platform-specific binding information for the constant.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="dependency" type="uis:constantDependencyType" minOccurs="0" maxOccurs="1"/>
		</xsd:sequence>
		<xsd:attribute name="id" type="xsd:ID" use="required"/>
		<xsd:attribute name="type" type="xsd:QName" use="optional" default="xsd:string">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Type of the constant, may be imported.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="sensitive" type="xsd:boolean" use="optional" default="false">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Whether the constant shall be presented to the user under all circumstances.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="timeout" type="xsd:boolean" use="optional" default="false">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Whether this constant holds the timeout duration for one or multiple user response timeouts of the Target. If true, type must be xsd:duration.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>
	<xsd:complexType name="constantDependencyType">
		<xsd:annotation>
			<xsd:documentation xml:lang="en">Type for constant dependency element.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="relevant" type="uis:xpathExpressionType">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">XPath expression indicating when the constant may be presented to the user, based on state information of the Target. </xsd:documentation>
				</xsd:annotation>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="commandType">
		<xsd:annotation>
			<xsd:documentation xml:lang="en">Command elements are used to capture commands that a user may issue to a Target.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:annotation>
				<xsd:documentation xml:lang="en">This schema requires specific order of children due to XSD syntax limitations. This is more restrictive than ISO/IEC 24752-2.</xsd:documentation>
			</xsd:annotation>
			<xsd:any namespace="http://purl.org/dc/elements/1.1/ http://purl.org/dc/terms/" processContents="lax" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">Describes the command with DCMI properties.</xsd:documentation>
				</xsd:annotation>
			</xsd:any>
			<xsd:element name="mapping" type="uis:mappingType" minOccurs="0" maxOccurs="unbounded"/>
			<xsd:element name="dependency" type="uis:commandDependencyType" minOccurs="0" maxOccurs="1"/>
			<xsd:element name="param" type="uis:paramType" minOccurs="0" maxOccurs="unbounded"/>
		</xsd:sequence>
		<xsd:attribute name="id" type="xsd:ID" use="required"/>
		<xsd:attribute name="type" type="xsd:QName" use="optional" default="uis:voidCommand">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Type of the command (pre-defined: uis:voidCommand, uis:basicCommand, uis:timedCommand).</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="sensitive" type="xsd:boolean" use="optional" default="false">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Whether the command shall be presented to the user under all circumstances.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="sufficient" type="xsd:boolean" use="optional">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Whether the command is sufficiently specified.  Note: No default value specified since this value, if present, will override the value of the sufficient attribute of the uiSocket element.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="complete" type="xsd:boolean" use="optional">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Whether the command is completely specified.  Note: No default value specified since this value, if present, will override the value of the complete attribute of the uiSocket element.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="optional" type="xsd:boolean" use="optional" default="false">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">If optional=”true”, the command may not be available at runtime due to various constraints.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="dim" type="uis:dimType" use="optional"/>
		<xsd:attribute name="includesRes" type="xsd:boolean" use="optional" default="false">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Whether the command comes with resources at runtime.  Only allowed for types uis:basicCommand and uis:timedCommand.  Note: The default value "false" is not specified in XSD since this would also apply to commands of type uis:voidCommand.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>
	<xsd:complexType name="commandDependencyType">
		<xsd:annotation>
			<xsd:documentation xml:lang="en">Type for command dependency element.</xsd:documentation>
		</xsd:annotation>
		<xsd:all>
			<xsd:element name="relevant" type="uis:xpathExpressionType" minOccurs="0" maxOccurs="1">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">XPath expression indicating when the command may be presented to the user, based on state information of the Target. </xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="write" type="uis:xpathExpressionType" minOccurs="0" maxOccurs="1">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">XPath expression indicating when the user can activate the command, based on state information of the Target.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="insert" type="uis:xpathExpressionType" minOccurs="0" maxOccurs="1">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">XPath expression indicating when the user can insert or remove actual indices for the command element.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="assert" type="uis:xpathExpressionType" minOccurs="0" maxOccurs="1">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">XPath expression that is guaranteed to evaluate to true after the command has been successfully executed. </xsd:documentation>
				</xsd:annotation>
			</xsd:element>
		</xsd:all>
		<xsd:attribute name="id" type="xsd:ID" use="optional"/>
	</xsd:complexType>
	<xsd:complexType name="paramType">
		<xsd:annotation>
			<xsd:documentation xml:lang="en">The type for command parameters. Due to XSD syntax limitations, no distinction between local and global parameters is made.  Also, this type definition is far more lax than ISO/IEC 24752-2.  For local parameters, id, dir, type are required; secret, sensitive are optional.  For global parameters, idref, dir are required.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:any namespace="http://purl.org/dc/elements/1.1/ http://purl.org/dc/terms/" processContents="lax" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">Describes the parameter with DCMI properties.</xsd:documentation>
				</xsd:annotation>
			</xsd:any>
			<xsd:element name="mapping" type="uis:mappingType" minOccurs="0" maxOccurs="unbounded"/>
			<xsd:element name="selection" type="uis:selectionType" minOccurs="0" maxOccurs="1"/>
		</xsd:sequence>
		<xsd:attribute name="id" type="xsd:ID" use="optional">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Required for local parameters, prohibited for global parameters.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="idref" type="xsd:IDREF" use="optional">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Reference to variable used as global parameter. Required for global parameters, prohibited for local parameters.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="dir" type="uis:dirType" use="required">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">"in" for input parameter, "out" for output parameter, "inout" for input-output parameter.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="type" type="xsd:QName" use="optional">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Required for local parameters, prohibited for global parameters.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="secret" type="xsd:boolean" use="optional">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Whether the local parameter's value is sensitive regarding security and privacy.  Prohibited for global parameters.  Note: Default value "false" not specified in XSD since this would also apply to global parameters.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="sensitive" type="xsd:boolean" use="optional">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Whether this local parameter represents legally sensitive information. Prohibited for global parameters.  Note: Default value "false" not specified in XSD since this would also apply to global parameters.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>
	<xsd:complexType name="notifyType">
		<xsd:annotation>
			<xsd:documentation xml:lang="en">Notifications are special states in which normal operation is suspended, such as exception states.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:annotation>
				<xsd:documentation xml:lang="en">This schema requires specific order of children due to XSD syntax limitations. This is more restrictive than ISO/IEC 24752-2.</xsd:documentation>
			</xsd:annotation>
			<xsd:any namespace="http://purl.org/dc/elements/1.1/ http://purl.org/dc/terms/" processContents="lax" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">Describes the notification with DCMI properties.</xsd:documentation>
				</xsd:annotation>
			</xsd:any>
			<xsd:element name="mapping" type="uis:mappingType" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">Platform-specific binding information for the notification.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="dependency" type="uis:notifyDependencyType" minOccurs="0" maxOccurs="1"/>
			<xsd:choice minOccurs="0" maxOccurs="1">
				<xsd:element name="variable" type="uis:notifyTimeoutVariableType">
					<xsd:annotation>
						<xsd:documentation xml:lang="en">Timeout variable for the notification.</xsd:documentation>
					</xsd:annotation>
				</xsd:element>
				<xsd:element name="constant" type="uis:notifyTimeoutConstantType">
					<xsd:annotation>
						<xsd:documentation xml:lang="en">Timeout constant for the notification.</xsd:documentation>
					</xsd:annotation>
				</xsd:element>
			</xsd:choice>
		</xsd:sequence>
		<xsd:attribute name="id" type="xsd:ID" use="required"/>
		<xsd:attribute name="category" type="uis:categoryType" use="optional" default="info">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Category of notification ("info", "alert", "error").</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="sensitive" type="xsd:boolean" use="optional" default="false">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Whether the notification represents legally sensitive information.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="optional" type="xsd:boolean" use="optional" default="false">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">If optional=”true”, the notification may not be available at runtime due to various constraints.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="dim" type="uis:dimType" use="optional"/>
		<xsd:attribute name="includesRes" type="xsd:boolean" use="optional" default="false">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Whether the notify element comes with resources at runtime.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>
	<xsd:complexType name="notifyDependencyType">
		<xsd:all>
			<xsd:element name="insert" type="uis:xpathExpressionType" minOccurs="0" maxOccurs="1">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">XPath expression indicating when the user can insert or remove actual indices for the notify element.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="explicitAck" type="uis:xpathExpressionType" minOccurs="0" maxOccurs="1" default="true()">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">XPath expression indicating if the user has to acknowledge the notification.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="acknowledge" type="uis:xpathExpressionType" minOccurs="0" maxOccurs="1">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">XPath expression specifying when a notification is deemed to have been handled by the user. </xsd:documentation>
				</xsd:annotation>
			</xsd:element>
		</xsd:all>
		<xsd:attribute name="id" type="xsd:ID" use="optional"/>
	</xsd:complexType>
	<xsd:complexType name="notifyTimeoutVariableType">
		<xsd:sequence>
			<xsd:annotation>
				<xsd:documentation>This schema requires specific order of children due to XSD syntax limitations. This is more restrictive than ISO/IEC 24752-2.</xsd:documentation>
			</xsd:annotation>
			<xsd:element name="dependency" type="uis:variableDependencyType" minOccurs="0" maxOccurs="1"/>
			<xsd:element name="selection" type="uis:selectionType" minOccurs="0" maxOccurs="1">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">Set of values that either restrict the variable's value space (closed selection) or provide suggested values for user input (open selection).</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="mapping" type="uis:mappingType" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">Platform-specific binding information for the variable.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:any namespace="http://purl.org/dc/elements/1.1/ http://purl.org/dc/terms/" processContents="lax" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">Describes the variable with DCMI properties.</xsd:documentation>
				</xsd:annotation>
			</xsd:any>
		</xsd:sequence>
		<xsd:attribute name="id" type="xsd:ID" use="required"/>
		<xsd:attribute name="type" type="xsd:QName" use="required" fixed="xsd:duration"/>
		<xsd:attribute name="secret" type="xsd:boolean" use="optional" default="false">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Whether the variable's value is sensitive regarding security and privacy.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="sensitive" type="xsd:boolean" use="optional" default="false">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Whether the variable shall be presented to the user under all circumstances.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="timeout" type="xsd:boolean" use="required" fixed="true"/>
		<xsd:attribute name="optional" type="xsd:boolean" use="optional" default="false">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">If true, the variable may not be available at runtime due to various constraints.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="final" type="xsd:boolean" use="optional" default="false">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Whether the variable will never change during a session.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="dim" type="uis:dimType" use="optional"/>
		<xsd:attribute name="includesRes" type="xsd:boolean" use="optional" default="false">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Whether the variable comes with resources at runtime.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>
	<xsd:complexType name="notifyTimeoutConstantType" mixed="true">
		<xsd:sequence>
			<xsd:annotation>
				<xsd:documentation xml:lang="en">This schema requires specific order of children due to XSD syntax limitations. This is more restrictive than ISO/IEC 24752-2.</xsd:documentation>
			</xsd:annotation>
			<xsd:element name="dependency" type="uis:constantDependencyType" minOccurs="0" maxOccurs="1"/>
			<xsd:element name="mapping" type="uis:mappingType" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">Platform-specific binding information for the constant.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:any namespace="http://purl.org/dc/elements/1.1/ http://purl.org/dc/terms/" processContents="lax" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation xml:lang="en">Describes the constant with DCMI properties.</xsd:documentation>
				</xsd:annotation>
			</xsd:any>
		</xsd:sequence>
		<xsd:attribute name="id" type="xsd:ID" use="required"/>
		<xsd:attribute name="type" type="xsd:QName" use="required" fixed="xsd:duration"/>
		<xsd:attribute name="sensitive" type="xsd:boolean" use="optional" default="false">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Whether the constant shall be presented to the user under all circumstances.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="timeout" type="xsd:boolean" use="required" fixed="true"/>
	</xsd:complexType>
	<xsd:complexType name="mappingType" mixed="true">
		<xsd:annotation>
			<xsd:documentation xml:lang="en">Platform-specific binding information for the User Interface Socket, any UI Socket element, or command parameters.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence minOccurs="0" maxOccurs="unbounded">
			<xsd:any namespace="##other" processContents="lax"/>
		</xsd:sequence>
		<xsd:attribute name="platform" type="xsd:anySimpleType" use="required">
			<xsd:annotation>
				<xsd:documentation xml:lang="en">Identifier for a particular networking platform.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>
	<xsd:simpleType name="dirType">
		<xsd:annotation>
			<xsd:documentation xml:lang="en">Valid values for dir attribute of param element.</xsd:documentation>
		</xsd:annotation>
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="in"/>
			<xsd:enumeration value="out"/>
			<xsd:enumeration value="inout"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:simpleType name="categoryType">
		<xsd:annotation>
			<xsd:documentation xml:lang="en">Valid values for category attribute of notify element.</xsd:documentation>
		</xsd:annotation>
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="info"/>
			<xsd:enumeration value="alert"/>
			<xsd:enumeration value="error"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:simpleType name="listItem">
		<xsd:annotation>
			<xsd:documentation xml:lang="en">Item for 'valueList'.</xsd:documentation>
		</xsd:annotation>
		<xsd:restriction base="xsd:string">
			<xsd:pattern value="\S+"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:simpleType name="stringListItem" id="idStringListItem">
		<xsd:annotation>
			<xsd:documentation xml:lang="en">Pre-defined type - building block for the specification of types (by derivation) that provide a list of constrained string values.</xsd:documentation>
		</xsd:annotation>
		<xsd:restriction base="xsd:string">
			<xsd:pattern value="\S+"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:simpleType name="stringList">
		<xsd:annotation>
			<xsd:documentation xml:lang="en">Pre-defined type for whitespace delimited list of strings.</xsd:documentation>
		</xsd:annotation>
		<xsd:list itemType="uis:stringListItem"/>
	</xsd:simpleType>
</xsd:schema>
