<?xml version="1.0" encoding="utf-8"?>
<!--$Header: /cvs/genicam/genicam/xml/GenApi/GenApiSchema_Version_1_0.xsd,v 1.19 2006/07/06 15:52:41 friedrich_dierks Exp $ -->
<!-- ***************************************************************************
*  (c) 2006 by Basler Vision Technologies
*  Section: Vision Components
*  Project: GenApi
*  Author:  Fritz Dierks
*
*  License: This file is published under the license of the EMVA GenICam  Standard Group. 
*  A text file describing the legal terms is included in  your installation as 'GenICam_license.pdf'. 
*  If for some reason you are missing  this file please contact the EMVA or visit the website
*  (http://www.genicam.org) for a full copy.
* 
*  THIS SOFTWARE IS PROVIDED BY THE EMVA GENICAM STANDARD GROUP "AS IS"
*  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,  
*  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR  
*  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE EMVA GENICAM STANDARD  GROUP 
*  OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,  SPECIAL, 
*  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT  LIMITED TO, 
*  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,  DATA, OR PROFITS; 
*  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY  THEORY OF LIABILITY, 
*  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT  (INCLUDING NEGLIGENCE OR OTHERWISE) 
*  ARISING IN ANY WAY OUT OF THE USE  OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
*  POSSIBILITY OF SUCH DAMAGE.
******************************************************************************** -->
<xs:schema xmlns="http://www.genicam.org/GenApi/Version_1_0" xmlns:mstns="http://www.genicam.org/GenApi/Version_1_0" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.genicam.org/GenApi/Version_1_0" elementFormDefault="qualified" id="GenApiSchema_1_0">
	<xs:element name="RegisterDescription">
		<xs:complexType>
			<xs:sequence maxOccurs="unbounded">
				<xs:group ref="NodesTemplate"/>
			</xs:sequence>
			<xs:attribute name="ModelName" type="CName_t" use="required"/>
			<xs:attribute name="VendorName" type="CName_t" use="required"/>
			<xs:attribute name="ToolTip" type="xs:string" use="optional"/>
			<xs:attribute name="StandardNameSpace" type="StandardNameSpace_t" use="required"/>
			<xs:attribute name="SchemaMajorVersion" type="nonNegativeHexOrDecimal_t" use="required" fixed="1"/>
			<xs:attribute name="SchemaMinorVersion" type="nonNegativeHexOrDecimal_t" use="required" fixed="0"/>
			<xs:attribute name="SchemaSubMinorVersion" type="nonNegativeHexOrDecimal_t" use="required"/>
			<xs:attribute name="MajorVersion" type="nonNegativeHexOrDecimal_t" use="required"/>
			<xs:attribute name="MinorVersion" type="nonNegativeHexOrDecimal_t" use="required"/>
			<xs:attribute name="SubMinorVersion" type="nonNegativeHexOrDecimal_t" use="required"/>
			<xs:attribute name="ProductGuid" type="xs:string" use="required"/>
			<xs:attribute name="VersionGuid" type="xs:string" use="required"/>
		</xs:complexType>
		<xs:key name="IntegerKey">
			<xs:selector xpath=".//mstns:AdvFeatureLock|.//mstns:Integer|.//mstns:IntKey|.//mstns:IntReg|.//mstns:MaskedIntReg|.//mstns:IntSwissKnife|.//mstns:SmartFeature|.//mstns:StructEntry|.//mstns:IntConverter"/>
			<xs:field xpath="@Name"/>
		</xs:key>
		<xs:key name="IntegerOrEnumKey">
			<xs:selector xpath=".//mstns:AdvFeatureLock|.//mstns:Integer|.//mstns:IntKey|.//mstns:IntReg|.//mstns:MaskedIntReg|.//mstns:IntSwissKnife|.//mstns:SmartFeature|.//mstns:StructEntry|.//mstns:IntConverter|.//mstns:Enumeration"/>
			<xs:field xpath="@Name"/>
		</xs:key>
		<xs:key name="IntegerOrBooleanKey">
			<xs:selector xpath=".//mstns:AdvFeatureLock|.//mstns:Integer|.//mstns:IntKey|.//mstns:IntReg|.//mstns:MaskedIntReg|.//mstns:IntSwissKnife|.//mstns:SmartFeature|.//mstns:StructEntry|.//mstns:IntConverter|.//mstns:Boolean"/>
			<xs:field xpath="@Name"/>
		</xs:key>
		<xs:key name="FloatKey">
			<xs:selector xpath=".//mstns:Converter|.//mstns:Float|.//mstns:FloatReg|.//mstns:SwissKnife"/>
			<xs:field xpath="@Name"/>
		</xs:key>
		<xs:key name="StringKey">
			<xs:selector xpath=".//mstns:StringReg|.//mstns:TextDesc"/>
			<xs:field xpath="@Name"/>
		</xs:key>
		<xs:key name="IntegerOrFloatKey">
			<xs:selector xpath=".//mstns:AdvFeatureLock|.//mstns:Integer|.//mstns:IntKey|.//mstns:IntReg|.//mstns:MaskedIntReg|.//mstns:IntSwissKnife|.//mstns:SmartFeature|.//mstns:StructEntry|.//mstns:Converter|.//mstns:IntConverter|.//mstns:Float|.//mstns:FloatReg|.//mstns:SwissKnife"/>
			<xs:field xpath="@Name"/>
		</xs:key>
		<xs:key name="SelectedKey">
			<xs:selector xpath=".//mstns:Node|.//mstns:IntReg|.//mstns:Enumeration|.//mstns:Integer|.//mstns:MaskedIntReg|.//mstns:Register|.//mstns:IntSwissKnife|.//mstns:Category|.//mstns:TextDesc|.//mstns:IntKey|.//mstns:FloatReg|.//mstns:Float|.//mstns:StringReg|.//mstns:SwissKnife|.//mstns:Converter|.//mstns:IntConverter|.//mstns:Boolean|.//mstns:Command|.//mstns:StructReg/mstns:StructEntry"/>
			<xs:field xpath="@Name"/>
		</xs:key>
		<xs:key name="RegisterKey">
			<xs:selector xpath=".//mstns:Register|.//mstns:AdvFeatureLock|.//mstns:FloatReg|.//mstns:ConfRom|.//mstns:IntReg|.//mstns:MaskedIntReg|.//mstns:SmartFeature|.//mstns:StringReg"/>
			<xs:field xpath="@Name"/>
		</xs:key>
		<xs:key name="PortKey">
			<xs:selector xpath=".//mstns:Port"/>
			<xs:field xpath="@Name"/>
		</xs:key>
		<xs:key name="FeatureKey">
			<xs:selector xpath=".//mstns:Node|.//mstns:IntReg|.//mstns:Enumeration|.//mstns:Integer|.//mstns:MaskedIntReg|.//mstns:Register|.//mstns:IntSwissKnife|.//mstns:Category|.//mstns:TextDesc|.//mstns:IntKey|.//mstns:FloatReg|.//mstns:Float|.//mstns:StringReg|.//mstns:SwissKnife|.//mstns:Converter|.//mstns:IntConverter|.//mstns:Boolean|.//mstns:Command|.//mstns:StructReg/mstns:StructEntry"/>
			<xs:field xpath="@Name"/>
		</xs:key>
		<xs:key name="EnumEntryKey">
			<xs:selector xpath=".//mstns:Enumeration/EnumEntry"/>
			<xs:field xpath="@Name"/>
		</xs:key>
		<xs:key name="ConfRomKey">
			<xs:selector xpath=".//mstns:ConfRom"/>
			<xs:field xpath="@Name"/>
		</xs:key>
		<xs:keyref name="pAddress" refer="IntegerOrEnumKey">
			<xs:selector xpath=".//mstns:Register/mstns:pAddress|.//mstns:AdvFeatureLock/mstns:pAddress|.//mstns:FloatReg/mstns:pAddress|.//mstns:ConfRom/mstns:pAddress|.//mstns:IntReg/mstns:pAddress|.//mstns:MaskedIntReg/mstns:pAddress|.//mstns:SmartFeature/mstns:pAddress|.//mstns:StringReg/mstns:pAddress"/>
			<xs:field xpath="."/>
		</xs:keyref>
		<xs:keyref name="pIndex" refer="IntegerKey">
			<xs:selector xpath=".//mstns:Register/mstns:pIndex|.//mstns:AdvFeatureLock/mstns:pIndex|.//mstns:FloatReg/mstns:pIndex|.//mstns:ConfRom/mstns:pIndex|.//mstns:IntReg/mstns:pIndex|.//mstns:MaskedIntReg/mstns:pIndex|.//mstns:SmartFeature/mstns:pIndex|.//mstns:StringReg/mstns:pIndex"/>
			<xs:field xpath="."/>
		</xs:keyref>
		<xs:keyref name="pLength" refer="IntegerKey">
			<xs:selector xpath=".//mstns:Register/mstns:pLength|.//mstns:AdvFeatureLock/mstns:pLength|.//mstns:FloatReg/mstns:pLength|.//mstns:ConfRom/mstns:pLength|.//mstns:IntReg/mstns:pLength|.//mstns:MaskedIntReg/mstns:pLength|.//mstns:SmartFeature/mstns:pLength|.//mstns:StringReg/mstns:pLength"/>
			<xs:field xpath="."/>
		</xs:keyref>
		<xs:keyref name="pPort" refer="PortKey">
			<xs:selector xpath=".//mstns:Register/mstns:pPort|.//mstns:AdvFeatureLock/mstns:pPort|.//mstns:FloatReg/mstns:pPort|.//mstns:ConfRom/mstns:pPort|.//mstns:IntReg/mstns:pPort|.//mstns:MaskedIntReg/mstns:pPort|.//mstns:SmartFeature/mstns:pPort|.//mstns:StringReg/mstns:pPort"/>
			<xs:field xpath="."/>
		</xs:keyref>
		<xs:keyref name="pFeature" refer="FeatureKey">
			<xs:selector xpath=".//mstns:Category/mstns:pFeature"/>
			<xs:field xpath="."/>
		</xs:keyref>
		<xs:keyref name="pSelected" refer="SelectedKey">
			<xs:selector xpath=".//mstns:Enumeration/mstns:pSelected|.//mstns:Integer/mstns:pSelected|.//mstns:IntReg/mstns:pSelected|.//mstns:MaskedIntReg/mstns:pSelected|.//mstns:StructEntry/mstns:pSelected"/>
			<xs:field xpath="."/>
		</xs:keyref>
		<xs:keyref name="pValue_Integer" refer="IntegerKey">
			<xs:selector xpath=".//mstns:Enumeration/mstns:pValue|.//mstns:Integer/mstns:pValue|.//mstns:Command/mstns:pValue|.//mstns:Boolean/mstns:pValue"/>
			<xs:field xpath="."/>
		</xs:keyref>
		<xs:keyref name="pMin_Integer" refer="IntegerKey">
			<xs:selector xpath=".//mstns:Integer/mstns:pMin"/>
			<xs:field xpath="."/>
		</xs:keyref>
		<xs:keyref name="pMax_Integer" refer="IntegerKey">
			<xs:selector xpath=".//mstns:Integer/mstns:pMax"/>
			<xs:field xpath="."/>
		</xs:keyref>
		<xs:keyref name="pInc_Integer" refer="IntegerKey">
			<xs:selector xpath=".//mstns:Integer/mstns:pInc"/>
			<xs:field xpath="."/>
		</xs:keyref>
		<xs:keyref name="pValue_Float" refer="FloatKey">
			<xs:selector xpath=".//mstns:Float/mstns:pValue"/>
			<xs:field xpath="."/>
		</xs:keyref>
		<xs:keyref name="pMin_Float" refer="FloatKey">
			<xs:selector xpath=".//mstns:Float/mstns:pMin"/>
			<xs:field xpath="."/>
		</xs:keyref>
		<xs:keyref name="pMax_Float" refer="FloatKey">
			<xs:selector xpath=".//mstns:Float/mstns:pMax"/>
			<xs:field xpath="."/>
		</xs:keyref>
		<xs:keyref name="pValue_IntegerOrFloat" refer="IntegerOrFloatKey">
			<xs:selector xpath=".//mstns:Converter/mstns:pValue"/>
			<xs:field xpath="."/>
		</xs:keyref>
		<xs:keyref name="pIsImplemented" refer="IntegerOrBooleanKey">
			<xs:selector xpath=".//mstns:Node/mstns:pIsImplemented|.//mstns:IntReg/mstns:pIsImplemented|.//mstns:Enumeration/mstns:pIsImplemented|.//mstns:Integer/mstns:pIsImplemented|.//mstns:MaskedIntReg/mstns:pIsImplemented|.//mstns:Register/mstns:pIsImplemented|.//mstns:IntSwissKnife/mstns:pIsImplemented|.//mstns:Category/mstns:pIsImplemented|.//mstns:TextDesc/mstns:pIsImplemented|.//mstns:IntKey/mstns:pIsImplemented|.//mstns:FloatReg/mstns:pIsImplemented|.//mstns:Float/mstns:pIsImplemented|.//mstns:StringReg/mstns:pIsImplemented|.//mstns:SwissKnife/mstns:pIsImplemented|.//mstns:Converter/mstns:pIsImplemented|.//mstns:Boolean/mstns:pIsImplemented|.//mstns:Command/mstns:pIsImplemented|.//mstns:StructReg/mstns:StructEntry/mstns:pIsImplemented|.//mstns:EnumEntry/mstns:pIsImplemented|.//mstns:Port/mstns:pIsImplemented|.//mstns:AdvFeatureLock/mstns:pIsImplemented|.//mstns:SmartFeature/mstns:pIsImplemented"/>
			<xs:field xpath="."/>
		</xs:keyref>
		<xs:keyref name="pIsAvailable" refer="IntegerOrBooleanKey">
			<xs:selector xpath=".//mstns:Node/mstns:pIsAvailable|.//mstns:IntReg/mstns:pIsAvailable|.//mstns:Enumeration/mstns:pIsAvailable|.//mstns:EnumEntry/mstns:pIsAvailable|.//mstns:Integer/mstns:pIsAvailable|.//mstns:MaskedIntReg/mstns:pIsAvailable|.//mstns:Register/mstns:pIsAvailable|.//mstns:IntSwissKnife/mstns:pIsAvailable|.//mstns:Category/mstns:pIsAvailable|.//mstns:TextDesc/mstns:pIsAvailable|.//mstns:IntKey/mstns:pIsAvailable|.//mstns:FloatReg/mstns:pIsAvailable|.//mstns:Float/mstns:pIsAvailable|.//mstns:StringReg/mstns:pIsAvailable|.//mstns:SwissKnife/mstns:pIsAvailable|.//mstns:Converter/mstns:pIsAvailable|.//mstns:Boolean/mstns:pIsAvailable|.//mstns:Command/mstns:pIsAvailable|.//mstns:StructReg/mstns:StructEntry/mstns:pIsAvailable|.//mstns:EnumEntry/mstns:pIsAvailable|.//mstns:Port/mstns:pIsAvailable|.//mstns:AdvFeatureLock/mstns:pIsAvailable|.//mstns:SmartFeature/mstns:pIsAvailable"/>
			<xs:field xpath="."/>
		</xs:keyref>
		<xs:keyref name="pIsLocked" refer="IntegerOrBooleanKey">
			<xs:selector xpath=".//mstns:Node/mstns:pIsLocked|.//mstns:IntReg/mstns:pIsLocked|.//mstns:Enumeration/mstns:pIsLocked|.//mstns:EnumEntry/mstns:pIsLocked|.//mstns:Integer/mstns:pIsLocked|.//mstns:MaskedIntReg/mstns:pIsLocked|.//mstns:Register/mstns:pIsLocked|.//mstns:IntSwissKnife/mstns:pIsLocked|.//mstns:Category/mstns:pIsLocked|.//mstns:TextDesc/mstns:pIsLocked|.//mstns:IntKey/mstns:pIsLocked|.//mstns:FloatReg/mstns:pIsLocked|.//mstns:Float/mstns:pIsLocked|.//mstns:StringReg/mstns:pIsLocked|.//mstns:SwissKnife/mstns:pIsLocked|.//mstns:Converter/mstns:pIsLocked|.//mstns:Boolean/mstns:pIsLocked|.//mstns:Command/mstns:pIsLocked|.//mstns:StructReg/mstns:StructEntry/mstns:pIsLocked|.//mstns:EnumEntry/mstns:pIsLocked|.//mstns:Port/mstns:pIsLocked|.//mstns:AdvFeatureLock/mstns:pIsLocked|.//mstns:SmartFeature/mstns:pIsLocked"/>
			<xs:field xpath="."/>
		</xs:keyref>
		<xs:keyref name="pVariable_Integer" refer="IntegerKey">
			<xs:selector xpath=".//mstns:IntSwissKnife/mstns:pVariable|.//mstns:IntConverter/mstns:pVariable"/>
			<xs:field xpath="."/>
		</xs:keyref>
		<xs:keyref name="pVariable_IntegerOrFloat" refer="IntegerOrFloatKey">
			<xs:selector xpath=".//mstns:SwissKnife/mstns:pVariable|.//mstns:Converter/mstns:pVariable"/>
			<xs:field xpath="."/>
		</xs:keyref>
		<xs:keyref name="pEnumEntry" refer="EnumEntryKey">
			<xs:selector xpath=".//mstns:Enumeration/mstns:pEnumEntry"/>
			<xs:field xpath="."/>
		</xs:keyref>
		<xs:keyref name="pChunkID" refer="StringKey">
			<xs:selector xpath=".//mstns:Port/mstns:pChunkID"/>
			<xs:field xpath="."/>
		</xs:keyref>
		<xs:keyref name="p1212Parser" refer="ConfRomKey">
			<xs:selector xpath=".//mstns:TextDesc/mstns:p1212Parser|.//mstns:IntKey/mstns:p1212Parser"/>
			<xs:field xpath="."/>
		</xs:keyref>
		<xs:keyref name="pCommandValue" refer="IntegerKey">
			<xs:selector xpath=".//mstns:Command/mstns:pCommandValue"/>
			<xs:field xpath="."/>
		</xs:keyref>
		<xs:keyref name="pAlias" refer="FeatureKey">
			<xs:selector xpath=".//mstns:*/mstns:pAlias"/>
			<xs:field xpath="."/>
		</xs:keyref>
	</xs:element>
	<xs:group name="NodesTemplate">
		<xs:sequence>
			<xs:element name="Node" type="NodeType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="Category" type="CategoryType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="Integer" type="IntegerType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="IntReg" type="IntRegType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="MaskedIntReg" type="MaskedIntRegType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="Boolean" type="BooleanType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="Command" type="CommandType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="Enumeration" type="EnumerationType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="EnumEntry" type="EnumEntryType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="Float" type="FloatType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="FloatReg" type="FloatRegType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="StringReg" type="StringRegType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="Register" type="RegisterType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="Converter" type="ConverterType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="IntConverter" type="IntConverterType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="SwissKnife" type="SwissKnifeType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="IntSwissKnife" type="SwissKnifeType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="Port" type="PortType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="ConfRom" type="ConfRomType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="TextDesc" type="TextDescType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="IntKey" type="IntKeyType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="AdvFeatureLock" type="DcamLockType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="SmartFeature" type="SmartFeatureAdrType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="Group" type="GroupType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="StructReg" type="StructRegType" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:group>
	<xs:complexType name="GroupType">
		<xs:sequence maxOccurs="unbounded">
			<xs:group ref="NodesTemplate"/>
		</xs:sequence>
		<xs:attribute name="Comment" type="xs:string" use="required"/>
	</xs:complexType>
	<xs:group name="NodeElementTemplate">
		<xs:sequence>
			<xs:element name="Extension" type="ExtensionType" minOccurs="0"/>
			<xs:element name="ToolTip" type="nonEmptyString_t" minOccurs="0"/>
			<xs:element name="Description" type="nonEmptyString_t" minOccurs="0"/>
			<xs:element name="DisplayName" type="xs:string" minOccurs="0"/>
			<xs:element name="Visibility" type="Visibility_t" default="Beginner" minOccurs="0"/>
			<xs:element name="EventID" type="Hex_t" minOccurs="0"/>
			<xs:element name="pIsImplemented" type="CName_t" minOccurs="0"/>
			<xs:element name="pIsAvailable" type="CName_t" minOccurs="0"/>
			<xs:element name="pIsLocked" type="CName_t" minOccurs="0"/>
			<xs:element name="ImposedAccessMode" type="Access_t" default="RW" minOccurs="0"/>
			<xs:element name="pAlias" type="CName_t" minOccurs="0"/>
		</xs:sequence>
	</xs:group>
	<xs:attributeGroup name="NodeAttributeTemplate">
		<xs:attribute name="Name" type="CName_t" use="required"/>
		<xs:attribute name="NameSpace" type="NameSpace_t" default="Custom"/>
	</xs:attributeGroup>
	<xs:group name="RegisterElementTemplate">
		<xs:sequence>
			<xs:group ref="NodeElementTemplate"/>
			<xs:element name="Streamable" type="YesNo_t" default="No" minOccurs="0"/>
			<xs:choice maxOccurs="unbounded">
				<xs:element name="Address" type="HexOrDecimal_t"/>
				<xs:element name="IntSwissKnife" type="SwissKnifeType"/>
				<xs:element name="pAddress" type="CName_t"/>
				<xs:element name="pIndex">
					<xs:complexType>
						<xs:simpleContent>
							<xs:extension base="xs:string">
								<xs:attribute name="Offset" type="HexOrDecimal_t" use="required"/>
							</xs:extension>
						</xs:simpleContent>
					</xs:complexType>
				</xs:element>
			</xs:choice>
			<xs:choice>
				<xs:element name="Length" type="xs:positiveInteger"/>
				<xs:element name="pLength" type="CName_t"/>
			</xs:choice>
			<xs:element name="AccessMode" type="Access_t" default="RO"/>
			<xs:element name="pPort" type="CName_t"/>
			<xs:element name="Cachable" type="CachingMode_t" default="WriteThrough" minOccurs="0"/>
			<xs:element name="PollingTime" type="xs:nonNegativeInteger" minOccurs="0"/>
			<xs:element name="pInvalidator" type="CName_t" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:group>
	<xs:complexType name="NodeType">
		<xs:sequence>
			<xs:group ref="NodeElementTemplate"/>
		</xs:sequence>
		<xs:attributeGroup ref="NodeAttributeTemplate"/>
	</xs:complexType>
	<xs:complexType name="CategoryType">
		<xs:sequence>
			<xs:group ref="NodeElementTemplate"/>
			<xs:element name="pFeature" type="CName_t" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attributeGroup ref="NodeAttributeTemplate"/>
	</xs:complexType>
	<xs:complexType name="IntegerType">
		<xs:sequence>
			<xs:group ref="NodeElementTemplate"/>
			<xs:element name="Streamable" type="YesNo_t" default="No" minOccurs="0"/>
			<xs:choice>
				<xs:element name="Value" type="HexOrDecimal_t"/>
				<xs:element name="pValue" type="CName_t"/>
			</xs:choice>
			<xs:choice minOccurs="0">
				<xs:element name="Min" type="xs:integer"/>
				<xs:element name="pMin" type="CName_t"/>
			</xs:choice>
			<xs:choice minOccurs="0">
				<xs:element name="Max" type="xs:integer"/>
				<xs:element name="pMax" type="CName_t"/>
			</xs:choice>
			<xs:choice minOccurs="0">
				<xs:element name="Inc" type="nonNegativeHexOrDecimal_t"/>
				<xs:element name="pInc" type="CName_t"/>
			</xs:choice>
			<xs:element name="Representation" type="Representation_t" minOccurs="0"/>
			<xs:element name="pSelected" type="CName_t" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attributeGroup ref="NodeAttributeTemplate"/>
	</xs:complexType>
	<xs:complexType name="IntRegType">
		<xs:sequence>
			<xs:group ref="RegisterElementTemplate"/>
			<xs:element name="Sign" type="Sign_t" default="Unsigned"/>
			<xs:element name="Endianess" type="Endianess_t" default="LittleEndian"/>
			<xs:element name="Representation" type="Representation_t" minOccurs="0"/>
			<xs:element name="pSelected" type="CName_t" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attributeGroup ref="NodeAttributeTemplate"/>
	</xs:complexType>
	<xs:complexType name="MaskedIntRegType">
		<xs:sequence>
			<xs:group ref="RegisterElementTemplate"/>
			<xs:choice>
				<xs:element name="Bit" type="xs:nonNegativeInteger"/>
				<xs:sequence>
					<xs:element name="LSB" type="xs:nonNegativeInteger"/>
					<xs:element name="MSB" type="xs:nonNegativeInteger"/>
				</xs:sequence>
			</xs:choice>
			<xs:element name="Sign" type="Sign_t" default="Unsigned" minOccurs="0"/>
			<xs:element name="Endianess" type="Endianess_t" default="LittleEndian"/>
			<xs:element name="Representation" type="Representation_t" minOccurs="0"/>
			<xs:element name="pSelected" type="CName_t" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attributeGroup ref="NodeAttributeTemplate"/>
	</xs:complexType>
	<xs:complexType name="StructRegType">
		<xs:sequence>
			<xs:group ref="RegisterElementTemplate"/>
			<xs:element name="Endianess" type="Endianess_t" default="LittleEndian"/>
			<xs:element name="StructEntry" type="StructEntryType" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="Comment" type="xs:string" use="required"/>
	</xs:complexType>
	<xs:complexType name="StructEntryType">
		<xs:sequence>
			<xs:element name="Extension" type="ExtensionType" minOccurs="0"/>
			<xs:element name="ToolTip" type="nonEmptyString_t" minOccurs="0"/>
			<xs:element name="DisplayName" type="xs:string" minOccurs="0"/>
			<xs:element name="Visibility" type="Visibility_t" default="Beginner" minOccurs="0"/>
			<xs:element name="pIsImplemented" type="CName_t" minOccurs="0"/>
			<xs:element name="pIsAvailable" type="CName_t" minOccurs="0"/>
			<xs:element name="pIsLocked" type="CName_t" minOccurs="0"/>
			<xs:element name="pInvalidator" type="CName_t" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="AccessMode" type="Access_t" minOccurs="0"/>
			<xs:element name="Cachable" type="CachingMode_t" default="WriteThrough" minOccurs="0"/>
			<xs:element name="PollingTime" type="xs:nonNegativeInteger" minOccurs="0"/>
			<xs:element name="Streamable" type="YesNo_t" default="No" minOccurs="0"/>
			<xs:choice>
				<xs:element name="Bit" type="xs:nonNegativeInteger"/>
				<xs:sequence>
					<xs:element name="LSB" type="xs:nonNegativeInteger"/>
					<xs:element name="MSB" type="xs:nonNegativeInteger"/>
				</xs:sequence>
			</xs:choice>
			<xs:element name="Sign" type="Sign_t" default="Unsigned" minOccurs="0"/>
			<xs:element name="pSelected" type="CName_t" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attributeGroup ref="NodeAttributeTemplate"/>
	</xs:complexType>
	<xs:complexType name="CommandType">
		<xs:sequence>
			<xs:group ref="NodeElementTemplate"/>
			<xs:choice>
				<xs:element name="Value" type="HexOrDecimal_t"/>
				<xs:element name="pValue" type="CName_t"/>
			</xs:choice>
			<xs:choice>
				<xs:element name="CommandValue" type="HexOrDecimal_t"/>
				<xs:element name="pCommandValue" type="CName_t"/>
			</xs:choice>
			<xs:element name="PollingTime" type="xs:nonNegativeInteger" minOccurs="0"/>
		</xs:sequence>
		<xs:attributeGroup ref="NodeAttributeTemplate"/>
	</xs:complexType>
	<xs:complexType name="BooleanType">
		<xs:sequence>
			<xs:group ref="NodeElementTemplate"/>
			<xs:element name="Streamable" type="YesNo_t" default="No" minOccurs="0"/>
			<xs:choice>
				<xs:element name="Value" type="xs:boolean"/>
				<xs:element name="pValue" type="CName_t"/>
			</xs:choice>
			<xs:element name="OnValue" type="xs:int" minOccurs="0"/>
			<xs:element name="OffValue" type="xs:int" minOccurs="0"/>
		</xs:sequence>
		<xs:attributeGroup ref="NodeAttributeTemplate"/>
	</xs:complexType>
	<xs:complexType name="FloatType">
		<xs:sequence>
			<xs:group ref="NodeElementTemplate"/>
			<xs:element name="Streamable" type="YesNo_t" default="No" minOccurs="0"/>
			<xs:choice>
				<xs:element name="pValue" type="CName_t"/>
				<xs:element name="Value" type="xs:float"/>
			</xs:choice>
			<xs:choice minOccurs="0">
				<xs:element name="Min" type="xs:float"/>
				<xs:element name="pMin" type="CName_t"/>
			</xs:choice>
			<xs:choice minOccurs="0">
				<xs:element name="Max" type="xs:float"/>
				<xs:element name="pMax" type="CName_t"/>
			</xs:choice>
			<xs:element name="Unit" type="nonEmptyString_t" minOccurs="0"/>
			<xs:element name="Representation" type="Representation_t" minOccurs="0"/>
		</xs:sequence>
		<xs:attributeGroup ref="NodeAttributeTemplate"/>
	</xs:complexType>
	<xs:complexType name="ConverterType">
		<xs:sequence>
			<xs:group ref="NodeElementTemplate"/>
			<xs:element name="Streamable" type="YesNo_t" default="No" minOccurs="0"/>
			<xs:sequence>
				<xs:element name="pVariable" minOccurs="0" maxOccurs="unbounded">
					<xs:complexType>
						<xs:simpleContent>
							<xs:extension base="xs:string">
								<xs:attribute name="Name" type="xs:string" use="required"/>
							</xs:extension>
						</xs:simpleContent>
					</xs:complexType>
				</xs:element>
				<xs:element name="FormulaTo" type="xs:string"/>
				<xs:element name="FormulaFrom" type="xs:string"/>
			</xs:sequence>
			<xs:choice>
				<xs:element name="pValue" type="CName_t"/>
			</xs:choice>
			<xs:element name="Unit" type="nonEmptyString_t" minOccurs="0"/>
			<xs:element name="Representation" type="Representation_t" minOccurs="0"/>
			<xs:element name="Slope" type="Slope_t" default="Automatic" minOccurs="0"/>
		</xs:sequence>
		<xs:attributeGroup ref="NodeAttributeTemplate"/>
	</xs:complexType>
	<xs:complexType name="IntConverterType">
		<xs:sequence>
			<xs:group ref="NodeElementTemplate"/>
			<xs:element name="Streamable" type="YesNo_t" default="No" minOccurs="0"/>
			<xs:sequence>
				<xs:element name="pVariable" minOccurs="0" maxOccurs="unbounded">
					<xs:complexType>
						<xs:simpleContent>
							<xs:extension base="xs:string">
								<xs:attribute name="Name" type="xs:string" use="required"/>
							</xs:extension>
						</xs:simpleContent>
					</xs:complexType>
				</xs:element>
				<xs:element name="FormulaTo" type="xs:string"/>
				<xs:element name="FormulaFrom" type="xs:string"/>
			</xs:sequence>
			<xs:choice>
				<xs:element name="pValue" type="CName_t"/>
			</xs:choice>
			<xs:element name="Unit" type="nonEmptyString_t" minOccurs="0"/>
			<xs:element name="Representation" type="Representation_t" minOccurs="0"/>
			<xs:element name="Slope" type="Slope_t"/>
		</xs:sequence>
		<xs:attributeGroup ref="NodeAttributeTemplate"/>
	</xs:complexType>
	<xs:complexType name="FloatRegType">
		<xs:sequence>
			<xs:group ref="RegisterElementTemplate"/>
			<xs:element name="Endianess" type="Endianess_t" default="LittleEndian"/>
			<xs:element name="Unit" type="nonEmptyString_t" minOccurs="0"/>
			<xs:element name="Representation" type="Representation_t" minOccurs="0"/>
		</xs:sequence>
		<xs:attributeGroup ref="NodeAttributeTemplate"/>
	</xs:complexType>
	<xs:complexType name="EnumerationType">
		<xs:sequence>
			<xs:group ref="NodeElementTemplate"/>
			<xs:element name="Streamable" type="YesNo_t" default="No" minOccurs="0"/>
			<xs:choice maxOccurs="unbounded">
				<xs:element name="EnumEntry" type="EnumEntryType"/>
				<xs:element name="pEnumEntry" type="CName_t"/>
			</xs:choice>
			<xs:choice>
				<xs:element name="Value" type="HexOrDecimal_t"/>
				<xs:element name="pValue" type="CName_t"/>
			</xs:choice>
			<xs:element name="pSelected" type="CName_t" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attributeGroup ref="NodeAttributeTemplate"/>
	</xs:complexType>
	<xs:complexType name="EnumEntryType">
		<xs:sequence>
			<xs:group ref="NodeElementTemplate"/>
			<xs:element name="Value" type="HexOrDecimal_t"/>
			<xs:element name="Symbolic" type="CName_t" minOccurs="0"/>
		</xs:sequence>
		<xs:attributeGroup ref="NodeAttributeTemplate"/>
		<!-- Note : this entry is normally generated by the pre-processor only -->
	</xs:complexType>
	<xs:complexType name="StringRegType">
		<xs:sequence>
			<!-- TODO should be implemented with RegisterElementTemplate; BUT: pLenght -->
			<xs:group ref="RegisterElementTemplate"/>
		</xs:sequence>
		<xs:attributeGroup ref="NodeAttributeTemplate"/>
	</xs:complexType>
	<xs:complexType name="RegisterType">
		<xs:sequence>
			<xs:group ref="RegisterElementTemplate"/>
		</xs:sequence>
		<xs:attributeGroup ref="NodeAttributeTemplate"/>
	</xs:complexType>
	<xs:complexType name="SwissKnifeType">
		<xs:sequence>
			<xs:group ref="NodeElementTemplate"/>
			<xs:element name="Streamable" type="YesNo_t" default="No" minOccurs="0"/>
			<xs:element name="pVariable" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:simpleContent>
						<xs:extension base="xs:string">
							<xs:attribute name="Name" type="xs:string" use="required"/>
						</xs:extension>
					</xs:simpleContent>
				</xs:complexType>
			</xs:element>
			<xs:element name="Formula" type="xs:string"/>
			<xs:element name="Representation" type="Representation_t" minOccurs="0"/>
		</xs:sequence>
		<xs:attributeGroup ref="NodeAttributeTemplate"/>
	</xs:complexType>
	<xs:complexType name="PortType">
		<xs:sequence>
			<xs:group ref="NodeElementTemplate"/>
			<xs:choice minOccurs="0">
				<xs:element name="ChunkID" type="Hex_t"/>
				<xs:element name="pChunkID" type="CName_t"/>
			</xs:choice>
			<xs:element name="SwapEndianess" type="YesNo_t" default="No" minOccurs="0"/>
		</xs:sequence>
		<xs:attributeGroup ref="NodeAttributeTemplate"/>
	</xs:complexType>
	<xs:complexType name="ConfRomType">
		<xs:sequence maxOccurs="unbounded">
			<xs:group ref="NodeElementTemplate"/>
			<xs:element name="Unit" type="HexOrDecimal_t"/>
			<xs:choice maxOccurs="unbounded">
				<xs:element name="Address" type="nonNegativeHexOrDecimal_t"/>
				<xs:element name="IntSwissKnife" type="SwissKnifeType"/>
				<xs:element name="pAddress" type="CName_t"/>
			</xs:choice>
			<xs:element name="Length" type="nonNegativeHexOrDecimal_t"/>
			<xs:element name="pPort" type="CName_t"/>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element name="TextDesc" type="Key_t"/>
				<xs:element name="IntKey" type="Key_t"/>
			</xs:choice>
		</xs:sequence>
		<xs:attributeGroup ref="NodeAttributeTemplate"/>
	</xs:complexType>
	<xs:complexType name="TextDescType">
		<xs:sequence>
			<xs:element name="p1212Parser" type="CName_t"/>
			<xs:element name="Key" type="HexOrDecimal_t"/>
		</xs:sequence>
		<xs:attributeGroup ref="NodeAttributeTemplate"/>
	</xs:complexType>
	<xs:complexType name="IntKeyType">
		<xs:sequence>
			<xs:element name="p1212Parser" type="CName_t"/>
			<xs:element name="Key" type="HexOrDecimal_t"/>
		</xs:sequence>
		<xs:attributeGroup ref="NodeAttributeTemplate"/>
	</xs:complexType>
	<xs:complexType name="DcamLockType">
		<xs:sequence>
			<xs:group ref="RegisterElementTemplate"/>
			<xs:element name="FeatureID" type="HexOrDecimal_t"/>
			<xs:element name="Timeout" type="xs:nonNegativeInteger" minOccurs="0"/>
		</xs:sequence>
		<xs:attributeGroup ref="NodeAttributeTemplate"/>
	</xs:complexType>
	<xs:complexType name="SmartFeatureAdrType">
		<xs:sequence>
			<xs:element name="FeatureID" type="xs:string"/>
			<xs:choice maxOccurs="unbounded">
				<xs:element name="Address" type="nonNegativeHexOrDecimal_t"/>
				<xs:element name="IntSwissKnife" type="SwissKnifeType"/>
				<xs:element name="pAddress" type="CName_t"/>
			</xs:choice>
			<xs:element name="pPort" type="CName_t"/>
			<xs:element name="pIsImplemented" type="CName_t" minOccurs="0"/>
			<xs:element name="pIsAvailable" type="CName_t" minOccurs="0"/>
		</xs:sequence>
		<xs:attributeGroup ref="NodeAttributeTemplate"/>
	</xs:complexType>
	<xs:complexType name="ExtensionType">
		<xs:sequence>
			<xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:simpleType name="CName_t">
		<xs:restriction base="xs:string">
			<xs:pattern value="[A-Za-z][0-9A-Za-z_]*"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="nonEmptyString_t">
		<xs:restriction base="xs:string">
			<xs:minLength value="1"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="CachingMode_t">
		<xs:restriction base="xs:string">
			<xs:enumeration value="WriteThrough">
				<xs:annotation>
					<xs:documentation>Cache on write and write into register</xs:documentation>
				</xs:annotation>
			</xs:enumeration>
			<xs:enumeration value="WriteAround">
				<xs:annotation>
					<xs:documentation>Write w/o cache, read updates cache</xs:documentation>
				</xs:annotation>
			</xs:enumeration>
			<xs:enumeration value="NoCache">
				<xs:annotation>
					<xs:documentation>Do not perform caching</xs:documentation>
				</xs:annotation>
			</xs:enumeration>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="HexOrDecimal_t">
		<xs:restriction base="xs:string">
			<xs:pattern value="(0[xX][0-9A-Fa-f]+)|(-?[0-9]+)"/>
			<!--<xs:pattern value="()|(0x[0-9A-Fa-f]+)"/>-->
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="Hex_t">
		<xs:restriction base="xs:string">
			<xs:pattern value="([0-9A-Fa-f][0-9A-Fa-f])+"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="nonNegativeHexOrDecimal_t">
		<xs:restriction base="xs:string">
			<xs:pattern value="(0[xX][0-9A-Fa-f]+)|[0-9]+"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="Sign_t">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Signed"/>
			<xs:enumeration value="Unsigned"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="SwissKnifeConversion_t">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute name="Input" type="CName_t" use="required"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<xs:simpleType name="NameSpace_t">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Custom"/>
			<xs:enumeration value="Standard"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="StandardNameSpace_t">
		<xs:restriction base="xs:string">
			<xs:enumeration value="None"/>
			<xs:enumeration value="IIDC"/>
			<xs:enumeration value="GEV"/>
			<xs:enumeration value="CL"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="Representation_t">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Linear"/>
			<xs:enumeration value="Logarithmic"/>
			<xs:enumeration value="Boolean"/>
			<xs:enumeration value="PureNumber"/>
			<xs:enumeration value="HexNumber"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="Access_t">
		<xs:restriction base="xs:string">
			<xs:enumeration value="RO"/>
			<xs:enumeration value="WO"/>
			<xs:enumeration value="RW"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="Endianess_t">
		<xs:restriction base="xs:string">
			<xs:enumeration value="LittleEndian"/>
			<xs:enumeration value="BigEndian"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="Visibility_t">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Beginner"/>
			<xs:enumeration value="Expert"/>
			<xs:enumeration value="Guru"/>
			<xs:enumeration value="Invisible"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="YesNo_t">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Yes"/>
			<xs:enumeration value="No"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="Slope_t">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Increasing"/>
			<xs:enumeration value="Decreasing"/>
			<xs:enumeration value="Varying"/>
			<xs:enumeration value="Automatic"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="Key_t">
		<xs:simpleContent>
			<xs:extension base="HexOrDecimal_t">
				<xs:attribute name="Name" type="CName_t" use="required"/>
				<xs:attribute name="NameSpace" type="NameSpace_t" default="Custom"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
</xs:schema>