<?xml version="1.0" encoding="utf-8"?>
<!--$Header$ -->
<!-- ***************************************************************************
*  (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" />
    <!-- This is allowed only for inject files not for target files -->
    <xs:attribute name="MergePriority" type="MergePriority_t"/>
  </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: pLength -->
      <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="MergePriority_t">
    <xs:restriction base="xs:integer">
      <xs:enumeration value="-1"/>
      <xs:enumeration value="0"/>
      <xs:enumeration value="+1"/>
    </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>