<?xml version="1.0" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  - - SoftGridOSD.xsd  
  - -	PURPOSE: XML Schema file for OSD files.  May be used for validation of OSD files, for example using "NOTEPAD XML".
  - -    VERSION: Last Change December 5, 2006
  - -    EDITOR:  Tim Mangan, TMurgent Technologies
  - -    HISTORY: Nov 28 - original version modified from Softricity.xsd from release 4.1.0.56
  - -		  Dec  5 - Added 2 Policies, plus some min/max Occurs.
  - -	DISCLAIMER: This is an edited version of the softricity.xsd that is shipped with the sequencer.  The (then current)
  - -		 shipping version is used in the sequencer, however it contains a number of syntax errors that, while not
  - -		 affecting the sequencer, cause syntax errors when loaded into other tools.
  - -		 In addition, there are places where a stricter XSD would help us in OSD verification.  
  - -		 For example, the sequencer handles OS VALUE types itself and it seemed to be nice to enumerate the correct
  - -		 list here.  Also, you really need a minimum of one implementation block in your OSD.
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
  -->

    <xs:element name="SOFTPKG">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="ABSTRACT" minOccurs="0" />
                <xs:element ref="ASSETS" minOccurs="0" />
                <xs:element ref="DEPENDENCY" minOccurs="0" maxOccurs="unbounded" />
                <xs:element ref="IMPLEMENTATION" minOccurs="1" maxOccurs="unbounded" />
                <xs:element ref="LICENSE" minOccurs="0" />
                <xs:element ref="SUITE" minOccurs="0" />
                <xs:element ref="TITLE" minOccurs="0" />
                <xs:element ref="MGMT_SHORTCUTLIST" minOccurs="0" />                
                <xs:element ref="MGMT_FILEASSOCIATIONS" minOccurs="0" />
            </xs:choice>
            <xs:attribute name="NAME" use="required" >
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:minLength value="1" />
                        <xs:maxLength value="64" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
            <xs:attribute name="VERSION"  use="required" >
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:minLength value="1" />
                        <xs:maxLength value="16" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
            <xs:attribute name="GUID" type="xs:string" use="required" />            
        </xs:complexType>
    </xs:element>
    <xs:element name="ABSTRACT" />
    <xs:element name="IMPLEMENTATION">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="CODEBASE" minOccurs="1" maxOccurs="unbounded" />
                <xs:element ref="DEPENDENCY" minOccurs="0" maxOccurs="unbounded" />
                <xs:element ref="DISKSIZE" minOccurs="0" />
                <xs:element ref="HARDWARE" minOccurs="0" maxOccurs="unbounded" />
                <xs:element ref="IMPLTYPE" minOccurs="0" />
                <xs:element ref="LANGUAGE" minOccurs="0" maxOccurs="unbounded" />
                <xs:element ref="MEMSIZE" minOccurs="0" />
                <xs:element ref="OS" minOccurs="0" maxOccurs="unbounded" />
                <xs:element ref="PROCESSOR" minOccurs="0" />
                <xs:element ref="RESOLUTION" minOccurs="0" />
                <xs:element ref="VIRTUALENV" minOccurs="0" />
                <xs:element ref="VM" minOccurs="0" />
                <xs:element ref="WORKINGDIR" minOccurs="0" maxOccurs="1" />
	
            </xs:choice>
        </xs:complexType>
    </xs:element>
    <xs:element name="DEPENDENCY">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="CLIENTVERSION" minOccurs="0" />
                <xs:element ref="CODEBASE" minOccurs="0" maxOccurs="0" />
                <xs:element ref="SCRIPT" minOccurs="0" />
                <xs:element ref="SOFTPKG" minOccurs="0" maxOccurs="0" />
            </xs:choice>
            <xs:attribute name="ACTION" default="Assert">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="Assert" />
                        <xs:enumeration value="Install" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
        </xs:complexType>
    </xs:element>
    <xs:element name="SCRIPT">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="HREF" minOccurs="0" maxOccurs="unbounded" />
                <xs:element ref="SCRIPTBODY" minOccurs="0" maxOccurs="unbounded" />
            </xs:choice>
            <xs:attribute name="EVENT">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="LAUNCH" />
                        <xs:enumeration value="SHUTDOWN" />
                        <xs:enumeration value="STREAM" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
            <xs:attribute name="PROTECT" default="TRUE">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="TRUE" />
                        <xs:enumeration value="FALSE" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
            <xs:attribute name="TIMING">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="PRE" />
                        <xs:enumeration value="POST" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
            <xs:attribute name="WAIT" default="TRUE">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="TRUE" />
                        <xs:enumeration value="FALSE" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
	    <xs:attribute name="SUCCESSRESULT" type="xs:integer" />
	    <xs:attribute name="ABORTRESULT" type="xs:integer" />		
        </xs:complexType>
    </xs:element>
    <xs:element name="HREF">
          <xs:simpleType>
              <xs:restriction base="xs:string">
                  <xs:minLength value="0" />
                  <xs:maxLength value="512" />
              </xs:restriction>
          </xs:simpleType>
    </xs:element>
    <xs:element name="SCRIPTBODY">
        <xs:complexType >
            <xs:simpleContent>
                <xs:extension base="xs:string">
                    <xs:attribute name="LANGUAGE">
                        <xs:simpleType>
                            <xs:restriction base="xs:string">
                                <xs:enumeration value="Batch" />
                                <xs:enumeration value="JScript" />
                                <!-- Reported as no longer supported <xs:enumeration value="Perl" /> -->
                            </xs:restriction>
                        </xs:simpleType>
                    </xs:attribute>
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>
    <xs:element name="CLIENTVERSION">
        <xs:complexType>
            <xs:attribute name="HREF" type="xs:string" />
            <xs:attribute name="VERSION" type="xs:string" use="required" />
        </xs:complexType>
    </xs:element>
    <xs:element name="HARDWARE" />
    <xs:element name="PARSEITEMS">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="PARSEITEM" minOccurs="0" maxOccurs="unbounded" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="PARSEITEM">
        <xs:complexType>
            <xs:attribute name="NAME" type="xs:string" use="required" />
            <xs:attribute name="PARSETYPE">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="BothExclude" />
                        <xs:enumeration value="BothInclude" />
                        <xs:enumeration value="FsExclude" />
                        <xs:enumeration value="FsInclude" />
                        <xs:enumeration value="RegExclude" />
                        <xs:enumeration value="RegInclude" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
            <xs:attribute name="VALUE" type="xs:string" />
        </xs:complexType>
    </xs:element>
    <xs:element name="PROCESSOR">
        <xs:complexType>
            <xs:attribute name="MINPROCSPEED" type="xs:nonNegativeInteger" />
            <xs:attribute name="MINPROCTYPE">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="386" />
                        <xs:enumeration value="486" />
                        <xs:enumeration value="PentiumPro" />
                        <xs:enumeration value="Pentium" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
        </xs:complexType>
    </xs:element>
    <xs:element name="RESOLUTION">
        <xs:complexType>
            <xs:attribute name="MINWIDTH" type="xs:nonNegativeInteger" />
            <xs:attribute name="MAXWIDTH" type="xs:nonNegativeInteger" />
            <xs:attribute name="MINHEIGHT" type="xs:nonNegativeInteger" />
            <xs:attribute name="MAXHEIGHT" type="xs:nonNegativeInteger" />
            <xs:attribute name="MINBITDEPTH" type="xs:nonNegativeInteger" />
            <xs:attribute name="MAXBITDEPTH" type="xs:nonNegativeInteger" />
        </xs:complexType>
    </xs:element>
    <xs:element name="WORKINGDIR">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:minLength value="0" />
                <xs:maxLength value="512" />
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    
    <xs:element name="ENVLIST">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="ENVIRONMENT" minOccurs="0" maxOccurs="unbounded" />
            </xs:choice>
        </xs:complexType>
    </xs:element>
    <xs:element name="ENVIRONMENT">
        <xs:complexType mixed="true">
            <xs:attribute name="VARIABLE" type="xs:string" use="required" />
        </xs:complexType>
    </xs:element>
    <xs:element name="ASSETS">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="AGEGROUP" minOccurs="0" maxOccurs="unbounded" />
                <xs:element ref="CATEGORY" minOccurs="0" maxOccurs="unbounded" />
                <xs:element ref="ISBN" minOccurs="0" />
                <xs:element ref="PUBLISHER" minOccurs="0" />
            </xs:choice>
        </xs:complexType>
    </xs:element>
    <xs:element name="AGEGROUP" />
    <xs:element name="ISBN" />
    <xs:element name="PUBLISHER">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="ADDRESS" minOccurs="0" maxOccurs="unbounded" />
                <xs:element ref="CONTACT" minOccurs="0" maxOccurs="unbounded" />
                <xs:element ref="DESCRIPTION" minOccurs="0" />
                <xs:element ref="NAME" minOccurs="0" />
                <xs:element ref="REMARK" minOccurs="0" />
            </xs:choice>
        </xs:complexType>
    </xs:element>
    <xs:element name="CATEGORY">
        <xs:complexType mixed="true">
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="DESCRIPTION" />
            </xs:choice>
        </xs:complexType>
    </xs:element>
    <xs:element name="NAME">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:minLength value="0" />
                <xs:maxLength value="256" />
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    
    <xs:element name="DESCRIPTION" />
    <xs:element name="REMARK" />
    <xs:element name="ADDRESS">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="ADDRESS1" minOccurs="0" />
                <xs:element ref="ADDRESS2" minOccurs="0" />
                <xs:element ref="CITY" minOccurs="0" />
                <xs:element ref="REGION" minOccurs="0" />
                <xs:element ref="POSTAL" minOccurs="0" />
                <xs:element ref="COUNTRY" minOccurs="0" />
            </xs:choice>
        </xs:complexType>
    </xs:element>
    <xs:element name="CONTACT">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="NAME" minOccurs="0" />
                <xs:element ref="ADDRESS" minOccurs="0" maxOccurs="unbounded" />
                <xs:element ref="EMAIL" minOccurs="0" maxOccurs="unbounded" />
                <xs:element ref="PHONE" minOccurs="0" maxOccurs="unbounded" />
            </xs:choice>
        </xs:complexType>
    </xs:element>
    <xs:element name="ADDRESS1" />
    <xs:element name="ADDRESS2" />
    <xs:element name="CITY" />
    <xs:element name="REGION" />
    <xs:element name="POSTAL" />
    <xs:element name="COUNTRY" />
    <xs:element name="PHONE" />
    <xs:element name="EMAIL" />
    <xs:element name="TYPE" />
    <xs:element name="CODEBASE">
        <xs:complexType>
            <xs:attribute name="FILENAME">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:minLength value="0" />
                        <xs:maxLength value="512" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
            <xs:attribute name="PARAMETERS" type="xs:string" />
            <xs:attribute name="GUID" type="xs:string" />
            <xs:attribute name="HREF"  use="required" >
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:minLength value="1" />
                        <xs:maxLength value="512" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
            <xs:attribute name="SIZE" type="xs:nonNegativeInteger" />
            <xs:attribute name="SYSGUARDFILE" type="xs:string" />
        </xs:complexType>
    </xs:element>
    <xs:element name="DISKSIZE">
        <xs:complexType>
            <xs:attribute name="VALUE" type="xs:nonNegativeInteger" use="required" />
        </xs:complexType>
    </xs:element>
    <xs:element name="IMPLTYPE">
        <xs:complexType>
            <xs:attribute name="VALUE">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="Java" />
                        <xs:enumeration value="Win16" />
                        <xs:enumeration value="Win32" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
        </xs:complexType>
    </xs:element>
    <xs:element name="LANGUAGE">
        <xs:complexType>
            <xs:attribute name="VALUE" type="xs:string" use="required" />
        </xs:complexType>
    </xs:element>
    <xs:element name="LICENSE">
        <xs:complexType>
            <xs:attribute name="HREF" use="required" >
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:minLength value="1" />
                        <xs:maxLength value="512" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
        </xs:complexType>
    </xs:element>
    <xs:element name="MEMSIZE">
        <xs:complexType>
            <xs:attribute name="VALUE" type="xs:nonNegativeInteger" use="required" />
        </xs:complexType>
    </xs:element>
    <xs:element name="OS">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="OSVERSION" />
            </xs:choice>
            <xs:attribute name="VALUE" use="required" >
		<xs:simpleType>
			<xs:restriction base="xs:string">
				<!-- Uncomment these lines to achieve strict matching on these values -->
				<xs:enumeration value="Win2KTS" />
				<xs:enumeration value="Win2K" />
				<xs:enumeration value="Win2KSvr" />
				<xs:enumeration value="WinXP" />
				<xs:enumeration value="Win2003Svr" />
				<xs:enumeration value="Win2003TS" />
				<xs:enumeration value="WinVista" />
				<xs:enumeration value="Win2KTS" />
				<!-- -->
			</xs:restriction>
		</xs:simpleType>
	    </xs:attribute>
        </xs:complexType>
    </xs:element>
    <xs:element name="OSVERSION">
        <xs:complexType>
            <xs:attribute name="VALUE" type="xs:string" use="required" />
        </xs:complexType>
    </xs:element>
    <xs:element name="VIRTUALENV">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="ENVLIST" minOccurs="0" />
                <xs:element ref="PARSEITEMS" minOccurs="0" />
                <xs:element ref="REGISTRY" minOccurs="0" />
		<xs:element ref="POLICIES" minOccurs="0" />
            </xs:choice>
            <xs:attribute name="TERMINATECHILDREN" default="FALSE">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="FALSE" />
                        <xs:enumeration value="TRUE" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
            <xs:attribute name="PERSESSION" default="FALSE">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="FALSE" />
                        <xs:enumeration value="TRUE" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
        </xs:complexType>
    </xs:element>
    <xs:element name="POLICIES">
	<xs:complexType>
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element ref="LOCAL_INTERACTION_ALLOWED" minOccurs="0" />
			<xs:element ref="VIRTUAL_SERVICES_DISABLED" minOccurs="0" />
		</xs:choice>
	</xs:complexType>
    </xs:element>
     <xs:element name="LOCAL_INTERACTION_ALLOWED"  >
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="FALSE" />
                        <xs:enumeration value="TRUE" />
                    </xs:restriction>
                </xs:simpleType>
    </xs:element>
     <xs:element ref="VIRTUAL_SERVICES_DISABLED" >
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="FALSE" />
                        <xs:enumeration value="TRUE" />
                    </xs:restriction>
                </xs:simpleType>
    </xs:element>
   <xs:element name="REGISTRY">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="REGKEY" />
            </xs:choice>
        </xs:complexType>
    </xs:element>
    <xs:element name="REGKEY">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="REGVALUE" />
            </xs:choice>
            <xs:attribute name="HIVE" type="xs:string" />
            <xs:attribute name="KEY" type="xs:string" />
        </xs:complexType>
    </xs:element>
    <xs:element name="REGVALUE">
        <xs:complexType >
            <xs:simpleContent>
                <xs:extension base="xs:string">
                    <xs:attribute name="NAME" type="xs:string" />
                    <xs:attribute name="REGTYPE">
                        <xs:simpleType>
                            <xs:restriction base="xs:string">
                                <xs:enumeration value="REG_BINARY" />
                                <xs:enumeration value="REG_DWORD" />
                                <xs:enumeration value="REG_DWORD_BIG_ENDIAN" />
                                <xs:enumeration value="REG_DWORD_LITTLE_ENDIAN" />
                                <xs:enumeration value="REG_LINK" />
                                <xs:enumeration value="REG_MULTI_SZ" />
                                <xs:enumeration value="REG_NONE" />
                                <xs:enumeration value="REG_QWORD" />
                                <xs:enumeration value="REG_QWORD_BIG_ENDIAN" />
                                <xs:enumeration value="REG_QWORD_LITTLE_ENDIAN" />
                                <xs:enumeration value="REG_RESOURCE_LIST" />
                                <xs:enumeration value="REG_SZ" />
                            </xs:restriction>
                        </xs:simpleType>
                    </xs:attribute>
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>
    <xs:element name="VM">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="SUBSYSTEM" />
            </xs:choice>
            <xs:attribute name="VALUE" default="Win32">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="Win16" />
                        <xs:enumeration value="Win32" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
        </xs:complexType>
    </xs:element>
    <xs:element name="SUBSYSTEM">
        <xs:complexType>
            <xs:attribute name="VALUE" use="required">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="windows" />
                        <xs:enumeration value="console" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
        </xs:complexType>
    </xs:element>
    <xs:element name="TITLE" />
    <xs:element name="SUITE">
        <xs:complexType>
            <xs:attribute name="NAME" use="required" >
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:minLength value="1" />
                        <xs:maxLength value="128" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
        </xs:complexType>
    </xs:element>
    <xs:element name="MGMT_SHORTCUTLIST">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="SHORTCUT" minOccurs="0" maxOccurs="unbounded" />
            </xs:choice>            
        </xs:complexType>
    </xs:element>   
    <xs:element name="SHORTCUT">
        <xs:complexType>
            <xs:attribute name="LOCATION"  use="required"  >
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:minLength value="1" />
                        <xs:maxLength value="512" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
            <xs:attribute name="ICON"  use="required" >
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:minLength value="1" />
                        <xs:maxLength value="512" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>            
            <xs:attribute name="DISPLAY"  use="required" >
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:minLength value="1" />
                        <xs:maxLength value="512" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>            
            <xs:attribute name="OVERRIDDEN" type="xs:string"/>                                          
            <xs:attribute name="FILENAME" type="xs:string"/>             
        </xs:complexType>
    </xs:element>   
    <xs:element name="MGMT_FILEASSOCIATIONS">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="PROGIDLIST" minOccurs="1" maxOccurs="1" />
                <xs:element ref="FILEEXTENSIONLIST" minOccurs="1" maxOccurs="1" />
            </xs:choice>
        </xs:complexType>
    </xs:element>     
    <xs:element name="PROGIDLIST">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="PROGID" minOccurs="0" maxOccurs="unbounded" />
            </xs:choice>
        </xs:complexType>
    </xs:element>           
    <xs:element name="PROGID">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="ICON" minOccurs="1" maxOccurs="1" />
                <xs:element ref="SHELLCOMMANDLIST" minOccurs="1" maxOccurs="1" />
            </xs:choice>
            <xs:attribute name="ID"  use="required" >
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:minLength value="1" />
                        <xs:maxLength value="512" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
            <xs:attribute name="FRIENDLYNAME"  use="required" >
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:minLength value="1" />
                        <xs:maxLength value="64" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>            
            <xs:attribute name="EDITFLAGS" type="xs:integer" default="0"/>            
            <xs:attribute name="OVERRIDDEN" type="xs:string"/>               
        </xs:complexType>
    </xs:element>
    <xs:element name="ICON">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:minLength value="1" />
                <xs:maxLength value="512" />
            </xs:restriction>
        </xs:simpleType>
    </xs:element>     
    <xs:element name="SHELLCOMMANDLIST">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="SHELLCOMMAND" minOccurs="0" maxOccurs="unbounded" />
            </xs:choice>
						<xs:attribute name="DEFAULT"  default="" >
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:minLength value="0" />
                        <xs:maxLength value="256" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>            
        </xs:complexType>
    </xs:element>
    <xs:element name="SHELLCOMMAND">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="DDEEXEC" minOccurs="1" maxOccurs="1" />
            </xs:choice>
	    <xs:attribute name="NAME"  use="required"  >
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:minLength value="1" />
                        <xs:maxLength value="128" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
	    <xs:attribute name="FRIENDLYNAME"   >
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:minLength value="1" />
                        <xs:maxLength value="128" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>             
	    <xs:attribute name="PARAMS"  default="" >
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:minLength value="0" />
                        <xs:maxLength value="256" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>                         
            <xs:attribute name="OVERRIDDEN" type="xs:string"/>                           
        </xs:complexType>
    </xs:element>   
    <xs:element name="DDEEXEC">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="COMMAND" minOccurs="1" maxOccurs="1" />
                <xs:element ref="IFEXEC" minOccurs="1" maxOccurs="1" />                
            </xs:choice>
						<xs:attribute name="APPLICATION"  use="required"  >
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:minLength value="0" />
                        <xs:maxLength value="256" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute> 
						<xs:attribute name="TOPIC"  default=" " >
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:minLength value="0" />
                        <xs:maxLength value="256" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>                         
        </xs:complexType>
    </xs:element>        
    <xs:element name="COMMAND">
        <xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:minLength value="0" />
            <xs:maxLength value="512" />
          </xs:restriction>
         </xs:simpleType>
    </xs:element>         
    <xs:element name="IFEXEC">
        <xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:minLength value="0" />
            <xs:maxLength value="512" />
          </xs:restriction>
         </xs:simpleType>
    </xs:element>                     
    <xs:element name="FILEEXTENSIONLIST">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="FILEEXTENSION" minOccurs="0" maxOccurs="unbounded" />
            </xs:choice>
        </xs:complexType>
    </xs:element>            
		<xs:element name="FILEEXTENSION">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="SHELLNEW" minOccurs="0" maxOccurs="1" />
            </xs:choice>
						<xs:attribute name="EXT"  use="required" >
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:minLength value="1" />
                        <xs:maxLength value="16" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
						<xs:attribute name="PROGID"  use="required"  >
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:minLength value="1" />
                        <xs:maxLength value="256" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>             
						<xs:attribute name="PERCEIVEDTYPE"  default="" >
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:minLength value="0" />
                        <xs:maxLength value="64" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>    
						<xs:attribute name="CONTENTTYPE"  default="" >
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:minLength value="0" />
                        <xs:maxLength value="128" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>                                              
            <xs:attribute name="OVERRIDDEN" type="xs:string"/>                           
        </xs:complexType>
    </xs:element>                      
		<xs:element name="SHELLNEW">
        <xs:complexType>
            <xs:attribute name="ENABLED" type="xs:string"/>                        
        </xs:complexType>
    </xs:element>   
                            
</xs:schema>