Share via


5.1 The InfoPath XSF XSD file

The following XML schema defines the types and elements used in the form definition (.xsf) file. The types and elements belong to the XSF namespace (http://schemas.microsoft.com/office/infopath/2003/solutionDefinition), as specified in section 2.2.1.

The XML schema is extended by the additional types and elements in the XSF2 and XSF3 extensions to the form definition (.xsf) file, as specified in sections 5.2 and 5.3.

The XML schema for the form definition (.xsf) file can also be found at the location specified by [MSDN-XSF].

 <?xml version="1.0" encoding="UTF-8" ?>
 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsf="http://schemas.microsoft.com/office/infopath/2003/solutionDefinition"
 targetNamespace="http://schemas.microsoft.com/office/infopath/2003/solutionDefinition" elementFormDefault="qualified"
   attributeFormDefault="unqualified">
   <!-- xdTitle type -->
   <xsd:simpleType name="xdTitle">
     <xsd:restriction base="xsd:string">
       <xsd:minLength value="1" />
       <xsd:maxLength value="255" />
       <xsd:pattern value="([^\p{Z}\p{Cc}\p{Cf}\p{Cn}])(([^\p{Zl}\p{Zp}\p{Cc}])*([^\p{Z}\p{Cc}\p{Cf}\p{Cn}]))?" />
     </xsd:restriction>
   </xsd:simpleType>
   <!-- xdViewName type -->
   <xsd:simpleType name="xdViewName">
     <xsd:restriction base="xsd:string">
       <xsd:minLength value="1" />
       <xsd:maxLength value="255" />
       <xsd:pattern value="([^\p{Z}\p{C}/\\#&amp;&quot;&gt;&lt;])(([^\p{Zl}\p{Zp}\p{C}/\\#&amp;&quot;&gt;&lt;])*([^\p{Z}\p{C}/\\#&amp;&quot;&gt;&lt;]))?" />
     </xsd:restriction>
   </xsd:simpleType>
   <!-- xdRoleName type -->
   <!-- uses xdViewName as base -->
   <xsd:simpleType name="xdRoleName">
     <xsd:restriction base="xsf:xdViewName"></xsd:restriction>
   </xsd:simpleType>
   <!-- xdYesNo type -->
   <xsd:simpleType name="xdYesNo">
     <xsd:restriction base="xsd:NMTOKEN">
       <xsd:enumeration value="yes" />
       <xsd:enumeration value="no" />
     </xsd:restriction>
   </xsd:simpleType>
   <!-- xdEnabledDisabled type -->
   <xsd:simpleType name="xdEnabledDisabled">
     <xsd:restriction base="xsd:NMTOKEN">
       <xsd:enumeration value="enabled" />
       <xsd:enumeration value="disabled" />
     </xsd:restriction>
   </xsd:simpleType>
   <!-- xdManualAuto type -->
   <xsd:simpleType name="xdManualAuto">
     <xsd:restriction base="xsd:NMTOKEN">
       <xsd:enumeration value="manual" />
       <xsd:enumeration value="automatic" />
     </xsd:restriction>
   </xsd:simpleType>
   <!-- xdExpressionLiteral type -->
   <xsd:simpleType name="xdExpressionLiteral">
     <xsd:restriction base="xsd:NMTOKEN">
       <xsd:enumeration value="expression" />
       <xsd:enumeration value="literal" />
     </xsd:restriction>
   </xsd:simpleType>
   <!-- xdFileName type -->
   <xsd:simpleType name="xdFileName">
     <xsd:restriction base="xsd:string">
       <xsd:minLength value="1" />
       <xsd:maxLength value="64" />
     </xsd:restriction>
   </xsd:simpleType>
   <!-- xdScriptLanguage type -->
   <xsd:simpleType name="xdScriptLanguage">
     <xsd:restriction base="xsd:NMTOKEN">
       <xsd:pattern value="((([Jj][Aa][Vv][Aa]|(([Jj])|([Vv][Bb])))([Ss][Cc][Rr][Ii][Pp][Tt]))([.][Ee][Nn][Cc][Oo][Dd][Ee]))|(([Jj][Aa][Vv][Aa]|(([Jj])|([Vv][Bb])))([Ss][Cc][Rr][Ii][Pp][Tt]))|([Mm][Aa][Nn][Aa][Gg][Ee][Dd][Cc][Oo][Dd][Ee])" />
     </xsd:restriction>
   </xsd:simpleType>
   <!-- xdSolutionVersion type -->
   <xsd:simpleType name="xdSolutionVersion">
     <xsd:restriction base="xsd:string">
       <xsd:pattern value="(([0-9]{1,4}.){3}[0-9]{1,4})" />
     </xsd:restriction>
   </xsd:simpleType>
   <!-- xdEmptyString type -->
   <xsd:simpleType name="xdEmptyString">
     <xsd:restriction base="xsd:string">
       <xsd:maxLength value="0" />
     </xsd:restriction>
   </xsd:simpleType>
   <!-- xdErrorMessage type -->
   <xsd:simpleType name="xdErrorMessage">
     <xsd:restriction base="xsd:string">
       <xsd:maxLength value="1023" />
     </xsd:restriction>
   </xsd:simpleType>
   <!-- xdDesignMode type -->
   <xsd:simpleType name="xdDesignMode">
     <xsd:restriction base="xsd:NMTOKEN">
       <xsd:enumeration value="normal" />
       <xsd:enumeration value="protected" />
     </xsd:restriction>
   </xsd:simpleType>
   <!-- xdTrustLevel type -->
   <xsd:simpleType name="xdTrustLevel">
     <xsd:restriction base="xsd:string">
       <xsd:enumeration value="restricted" />
       <xsd:enumeration value="domain" />
     </xsd:restriction>
   </xsd:simpleType>
   <!-- xdSignedDataBlockName type -->
   <xsd:simpleType name="xdSignedDataBlockName">
     <xsd:restriction base="xsd:ID">
       <xsd:minLength value="1" />
       <xsd:maxLength value="255" />
     </xsd:restriction>
   </xsd:simpleType>
   <!-- xdSignedDataBlockMessage type -->
   <xsd:simpleType name="xdSignedDataBlockMessage">
     <xsd:restriction base="xsd:string">
       <xsd:maxLength value="255" />
     </xsd:restriction>
   </xsd:simpleType>
   <!-- xdSignatureRelationEnum type -->
   <xsd:simpleType name="xdSignatureRelationEnum">
     <xsd:restriction base="xsd:string">
       <xsd:enumeration value="countersign" />
       <xsd:enumeration value="cosign" />
       <xsd:enumeration value="single" />
     </xsd:restriction>
   </xsd:simpleType>
   <!-- xdSignSignatureLineRuleEnum type -->
   <xsd:simpleType name="xdSignSignatureLineRuleEnum">
     <xsd:restriction base="xsd:string">
       <xsd:enumeration value="suggestedSignerName" />
       <xsd:enumeration value="suggestedSignerEmail" />
       <xsd:enumeration value="signatureLineId" />
     </xsd:restriction>
   </xsd:simpleType>
     <!-- xdHWSname type -->
   <xsd:simpleType name="xdHWSname">
     <xsd:restriction base="xsd:NCName">
       <xsd:pattern value="[^-^\.^\\^\[^\]^\|^\+^?^\*^@^\{^\}^\(^\)^&gt;^&lt;^=^;^,]*" />
     </xsd:restriction>
   </xsd:simpleType>
   <!-- xdHWSCaption type -->
   <xsd:simpleType name="xdHWSCaption">
     <xsd:restriction base="xsd:string">
       <xsd:minLength value="1" />
       <xsd:maxLength value="255" />
     </xsd:restriction>
   </xsd:simpleType>
   <!-- xDocumentClass -->
   <xsd:element name="xDocumentClass">
     <xsd:complexType>
       <xsd:all>
         <xsd:element ref="xsf:package" minOccurs="1" />
         <xsd:element ref="xsf:permissions" minOccurs="0" />
         <xsd:element ref="xsf:views" minOccurs="1" />
         <xsd:element ref="xsf:hwsWorkflow" minOccurs="0" />
         <xsd:element ref="xsf:externalViews" minOccurs="0" />
         <!-- Scripts is Client-Only -->
         <xsd:element ref="xsf:scripts" minOccurs="0" />
         <xsd:element ref="xsf:schemaErrorMessages" minOccurs="0" />
         <xsd:element ref="xsf:documentSchemas" minOccurs="0" />
         <xsd:element ref="xsf:applicationParameters" minOccurs="0" />
         <xsd:element ref="xsf:featureRestrictions" minOccurs="0" />
         <xsd:element ref="xsf:fileNew" minOccurs="0" />
         <xsd:element ref="xsf:customValidation" minOccurs="0" />
         <xsd:element ref="xsf:domEventHandlers" minOccurs="0" />
         <xsd:element ref="xsf:importParameters" minOccurs="0" />
         <xsd:element ref="xsf:listProperties" minOccurs="0" />
         <xsd:element ref="xsf:taskpane" minOccurs="0" />
         <xsd:element ref="xsf:documentSignatures" minOccurs="0" />
         <xsd:element ref="xsf:dataObjects" minOccurs="0" />
         <xsd:element ref="xsf:dataAdapters" minOccurs="0" />
         <xsd:element ref="xsf:query" minOccurs="0" />
         <xsd:element ref="xsf:submit" minOccurs="0" />
         <xsd:element ref="xsf:save" minOccurs="0" />
         <xsd:element ref="xsf:roles" minOccurs="0" />
         <xsd:element ref="xsf:onLoad" minOccurs="0" />
         <xsd:element ref="xsf:documentVersionUpgrade" minOccurs="0" />
         <xsd:element ref="xsf:extensions" minOccurs="0" />
         <xsd:element ref="xsf:ruleSets" minOccurs="0" />
         <xsd:element ref="xsf:calculations" minOccurs="0" />
       </xsd:all>
       <xsd:attribute name="name" type="xsd:string" use="optional" />
       <xsd:attribute name="author" type="xsd:string" use="optional" />
       <xsd:attribute name="description" use="optional">
         <xsd:simpleType>
           <xsd:restriction base="xsd:string">
             <xsd:maxLength value="255" />
           </xsd:restriction>
         </xsd:simpleType>
       </xsd:attribute>
       <xsd:attribute name="solutionVersion" type="xsf:xdSolutionVersion" use="optional" />
       <xsd:attribute name="productVersion" type="xsd:string" use="optional" />
       <xsd:attribute name="solutionFormatVersion" type="xsf:xdSolutionVersion" use="required" />
       <xsd:attribute name="dataFormSolution" type="xsf:xdYesNo" use="optional" />
       <xsd:attribute name="requireFullTrust" type="xsf:xdYesNo" use="optional" />
       <xsd:attribute name="trustLevel" type="xsf:xdTrustLevel" use="optional" />
       <xsd:attribute name="trustSetting" type="xsf:xdManualAuto" use="optional" />
       <xsd:attribute name="publishUrl" type="xsd:string" use="optional" />
     </xsd:complexType>
     <xsd:key name="view_name_key">
       <xsd:selector xpath="./xsf:views/xsf:view" />
       <xsd:field xpath="@name" />
     </xsd:key>
     <xsd:key name="externalView_name_key">
       <xsd:selector xpath="./xsf:externalViews/xsf:externalView" />
       <xsd:field xpath="@name" />
     </xsd:key>
     <xsd:key name="view_or_externalView_name_key">
       <xsd:selector xpath="./xsf:views/xsf:view | ./xsf:externalViews/xsf:externalView" />
       <xsd:field xpath="@name" />
     </xsd:key>
     <xsd:key name="ruleset_name_key">
       <xsd:selector xpath="./xsf:ruleSets/xsf:ruleSet" />
       <xsd:field xpath="@name" />
     </xsd:key>
     <xsd:key name="dataObject_name_key">
       <xsd:selector xpath="./xsf:dataObjects/xsf:dataObject" />
       <xsd:field xpath="@name" />
     </xsd:key>
     <xsd:unique name="adapter_name_unique">
       <xsd:selector xpath="./xsf:dataObjects/xsf:dataObject/xsf:query/* | ./xsf:query/* | ./xsf:dataAdapters/* | ./xsf:submit/xsf:webServiceAdapter | ./xsf:submit/xsf:davAdapter | ./xsf:submit/xsf:emailAdapter | ./xsf:submit/xsf:submitToHostAdapter" />
       <xsd:field xpath="@name" />
     </xsd:unique>
     <xsd:key name="adapter_name_key">
       <xsd:selector xpath="./xsf:dataAdapters/*" />
       <xsd:field xpath="@name" />
     </xsd:key>
     <xsd:unique name="view_external_name_unique">
       <xsd:selector xpath="./xsf:views/xsf:view | ./xsf:externalViews/xsf:externalView" />
       <xsd:field xpath="@name" />
     </xsd:unique>
   </xsd:element>
   <!-- schemaErrorMessages -->
   <xsd:element name="schemaErrorMessages">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:override" minOccurs="0" maxOccurs="unbounded" />
       </xsd:sequence>
     </xsd:complexType>
   </xsd:element>
   <!-- override -->
   <xsd:element name="override">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:errorMessage" />
       </xsd:sequence>
       <xsd:attribute name="match" type="xsd:string" use="required" />
     </xsd:complexType>
   </xsd:element>
   <!-- applicationParameters -->
   <xsd:element name="applicationParameters">
     <xsd:complexType>
       <xsd:all>
         <xsd:element ref="xsf:solutionProperties" minOccurs="0" />
       </xsd:all>
       <xsd:attribute name="application" use="required">
         <xsd:simpleType>
           <xsd:restriction base="xsd:string">
             <xsd:enumeration value="InfoPath Design Mode" />
           </xsd:restriction>
         </xsd:simpleType>
       </xsd:attribute>
     </xsd:complexType>
   </xsd:element>
   <!-- solutionProperties -->
   <xsd:element name="solutionProperties">
     <xsd:complexType>
       <xsd:attribute name="allowCustomization" type="xsf:xdYesNo" use="optional" />
       <xsd:attribute name="lastOpenView" use="optional" />
       <xsd:attribute name="scriptLanguage" type="xsf:xdScriptLanguage" use="optional" />
       <xsd:attribute name="automaticallyCreateNodes" type="xsf:xdYesNo" use="optional" />
       <xsd:attribute name="lastVersionNeedingTransform" type="xsf:xdSolutionVersion" use="optional" />
       <xsd:attribute name="fullyEditableNamespace" type="xsd:anyURI" use="optional" />
       <xsd:attribute name="publishSaveUrl" type="xsd:string" use="optional" />
     </xsd:complexType>
   </xsd:element>
   <!-- featureRestrictions -->
   <xsd:element name="featureRestrictions">
     <xsd:complexType>
       <xsd:all>
         <xsd:element name="save" minOccurs="0">
           <xsd:complexType>
             <xsd:attribute name="ui" type="xsf:xdEnabledDisabled" use="required" />
           </xsd:complexType>
         </xsd:element>
         <xsd:element ref="xsf:exportToWeb" minOccurs="0" />
         <xsd:element ref="xsf:exportToExcel" minOccurs="0" />
         <xsd:element ref="xsf:print" minOccurs="0" />
         <xsd:element ref="xsf:sendMail" minOccurs="0" />
         <xsd:element ref="xsf:autoRecovery" minOccurs="0" />
       </xsd:all>
     </xsd:complexType>
   </xsd:element>
   <!-- exportToWeb -->
   <xsd:element name="exportToWeb">
     <xsd:complexType>
       <xsd:attribute name="ui" type="xsf:xdEnabledDisabled" use="required" />
     </xsd:complexType>
   </xsd:element>
   <!-- exportToExcel -->
   <xsd:element name="exportToExcel">
     <xsd:complexType>
       <xsd:attribute name="ui" type="xsf:xdEnabledDisabled" use="required" />
     </xsd:complexType>
   </xsd:element>
   <!-- print -->
   <xsd:element name="print">
     <xsd:complexType>
       <xsd:attribute name="ui" type="xsf:xdEnabledDisabled" use="required" />
     </xsd:complexType>
   </xsd:element>
   <!-- sendMail -->
   <xsd:element name="sendMail">
     <xsd:complexType>
       <xsd:attribute name="ui" type="xsf:xdEnabledDisabled" use="required" />
     </xsd:complexType>
   </xsd:element>
   <!-- autoRecovery -->
   <xsd:element name="autoRecovery">
     <xsd:complexType>
       <xsd:attribute name="feature" type="xsf:xdEnabledDisabled" use="required" />
     </xsd:complexType>
   </xsd:element>
   <!-- query -->
   <xsd:element name="query">
     <xsd:complexType>
       <xsd:choice>
         <xsd:element ref="xsf:queryAction" />
         <xsd:element ref="xsf:adoAdapter" />
         <xsd:element ref="xsf:webServiceAdapter" />
         <xsd:element ref="xsf:xmlFileAdapter" />
         <xsd:element ref="xsf:sharepointListAdapter" />
         <xsd:element ref="xsf:sharepointListAdapterRW" />
         <xsd:element ref="xsf:bdcAdapter" />
       </xsd:choice>
     </xsd:complexType>
   </xsd:element>
   <!-- scripts -->
   <xsd:element name="scripts">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:script" minOccurs="0" maxOccurs="unbounded" />
       </xsd:sequence>
       <xsd:attribute name="language" type="xsf:xdScriptLanguage" use="required" />
       <xsd:attribute name="enforceScriptTimeout" type="xsf:xdYesNo" use="optional" default="yes" />
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="script">
     <xsd:complexType>
       <xsd:attribute name="src" type="xsf:xdFileName" use="required" />
     </xsd:complexType>
   </xsd:element>
   <!-- dataObjects -->
   <xsd:element name="dataObjects">
     <xsd:complexType>
       <xsd:choice minOccurs="0" maxOccurs="unbounded">
         <xsd:element ref="xsf:dataObject" />
       </xsd:choice>
     </xsd:complexType>
     <xsd:unique name="dataObjects_name_unique">
       <xsd:selector xpath="./xsf:dataObject" />
       <xsd:field xpath="@name" />
     </xsd:unique>
   </xsd:element>
   <xsd:element name="dataObject">
     <xsd:complexType>
       <xsd:choice>
         <xsd:element name="query">
           <xsd:complexType>
             <xsd:choice>
               <xsd:element ref="xsf:adoAdapter" />
               <xsd:element ref="xsf:webServiceAdapter" />
               <xsd:element ref="xsf:xmlFileAdapter" />
               <xsd:element ref="xsf:sharepointListAdapter" />
               <xsd:element ref="xsf:sharepointListAdapterRW" />
             </xsd:choice>
           </xsd:complexType>
         </xsd:element>
       </xsd:choice>
       <xsd:attribute name="name" type="xsf:xdTitle" use="required" />
       <xsd:attribute name="schema" type="xsd:string" use="optional" />
       <xsd:attribute name="initOnLoad" type="xsf:xdYesNo" use="optional" />
     </xsd:complexType>
   </xsd:element>
   <!-- dataAdapters -->
   <xsd:element name="adoAdapter">
     <xsd:complexType>
       <xsd:attribute name="name" type="xsf:xdTitle" use="optional" />
       <xsd:attribute name="connectionString" type="xsd:string" use="required" />
       <xsd:attribute name="commandText" type="xsd:string" use="required" />
       <xsd:attribute name="queryAllowed" type="xsf:xdYesNo" use="optional" />
       <xsd:attribute name="submitAllowed" type="xsf:xdYesNo" use="optional" />
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="webServiceAdapter">
     <xsd:complexType>
       <xsd:choice>
         <xsd:element ref="xsf:operation" />
       </xsd:choice>
       <xsd:attribute name="name" type="xsf:xdTitle" use="optional" />
       <xsd:attribute name="wsdlUrl" type="xsd:string" use="required" />
       <xsd:attribute name="queryAllowed" type="xsf:xdYesNo" use="optional" />
       <xsd:attribute name="submitAllowed" type="xsf:xdYesNo" use="optional" />
       <xsd:attribute name="useDataSet" type="xsf:xdYesNo" use="optional" />
     </xsd:complexType>
   </xsd:element>
   <!-- hwsAdapter is Client-Only -->
   <xsd:element name="hwsAdapter">
     <xsd:complexType>
       <xsd:choice>
         <xsd:element ref="xsf:hwsOperation" />
       </xsd:choice>
       <xsd:attribute name="name" type="xsf:xdTitle" use="required" />
       <xsd:attribute name="wsdlUrl" type="xsd:string" use="required" />
       <xsd:attribute name="queryAllowed" type="xsf:xdYesNo" use="optional" />
       <xsd:attribute name="submitAllowed" type="xsf:xdYesNo" use="optional" />
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="operation">
     <xsd:complexType>
       <xsd:choice>
         <xsd:element ref="xsf:input" minOccurs="0" />
       </xsd:choice>
       <xsd:attribute name="name" type="xsd:string" use="required" />
       <xsd:attribute name="soapAction" type="xsd:string" use="required" />
       <xsd:attribute name="serviceUrl" type="xsd:string" use="required" />
     </xsd:complexType>
   </xsd:element>
   <!-- hwsOperation is Client-Only -->
   <xsd:element name="hwsOperation">
     <xsd:complexType>
       <xsd:choice>
         <xsd:element ref="xsf:input" />
       </xsd:choice>
       <xsd:attribute name="type" type="xsd:string" use="required" />
       <xsd:attribute name="typeID" type="xsd:string" use="required" />
       <xsd:attribute name="serviceUrl" type="xsd:string" use="required" />
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="input">
     <xsd:complexType>
       <xsd:choice minOccurs="0" maxOccurs="unbounded">
         <xsd:element ref="xsf:partFragment" />
       </xsd:choice>
       <xsd:attribute name="source" type="xsd:string" use="required" />
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="partFragment">
     <xsd:complexType>
       <xsd:attribute name="match" type="xsd:string" use="required" />
       <xsd:attribute name="replaceWith" type="xsd:string" use="required" />
       <xsd:attribute name="sendAsString" type="xsf:xdYesNo" use="optional" />
       <xsd:attribute name="dataObject" type="xsd:string" use="optional" />
       <xsd:attribute name="filter" type="xsd:string" use="optional" />
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="xmlFileAdapter">
     <xsd:complexType>
       <xsd:attribute name="name" type="xsf:xdTitle" use="optional" />
       <xsd:attribute name="fileUrl" type="xsd:anyURI" use="required" />
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="sharepointListAdapter">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element name="field" minOccurs="0" maxOccurs="unbounded">
           <xsd:complexType>
             <xsd:attribute name="sharepointName" type="xsd:string" use="required" />
             <xsd:attribute name="infopathName" type="xsd:string" use="required" />
             <xsd:attribute name="isLookup" type="xsf:xdYesNo" use="optional" />
           </xsd:complexType>
         </xsd:element>
       </xsd:sequence>
       <xsd:attribute name="name" type="xsf:xdTitle" use="required" />
       <xsd:attribute name="siteUrl" type="xsd:string" use="required" />
       <xsd:attribute name="sharepointGuid" type="xsd:string" use="required" />
       <xsd:attribute name="infopathGroup" type="xsd:string" use="required" />
       <xsd:attribute name="queryAllowed" type="xsf:xdYesNo" use="optional" />
       <xsd:attribute name="submitAllowed" type="xsf:xdYesNo" use="optional" />
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="bdcAdapter">
     <xsd:complexType>
       <xsd:attribute name="lobSystemInstance" type="xsd:string" use="optional" />
       <xsd:attribute name="entityNamespace" type="xsd:string" use="required" />
       <xsd:attribute name="entityName" type="xsd:string" use="required" />
       <xsd:attribute name="specificFinder" type="xsd:string" use="required" />
       <xsd:attribute name="name" type="xsf:xdTitle" use="required" />
       <xsd:attribute name="submitAdapterName" type="xsf:xdTitle" use="required" />
       <xsd:attribute name="queryAllowed" type="xsf:xdYesNo" use="optional" />
       <xsd:attribute name="submitAllowed" type="xsf:xdYesNo" use="optional" />
       <xsd:attribute name="entitySchemaVersion" type="xsd:string" use="required" />
     </xsd:complexType>
   </xsd:element>
     <xsd:element name="grooveAdapter">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element name="field" minOccurs="0" maxOccurs="unbounded">
           <xsd:complexType>
             <xsd:attribute name="name" type="xsd:string" use="required" />
             <xsd:attribute name="displayName" type="xsd:string" use="optional" />
             <xsd:attribute name="infopathName" type="xsd:string" use="required" />
             <xsd:attribute name="isLookup" type="xsf:xdYesNo" use="optional" />
           </xsd:complexType>
         </xsd:element>
       </xsd:sequence>
       <xsd:attribute name="name" type="xsf:xdTitle" use="required" />
       <xsd:attribute name="spaceName" type="xsd:string" use="required" />
       <xsd:attribute name="spaceBindableUrl" type="xsd:string" use="required" />
       <xsd:attribute name="spaceCanonicalUrl" type="xsd:string" use="required" />
       <xsd:attribute name="spaceCanonicalUrlFormattedForSandboxing" type="xsd:string" use="required" />
       <xsd:attribute name="toolName" type="xsd:string" use="required" />
       <xsd:attribute name="toolDisplayName" type="xsd:string" use="required" />
       <xsd:attribute name="toolBindableUrl" type="xsd:string" use="required" />
       <xsd:attribute name="toolCanonicalUrl" type="xsd:string" use="required" />
       <xsd:attribute name="viewName" type="xsd:string" use="required" />
       <xsd:attribute name="viewDisplayName" type="xsd:string" use="required" />
       <xsd:attribute name="infopathGroup" type="xsd:string" use="required" />
       <xsd:attribute name="queryAllowed" type="xsf:xdYesNo" use="optional" default="yes" />
       <xsd:attribute name="submitAllowed" type="xsf:xdYesNo" use="optional" default="no" />
       <xsd:attribute name="queryThisFormOnly" type="xsf:xdYesNo" use="optional" default="no" />
     </xsd:complexType>
     </xsd:element>
   <xsd:element name="davAdapter">
     <xsd:complexType>
       <xsd:all>
         <xsd:element name="folderURL">
           <xsd:complexType>
             <xsd:attribute name="value" type="xsd:string" use="required" />
           </xsd:complexType>
         </xsd:element>
         <xsd:element name="fileName">
           <xsd:complexType>
             <xsd:attribute name="value" type="xsd:string" use="required" />
             <xsd:attribute name="valueType" type="xsf:xdExpressionLiteral" use="optional" />
           </xsd:complexType>
         </xsd:element>
       </xsd:all>
       <xsd:attribute name="name" type="xsf:xdTitle" use="required" />
       <xsd:attribute name="overwriteAllowed" type="xsf:xdYesNo" use="optional" />
       <xsd:attribute name="queryAllowed" type="xsf:xdYesNo" use="optional" />
       <xsd:attribute name="submitAllowed" type="xsf:xdYesNo" use="optional" />
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="emailAdapter">
     <xsd:complexType>
       <xsd:all>
         <xsd:element name="to" minOccurs="0">
           <xsd:complexType>
             <xsd:attribute name="value" type="xsd:string" use="required" />
             <xsd:attribute name="valueType" type="xsf:xdExpressionLiteral" use="optional" />
           </xsd:complexType>
         </xsd:element>
         <xsd:element name="cc" minOccurs="0">
           <xsd:complexType>
             <xsd:attribute name="value" type="xsd:string" use="required" />
             <xsd:attribute name="valueType" type="xsf:xdExpressionLiteral" use="optional" />
           </xsd:complexType>
         </xsd:element>
         <xsd:element name="bcc" minOccurs="0">
           <xsd:complexType>
             <xsd:attribute name="value" type="xsd:string" use="required" />
             <xsd:attribute name="valueType" type="xsf:xdExpressionLiteral" use="optional" />
           </xsd:complexType>
         </xsd:element>
         <xsd:element name="subject" minOccurs="0">
           <xsd:complexType>
             <xsd:attribute name="value" type="xsd:string" use="required" />
             <xsd:attribute name="valueType" type="xsf:xdExpressionLiteral" use="optional" />
           </xsd:complexType>
         </xsd:element>
         <xsd:element name="intro" minOccurs="0">
           <xsd:complexType>
             <xsd:attribute name="value" type="xsd:string" use="required" />
           </xsd:complexType>
         </xsd:element>
         <xsd:element name="attachmentFileName" minOccurs="0">
           <xsd:complexType>
             <xsd:attribute name="value" type="xsd:string" use="required" />
             <xsd:attribute name="valueType" type="xsf:xdExpressionLiteral" use="optional" />
           </xsd:complexType>
         </xsd:element>
       </xsd:all>
       <xsd:attribute name="name" type="xsf:xdTitle" use="required" />
       <xsd:attribute name="queryAllowed" type="xsf:xdYesNo" use="optional" />
       <xsd:attribute name="submitAllowed" type="xsf:xdYesNo" use="optional" />
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="submitToHostAdapter">
     <xsd:complexType>
       <xsd:attribute name="name" type="xsf:xdTitle" use="required" />
       <xsd:attribute name="queryAllowed" type="xsf:xdYesNo" use="optional" />
       <xsd:attribute name="submitAllowed" type="xsf:xdYesNo" use="optional" />
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="sharepointListAdapterRW">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element name="field" minOccurs="0" maxOccurs="unbounded">
           <xsd:complexType>
             <xsd:attribute name="internalName" type="xsd:string" use="required" />
             <xsd:attribute name="hiddenFieldName" type="xsd:string" use="optional" />
             <xsd:attribute name="type" type="xsd:string" use="required" />
             <xsd:attribute name="auxDomName" type="xsd:string" use="optional" />
             <xsd:attribute name="showFieldName" type="xsd:string" use="optional" />
             <xsd:attribute name="required" type="xsf:xdYesNo" use="optional" />
             <xsd:attribute name="appendOnly" type="xsf:xdYesNo" use="optional" />
           </xsd:complexType>
         </xsd:element>
       </xsd:sequence>
       <xsd:attribute name="name" type="xsf:xdTitle" use="required" />
       <xsd:attribute name="siteURL" type="xsd:string" use="required" />
       <xsd:attribute name="sharePointListID" type="xsd:string" use="required" />
       <xsd:attribute name="contentTypeID" type="xsd:string" use="required" />
       <xsd:attribute name="queryAllowed" type="xsf:xdYesNo" use="optional" />
       <xsd:attribute name="submitAllowed" type="xsf:xdYesNo" use="optional" />
       <xsd:attribute name="autogen" type="xsf:xdYesNo" use="optional" />
       <xsd:attribute name="relativeListUrl" type="xsd:string" use="optional" />
       <xsd:attribute name="version" type="xsd:string" use="optional" />
       <xsd:attribute name="sharePointListChoices" type="xsd:string" use="optional" />
       <xsd:attribute name="queryOneItemOnly" type="xsf:xdYesNo" use="optional" />
       <xsd:attribute name="sortBy" type="xsd:string" use="optional" />
       <xsd:attribute name="sortAscending" type="xsf:xdYesNo" use="optional" />
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="dataAdapters">
     <xsd:complexType>
       <xsd:choice minOccurs="0" maxOccurs="unbounded">
         <xsd:element ref="xsf:adoAdapter" />
         <xsd:element ref="xsf:webServiceAdapter" />
         <xsd:element ref="xsf:xmlFileAdapter" />
         <xsd:element ref="xsf:sharepointListAdapter" />
         <xsd:element ref="xsf:davAdapter" />
         <xsd:element ref="xsf:emailAdapter" />
         <xsd:element ref="xsf:submitToHostAdapter" />
         <!-- hwsAdapter is Client-Only -->
         <xsd:element ref="xsf:hwsAdapter" />
       </xsd:choice>
     </xsd:complexType>
   </xsd:element>
   <!-- documentSchemas -->
   <xsd:element name="documentSchemas">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:documentSchema" maxOccurs="unbounded" />
       </xsd:sequence>
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="documentSchema">
     <xsd:complexType>
       <xsd:attribute name="location" type="xsd:string" use="required" />
       <xsd:attribute name="rootSchema" type="xsf:xdYesNo" />
     </xsd:complexType>
   </xsd:element>
   <!-- customValidation -->
   <xsd:element name="customValidation">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:errorCondition" minOccurs="0" maxOccurs="unbounded" />
       </xsd:sequence>
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="errorCondition">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:errorMessage" />
       </xsd:sequence>
       <xsd:attribute name="match" type="xsd:string" use="required" />
       <xsd:attribute name="expression" type="xsd:string" use="required" />
       <xsd:attribute name="expressionContext" type="xsd:string" use="optional" />
       <xsd:attribute name="showErrorOn" type="xsd:string" use="optional" />
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="errorMessage">
     <xsd:complexType>
       <xsd:simpleContent>
         <xsd:extension base="xsf:xdErrorMessage">
           <xsd:attribute name="type" use="optional">
             <xsd:simpleType>
               <xsd:restriction base="xsd:NMTOKEN">
                 <xsd:enumeration value="modal" />
                 <xsd:enumeration value="modeless" />
               </xsd:restriction>
             </xsd:simpleType>
           </xsd:attribute>
           <xsd:attribute name="shortMessage" use="required">
             <xsd:simpleType>
               <xsd:restriction base="xsd:string">
                 <xsd:maxLength value="127" />
               </xsd:restriction>
             </xsd:simpleType>
           </xsd:attribute>
         </xsd:extension>
       </xsd:simpleContent>
     </xsd:complexType>
   </xsd:element>
   <!-- domEventHandlers -->
   <xsd:element name="domEventHandlers">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:domEventHandler" minOccurs="0" maxOccurs="unbounded" />
       </xsd:sequence>
     </xsd:complexType>
     <xsd:unique name="domEventHandler_handlerObject_unique">
       <xsd:selector xpath="." />
       <xsd:field xpath="@handlerObject" />
     </xsd:unique>
   </xsd:element>
   <xsd:element name="domEventHandler">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:ruleSetAction" minOccurs="0" maxOccurs="1" />
       </xsd:sequence>
       <xsd:attribute name="dataObject" type="xsd:string" use="optional" />
       <xsd:attribute name="match" type="xsd:string" use="required" />
       <xsd:attribute name="handlerObject" type="xsd:string" use="optional" />
     </xsd:complexType>
     <xsd:keyref name="domEventHandler_ruleSetAction" refer="xsf:ruleset_name_key">
       <xsd:selector xpath="./xsf:ruleSetAction" />
       <xsd:field xpath="@ruleSet" />
     </xsd:keyref>
   </xsd:element>
   <!-- importParameters -->
   <xsd:element name="importParameters">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:importSource" minOccurs="0" maxOccurs="unbounded" />
       </xsd:sequence>
       <xsd:attribute name="enabled" type="xsf:xdYesNo" use="required" />
       <xsd:attribute name="useScriptHandler" type="xsf:xdYesNo" use="optional" />
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="importSource">
     <xsd:complexType>
       <xsd:attribute name="name" type="xsd:string" use="required" />
       <xsd:attribute name="schema" type="xsf:xdFileName" use="required" />
       <xsd:attribute name="transform" type="xsf:xdFileName" use="required" />
       <xsd:attribute name="authoringOfTransform" type="xsf:xdManualAuto" use="optional" />
     </xsd:complexType>
   </xsd:element>
   <!-- listProperties -->
   <xsd:element name="listProperties">
     <xsd:complexType>
       <xsd:all>
         <xsd:element ref="xsf:fields" />
       </xsd:all>
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="fields">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:field" minOccurs="0" maxOccurs="unbounded" />
       </xsd:sequence>
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="field">
     <xsd:complexType>
       <xsd:attribute name="type" type="xsd:NMTOKEN" use="required" />
       <xsd:attribute name="name" type="xsf:xdTitle" use="required" />
       <xsd:attribute name="columnName" type="xsf:xdTitle" use="required" />
       <xsd:attribute name="required" type="xsf:xdYesNo" use="optional" />
       <xsd:attribute name="viewable" type="xsf:xdYesNo" use="optional" />
       <xsd:attribute name="node" type="xsd:string" use="required" />
       <xsd:attribute name="maxLength" type="xsd:byte" />
       <xsd:attribute name="aggregation" use="optional">
         <xsd:simpleType>
           <xsd:restriction base="xsd:NMTOKEN">
             <xsd:enumeration value="sum" />
             <xsd:enumeration value="count" />
             <xsd:enumeration value="average" />
             <xsd:enumeration value="min" />
             <xsd:enumeration value="max" />
             <xsd:enumeration value="first" />
             <xsd:enumeration value="last" />
             <xsd:enumeration value="merge" />
             <xsd:enumeration value="plaintext" />
           </xsd:restriction>
         </xsd:simpleType>
       </xsd:attribute>
     </xsd:complexType>
   </xsd:element>
   <!-- submit -->
   <xsd:element name="submit">
     <xsd:complexType>
       <xsd:all>
         <xsd:element name="submitAction" minOccurs="0">
           <xsd:complexType>
             <xsd:attribute name="adapter" type="xsf:xdTitle" use="required" />
           </xsd:complexType>
           <xsd:keyref name="submitAdapter_name_keyref" refer="xsf:adapter_name_key">
             <xsd:selector xpath="." />
             <xsd:field xpath="@adapter" />
           </xsd:keyref>
         </xsd:element>
         <xsd:element ref="xsf:useHttpHandler" minOccurs="0" />
         <xsd:element ref="xsf:useScriptHandler" minOccurs="0" />
         <xsd:element ref="xsf:ruleSetAction" minOccurs="0" />
         <xsd:element ref="xsf:useQueryAdapter" minOccurs="0" />
         <xsd:element ref="xsf:webServiceAdapter" minOccurs="0" />
         <xsd:element ref="xsf:davAdapter" minOccurs="0" />
         <xsd:element ref="xsf:emailAdapter" minOccurs="0" />
         <xsd:element ref="xsf:submitToHostAdapter" minOccurs="0" />
         <xsd:element name="successMessage" type="xsd:string" minOccurs="0" />
         <xsd:element name="errorMessage" type="xsd:string" minOccurs="0" />
       </xsd:all>
       <xsd:attribute name="caption" type="xsd:string" use="optional" />
       <xsd:attribute name="onAfterSubmit" use="optional">
         <xsd:simpleType>
           <xsd:restriction base="xsd:NMTOKEN">
             <xsd:enumeration value="close" />
             <xsd:enumeration value="keepOpen" />
             <xsd:enumeration value="openNew" />
           </xsd:restriction>
         </xsd:simpleType>
       </xsd:attribute>
       <xsd:attribute name="showStatusDialog" type="xsf:xdYesNo" use="optional" />
       <xsd:attribute name="showSignatureReminder" type="xsf:xdYesNo" use="optional" />
       <xsd:attribute name="disableMenuItem" type="xsf:xdYesNo" use="optional" />
     </xsd:complexType>
     <xsd:keyref name="submit_ruleSetAction" refer="xsf:ruleset_name_key">
       <xsd:selector xpath="./xsf:ruleSetAction" />
       <xsd:field xpath="@ruleSet" />
     </xsd:keyref>
   </xsd:element>
   <xsd:element name="useHttpHandler">
     <xsd:complexType>
       <xsd:attribute name="method" use="required">
         <xsd:simpleType>
           <xsd:restriction base="xsd:NMTOKEN">
             <xsd:enumeration value="POST" />
           </xsd:restriction>
         </xsd:simpleType>
       </xsd:attribute>
       <xsd:attribute name="href" type="xsd:anyURI" use="required" />
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="useScriptHandler" />
   <xsd:element name="useQueryAdapter" />
   <!-- onLoad -->
   <xsd:element name="onLoad">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:ruleSetAction" minOccurs="1" maxOccurs="1" />
       </xsd:sequence>
     </xsd:complexType>
     <xsd:keyref name="load_ruleSetAction" refer="xsf:ruleset_name_key">
       <xsd:selector xpath="./xsf:ruleSetAction" />
       <xsd:field xpath="@ruleSet" />
     </xsd:keyref>
   </xsd:element>
   <!-- save -->
   <xsd:element name="save">
     <xsd:complexType>
       <xsd:choice minOccurs="0" maxOccurs="1">
         <xsd:element ref="xsf:useScriptHandler" />
       </xsd:choice>
     </xsd:complexType>
   </xsd:element>
   <!-- roles -->
   <xsd:element name="roles">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:role" minOccurs="1" maxOccurs="unbounded" />
         <xsd:element ref="xsf:membership" minOccurs="0" maxOccurs="1" />
       </xsd:sequence>
       <xsd:attribute name="default" type="xsd:string" use="required" />
       <xsd:attribute name="initiator" type="xsd:string" use="optional" />
       <xsd:attribute name="hideStatusBarDisplay" type="xsf:xdYesNo" use="optional" />
     </xsd:complexType>
     <!-- role names must be unique -->
     <xsd:unique name="roles_name_unique">
       <xsd:selector xpath="./xsf:role" />
       <xsd:field xpath="@name" />
     </xsd:unique>
     <!-- fields must reference existing role -->
     <xsd:key name="role_name_key">
       <xsd:selector xpath="./xsf:role" />
       <xsd:field xpath="@name" />
     </xsd:key>
     <xsd:keyref name="role_default" refer="xsf:role_name_key">
       <xsd:selector xpath="." />
       <xsd:field xpath="@default" />
     </xsd:keyref>
     <xsd:keyref name="role_initiator" refer="xsf:role_name_key">
       <xsd:selector xpath="." />
       <xsd:field xpath="@initiator" />
     </xsd:keyref>
     <xsd:keyref name="role_membership" refer="xsf:role_name_key">
       <xsd:selector xpath="./xsf:membership/*" />
       <xsd:field xpath="@memberOf" />
     </xsd:keyref>
   </xsd:element>
   <xsd:element name="role">
     <xsd:complexType>
       <xsd:attribute name="name" type="xsf:xdRoleName" use="required" />
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="membership">
     <xsd:complexType>
       <xsd:choice minOccurs="1" maxOccurs="unbounded">
         <xsd:element ref="xsf:getUserNameFromData" />
         <xsd:element ref="xsf:userName" />
         <xsd:element ref="xsf:group" />
       </xsd:choice>
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="getUserNameFromData">
     <xsd:complexType>
       <xsd:attribute name="dataObject" type="xsd:string" use="optional" />
       <xsd:attribute name="select" type="xsd:string" use="required" />
       <xsd:attribute name="memberOf" type="xsd:string" use="required" />
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="userName">
     <xsd:complexType>
       <xsd:attribute name="name" type="xsd:string" use="required" />
       <xsd:attribute name="memberOf" type="xsd:string" use="required" />
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="group">
     <xsd:complexType>
       <xsd:attribute name="name" type="xsd:string" use="required" />
       <xsd:attribute name="memberOf" type="xsd:string" use="required" />
     </xsd:complexType>
   </xsd:element>
   <!-- hwsWorkflow -->
   <xsd:element name="hwsWorkflow">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:location" minOccurs="1" maxOccurs="1" />
         <xsd:element ref="xsf:allowedActions" minOccurs="1" maxOccurs="1" />
         <xsd:element ref="xsf:allowedTasks" minOccurs="0" maxOccurs="1" />
       </xsd:sequence>
       <xsd:attribute name="taskpaneVisible" type="xsf:xdYesNo" />
     </xsd:complexType>
     <xsd:unique name="hws_actiontask_name">
       <xsd:selector xpath="./xsf:allowedActions/xsf:action|./xsf:allowedTasks/xsf:task" />
       <xsd:field xpath="@name" />
     </xsd:unique>
   </xsd:element>
   <!-- location -->
   <xsd:element name="location">
     <xsd:complexType>
       <xsd:attribute name="url" type="xsd:string" use="required" />
     </xsd:complexType>
   </xsd:element>
   <!-- allowedActions -->
   <xsd:element name="allowedActions">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:action" minOccurs="1" maxOccurs="20" />
       </xsd:sequence>
     </xsd:complexType>
     <xsd:unique name="hws_actionTypeID_unique">
       <xsd:selector xpath="./xsf:action" />
       <xsd:field xpath="@actionTypeID" />
     </xsd:unique>
   </xsd:element>
   <!-- action -->
   <xsd:element name="action">
     <xsd:complexType>
       <xsd:attribute name="name" type="xsf:xdHWSname" use="required" />
       <xsd:attribute name="actionTypeID" type="xsd:string" use="required" />
       <xsd:attribute name="canInitiateWorkflow" type="xsf:xdYesNo" use="required" />
       <xsd:attribute name="caption" type="xsf:xdHWSCaption" use="optional" />
     </xsd:complexType>
   </xsd:element>
   <!-- allowedTasks -->
   <xsd:element name="allowedTasks">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:task" minOccurs="1" maxOccurs="20" />
       </xsd:sequence>
     </xsd:complexType>
     <xsd:unique name="hws_taskID_unique">
       <xsd:selector xpath="./xsf:task" />
       <xsd:field xpath="@taskTypeID" />
     </xsd:unique>
   </xsd:element>
   <!-- task -->
   <xsd:element name="task">
     <xsd:complexType>
       <xsd:attribute name="name" type="xsf:xdHWSname" use="required" />
       <xsd:attribute name="taskTypeID" type="xsd:string" use="required" />
       <xsd:attribute name="caption" type="xsf:xdHWSCaption" use="optional" />
     </xsd:complexType>
   </xsd:element>
   <!-- fileNew -->
   <xsd:element name="fileNew">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:initialXmlDocument" />
       </xsd:sequence>
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="initialXmlDocument">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:customCategory" minOccurs="0" />
       </xsd:sequence>
       <xsd:attribute name="caption" type="xsf:xdTitle" use="required" />
       <xsd:attribute name="href" type="xsf:xdFileName" use="required" />
     </xsd:complexType>
   </xsd:element>
   <!-- customCategory -->
   <xsd:element name="customCategory">
     <xsd:complexType>
       <xsd:attribute name="name" type="xsf:xdTitle" use="required" />
     </xsd:complexType>
   </xsd:element>
   <!-- package -->
   <xsd:element name="package">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:files" />
       </xsd:sequence>
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="files">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:file" minOccurs="0" maxOccurs="unbounded" />
       </xsd:sequence>
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="file">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:fileProperties" minOccurs="0" maxOccurs="1" />
       </xsd:sequence>
       <xsd:attribute name="name" type="xsf:xdFileName" use="required" />
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="fileProperties">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:property" minOccurs="0" maxOccurs="unbounded" />
       </xsd:sequence>
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="property">
     <xsd:complexType>
       <xsd:attribute name="name" type="xsd:string" use="required" />
       <xsd:attribute name="value" type="xsd:string" use="required" />
       <xsd:attribute name="type" type="xsd:QName" use="required" />
     </xsd:complexType>
   </xsd:element>
   <!-- permissions -->
   <xsd:element name="permissions">
     <xsd:complexType>
       <xsd:choice minOccurs="0" maxOccurs="unbounded">
         <xsd:element ref="xsf:allowedControl" />
       </xsd:choice>
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="allowedControl">
     <xsd:complexType>
       <xsd:attribute name="cabFile" type="xsd:string" use="optional" />
       <xsd:attribute name="clsid" type="xsd:string" use="required" />
       <xsd:attribute name="version" type="xsd:string" use="optional" />
     </xsd:complexType>
   </xsd:element>
   <!-- View and Context-Driven Editing definitions -->
   <!-- External Views -->
   <xsd:element name="externalViews">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:externalView" minOccurs="1" maxOccurs="unbounded" />
       </xsd:sequence>
       <xsd:attribute name="default" type="xsd:string" />
     </xsd:complexType>
     <xsd:unique name="externalViews_name_unique">
       <xsd:selector xpath="./xsf:externalView" />
       <xsd:field xpath="@default" />
     </xsd:unique>
     <xsd:keyref name="external_views_printView" refer="xsf:externalView_name_key">
       <xsd:selector xpath="." />
       <xsd:field xpath="@default" />
     </xsd:keyref>
   </xsd:element>
   <xsd:element name="externalView">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:mainpane" />
       </xsd:sequence>
       <xsd:attribute name="target" type="xsd:string" />
       <xsd:attribute name="name" type="xsf:xdViewName" use="required" />
       <xsd:attribute name="designMode" type="xsf:xdDesignMode" />
     </xsd:complexType>
   </xsd:element>
   <!-- attributeData -->
   <xsd:element name="attributeData">
     <xsd:complexType>
       <xsd:attribute name="attribute" type="xsd:string" use="required" />
       <xsd:attribute name="value" type="xsd:string" use="required" />
     </xsd:complexType>
   </xsd:element>
   <!-- button -->
   <xsd:element name="button">
     <xsd:complexType>
       <xsd:attribute name="caption" type="xsf:xdTitle" />
       <xsd:attribute name="icon" type="xsd:string" />
       <xsd:attribute name="tooltip" type="xsf:xdTitle" />
       <xsd:attribute name="name" type="xsd:NMTOKEN" />
       <xsd:attribute name="xmlToEdit" type="xsd:NMTOKEN" />
       <xsd:attribute name="action">
         <xsd:simpleType>
           <xsd:restriction base="xsd:NMTOKEN">
             <xsd:enumeration value="xCollection::insert" />
             <xsd:enumeration value="xCollection::insertBefore" />
             <xsd:enumeration value="xCollection::insertAfter" />
             <xsd:enumeration value="xCollection::remove" />
             <xsd:enumeration value="xCollection::refreshFilter" />
             <xsd:enumeration value="xCollection::removeAll" />
             <xsd:enumeration value="xOptional::insert" />
             <xsd:enumeration value="xOptional::remove" />
             <xsd:enumeration value="xReplace::replace" />
  
             <xsd:enumeration value="xFileAttachment::attach" />
             <xsd:enumeration value="xFileAttachment::open" />
             <xsd:enumeration value="xFileAttachment::saveAs" />
             <xsd:enumeration value="xFileAttachment::remove" />
           </xsd:restriction>
         </xsd:simpleType>
       </xsd:attribute>
       <xsd:attribute name="showIf">
         <xsd:simpleType>
           <xsd:restriction base="xsd:NMTOKEN">
             <xsd:enumeration value="always" />
             <xsd:enumeration value="enabled" />
             <xsd:enumeration value="immediate" />
           </xsd:restriction>
         </xsd:simpleType>
       </xsd:attribute>
     </xsd:complexType>
   </xsd:element>
   <!-- chooseFragment -->
   <xsd:element name="chooseFragment">
     <xsd:complexType mixed="true">
       <xsd:sequence>
         <xsd:any minOccurs="0" maxOccurs="unbounded" processContents="skip" />
       </xsd:sequence>
       <xsd:attribute name="parent" type="xsd:string" />
       <xsd:attribute name="followingSiblings" type="xsd:string" use="optional" />
       <xsd:attribute name="innerFragment" type="xsd:string" use="optional" />
     </xsd:complexType>
   </xsd:element>
   <!-- editWith -->
   <xsd:element name="editWith">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:masterDetail" minOccurs="0" maxOccurs="1" />
         <xsd:element ref="xsf:fragmentToInsert" minOccurs="0" maxOccurs="1" />
       </xsd:sequence>
       <xsd:attribute name="component" use="required">
         <xsd:simpleType>
           <xsd:restriction base="xsd:NMTOKEN">
             <xsd:enumeration value="xCollection" />
             <xsd:enumeration value="xOptional" />
             <xsd:enumeration value="xReplace" />
             <xsd:enumeration value="xTextList" />
             <xsd:enumeration value="xField" />
             <xsd:enumeration value="xImage" />
             <xsd:enumeration value="xFileAttachment" />
           </xsd:restriction>
         </xsd:simpleType>
       </xsd:attribute>
       <xsd:attribute name="caption" type="xsf:xdTitle" use="optional" />
       <xsd:attribute name="autoComplete" type="xsf:xdYesNo" use="optional" />
       <xsd:attribute name="proofing" type="xsf:xdYesNo" use="optional" />
       <xsd:attribute name="type" use="optional">
         <xsd:simpleType>
           <xsd:restriction base="xsd:NMTOKEN">
             <xsd:enumeration value="plain" />
             <xsd:enumeration value="formatted" />
             <xsd:enumeration value="plainMultiline" />
             <xsd:enumeration value="formattedMultiline" />
             <xsd:enumeration value="rich" />
           </xsd:restriction>
         </xsd:simpleType>
       </xsd:attribute>
       <xsd:attribute name="useFilter" use="optional">
         <xsd:simpleType>
           <xsd:restriction base="xsd:string">
             <xsd:enumeration value="yes" />
             <xsd:enumeration value="no" />
           </xsd:restriction>
         </xsd:simpleType>
       </xsd:attribute>
       <xsd:attribute name="widgetIcon" use="optional">
         <xsd:simpleType>
           <xsd:restriction base="xsd:string">
             <xsd:enumeration value="standard" />
             <xsd:enumeration value="filter" />
           </xsd:restriction>
         </xsd:simpleType>
       </xsd:attribute>
       <xsd:attribute name="filterDependency" type="xsd:string" use="optional" />
       <xsd:attribute name="field" type="xsd:string" use="optional" />
       <xsd:attribute name="removeAncestors" type="xsd:nonNegativeInteger" use="optional" />
       <xsd:attribute name="maxLength" use="optional">
         <xsd:simpleType>
           <xsd:restriction base="xsd:integer">
             <xsd:minInclusive value="-1" />
           </xsd:restriction>
         </xsd:simpleType>
       </xsd:attribute>
       <xsd:attribute name="allowedFileTypes" type="xsd:string" use="optional" />
       <xsd:anyAttribute namespace="http://schemas.microsoft.com/office/infopath/2003" processContents="skip" />
     </xsd:complexType>
   </xsd:element>
   <!-- unboundControls -->
   <xsd:element name="unboundControls">
     <xsd:complexType>
       <xsd:sequence>
         <!-- button -->
         <xsd:element name="button" minOccurs="0" maxOccurs="unbounded">
           <xsd:complexType>
             <xsd:sequence>
               <xsd:element ref="xsf:ruleSetAction" minOccurs="0" maxOccurs="1" />
             </xsd:sequence>
             <xsd:attribute name="name" use="required">
               <xsd:simpleType>
                 <!-- type of name is non qualified name, but NCName also accepts '.' and '-', 
                 so these characters are  disabled by pattern restriction -->
                 <xsd:restriction base="xsd:NCName">
                   <xsd:pattern value="[^\.\^-]*" />
                 </xsd:restriction>
               </xsd:simpleType>
             </xsd:attribute>
           </xsd:complexType>
           <xsd:keyref name="button_ruleSetAction" refer="xsf:ruleset_name_key">
             <xsd:selector xpath="./xsf:ruleSetAction" />
             <xsd:field xpath="@ruleSet" />
           </xsd:keyref>
         </xsd:element>
       </xsd:sequence>
     </xsd:complexType>
   </xsd:element>
   <!-- editing -->
   <xsd:element name="editing">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:xmlToEdit" minOccurs="0" maxOccurs="unbounded" />
       </xsd:sequence>
     </xsd:complexType>
   </xsd:element>
   <!-- Master Detail -->
   <xsd:element name="masterDetail">
     <xsd:complexType>
       <xsd:attribute name="master" type="xsd:string" />
       <xsd:attribute name="masterViewContext" type="xsd:string" />
       <xsd:attribute name="masterKey" type="xsd:string" />
       <xsd:attribute name="detailKey" type="xsd:string" />
     </xsd:complexType>
   </xsd:element>
   <!-- fragmentToInsert -->
   <xsd:element name="fragmentToInsert">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:chooseFragment" minOccurs="1" maxOccurs="unbounded" />
       </xsd:sequence>
     </xsd:complexType>
   </xsd:element>
   <!-- mainpane -->
   <xsd:element name="mainpane">
     <xsd:complexType>
       <xsd:attribute name="transform" type="xsf:xdFileName" use="required" />
     </xsd:complexType>
   </xsd:element>
   <!-- printSettings -->
   <xsd:element name="printSettings">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:header" minOccurs="0" maxOccurs="1" />
         <xsd:element ref="xsf:footer" minOccurs="0" maxOccurs="1" />
       </xsd:sequence>
       <xsd:attribute name="orientation">
         <xsd:simpleType>
           <xsd:restriction base="xsd:NMTOKEN">
             <xsd:enumeration value="portrait" />
             <xsd:enumeration value="landscape" />
           </xsd:restriction>
         </xsd:simpleType>
       </xsd:attribute>
       <xsd:attribute name="header">
         <xsd:simpleType>
           <xsd:restriction base="xsd:string">
             <xsd:maxLength value="255" />
           </xsd:restriction>
         </xsd:simpleType>
       </xsd:attribute>
       <xsd:attribute name="footer">
         <xsd:simpleType>
           <xsd:restriction base="xsd:string">
             <xsd:maxLength value="255" />
           </xsd:restriction>
         </xsd:simpleType>
       </xsd:attribute>
       <xsd:attribute name="marginUnitsType">
         <xsd:simpleType>
           <xsd:restriction base="xsd:NMTOKEN">
             <xsd:enumeration value="in" />
             <xsd:enumeration value="cm" />
           </xsd:restriction>
         </xsd:simpleType>
       </xsd:attribute>
       <xsd:attribute name="rightMargin">
         <xsd:simpleType>
           <xsd:restriction base="xsd:float">
             <xsd:minInclusive value="0" />
             <xsd:maxInclusive value="100" />
           </xsd:restriction>
         </xsd:simpleType>
       </xsd:attribute>
       <xsd:attribute name="leftMargin">
         <xsd:simpleType>
           <xsd:restriction base="xsd:float">
             <xsd:minInclusive value="0" />
             <xsd:maxInclusive value="100" />
           </xsd:restriction>
         </xsd:simpleType>
       </xsd:attribute>
       <xsd:attribute name="topMargin">
         <xsd:simpleType>
           <xsd:restriction base="xsd:float">
             <xsd:minInclusive value="0" />
             <xsd:maxInclusive value="100" />
           </xsd:restriction>
         </xsd:simpleType>
       </xsd:attribute>
       <xsd:attribute name="bottomMargin">
         <xsd:simpleType>
           <xsd:restriction base="xsd:float">
             <xsd:minInclusive value="0" />
             <xsd:maxInclusive value="100" />
           </xsd:restriction>
         </xsd:simpleType>
       </xsd:attribute>
       <xsd:attribute name="printerName">
         <xsd:simpleType>
           <xsd:restriction base="xsd:string">
             <xsd:maxLength value="255" />
           </xsd:restriction>
         </xsd:simpleType>
       </xsd:attribute>
       <xsd:attribute name="paperSize">
         <xsd:simpleType>
           <xsd:restriction base="xsd:string">
             <xsd:maxLength value="255" />
           </xsd:restriction>
         </xsd:simpleType>
       </xsd:attribute>
       <xsd:attribute name="paperSource">
         <xsd:simpleType>
           <xsd:restriction base="xsd:string">
             <xsd:maxLength value="255" />
           </xsd:restriction>
         </xsd:simpleType>
       </xsd:attribute>
       <xsd:attribute name="copies">
         <xsd:simpleType>
           <xsd:restriction base="xsd:integer">
             <xsd:minInclusive value="1" />
             <xsd:maxInclusive value="9999" />
           </xsd:restriction>
         </xsd:simpleType>
       </xsd:attribute>
       <xsd:attribute name="collate" type="xsf:xdYesNo" />
       <xsd:attribute name="pageRangeStart">
         <xsd:simpleType>
           <xsd:restriction base="xsd:integer">
             <xsd:minInclusive value="1" />
             <xsd:maxInclusive value="32000" />
           </xsd:restriction>
         </xsd:simpleType>
       </xsd:attribute>
       <xsd:attribute name="pageRangeEnd">
         <xsd:simpleType>
           <xsd:restriction base="xsd:integer">
             <xsd:minInclusive value="1" />
             <xsd:maxInclusive value="32000" />
           </xsd:restriction>
         </xsd:simpleType>
       </xsd:attribute>
       <xsd:attribute name="printerSpecificSettings">
         <xsd:simpleType>
           <xsd:restriction base="xsd:string">
             <xsd:maxLength value="255" />
           </xsd:restriction>
         </xsd:simpleType>
       </xsd:attribute>
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="header">
     <xsd:complexType mixed="true">
       <xsd:sequence>
         <xsd:any minOccurs="0" maxOccurs="unbounded" processContents="skip" />
       </xsd:sequence>
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="footer">
     <xsd:complexType mixed="true">
       <xsd:sequence>
         <xsd:any minOccurs="0" maxOccurs="unbounded" processContents="skip" />
       </xsd:sequence>
     </xsd:complexType>
   </xsd:element>
   <!-- toolbar -->
   <xsd:element name="toolbar">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:group ref="xsf:UIItem" minOccurs="0" maxOccurs="unbounded" />
       </xsd:sequence>
       <xsd:attribute name="name" type="xsf:xdTitle" use="required" />
       <xsd:attribute name="caption" type="xsf:xdTitle" use="required" />
     </xsd:complexType>
   </xsd:element>
   <!-- menu -->
   <xsd:element name="menu">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:group ref="xsf:UIItem" minOccurs="0" maxOccurs="unbounded" />
       </xsd:sequence>
       <xsd:attribute name="caption" type="xsf:xdTitle" use="required" />
     </xsd:complexType>
   </xsd:element>
   <!-- menuArea -->
   <xsd:element name="menuArea">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:group ref="xsf:UIItem" minOccurs="0" maxOccurs="unbounded" />
       </xsd:sequence>
       <xsd:attribute name="name" use="required">
         <xsd:simpleType>
           <xsd:restriction base="xsd:NMTOKEN">
             <xsd:enumeration value="msoFileMenu" />
             <xsd:enumeration value="msoEditMenu" />
             <xsd:enumeration value="msoInsertMenu" />
             <xsd:enumeration value="msoViewMenu" />
             <xsd:enumeration value="msoFormatMenu" />
             <xsd:enumeration value="msoToolsMenu" />
             <xsd:enumeration value="msoTableMenu" />
             <xsd:enumeration value="msoHelpMenu" />
             <xsd:enumeration value="msoStructuralEditingContextMenu" />
           </xsd:restriction>
         </xsd:simpleType>
       </xsd:attribute>
     </xsd:complexType>
   </xsd:element>
   <!-- UIContainer -->
   <xsd:group name="UIContainer">
     <xsd:choice>
       <xsd:element ref="xsf:toolbar" />
       <xsd:element ref="xsf:menu" />
       <xsd:element ref="xsf:menuArea" />
     </xsd:choice>
   </xsd:group>
   <!-- UIItem -->
   <xsd:group name="UIItem">
     <xsd:choice>
       <xsd:element ref="xsf:button" />
       <xsd:element ref="xsf:menu" />
     </xsd:choice>
   </xsd:group>
   <!-- taskpane -->
   <xsd:element name="taskpane">
     <xsd:complexType>
       <xsd:attribute name="caption" type="xsd:string" use="required" />
       <xsd:attribute name="href" type="xsd:string" use="required" />
     </xsd:complexType>
   </xsd:element>
   <!-- views -->
   <xsd:element name="views">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:view" minOccurs="1" maxOccurs="unbounded" />
       </xsd:sequence>
       <xsd:attribute name="default" type="xsd:string" />
     </xsd:complexType>
     <xsd:unique name="views_name_unique">
       <xsd:selector xpath="./xsf:view" />
       <xsd:field xpath="@name" />
     </xsd:unique>
     <xsd:keyref name="view_printView" refer="xsf:view_or_externalView_name_key">
       <xsd:selector xpath="./xsf:view" />
       <xsd:field xpath="@printView" />
     </xsd:keyref>
     <xsd:keyref name="views_default" refer="xsf:view_name_key">
       <xsd:selector xpath="." />
       <xsd:field xpath="@default" />
     </xsd:keyref>
   </xsd:element>
   <!-- ViewContent -->
   <xsd:group name="ViewContent">
     <xsd:choice>
       <xsd:element ref="xsf:editing" minOccurs="0" />
       <xsd:element ref="xsf:mainpane" minOccurs="0" />
       <xsd:element ref="xsf:printSettings" minOccurs="0" />
       <xsd:group ref="xsf:UIContainer" minOccurs="0" maxOccurs="unbounded" />
       <xsd:element ref="xsf:unboundControls" minOccurs="0" />
     </xsd:choice>
   </xsd:group>
   <!-- view -->
   <xsd:element name="view">
     <xsd:complexType>
       <xsd:group ref="xsf:ViewContent" minOccurs="0" maxOccurs="unbounded" />
       <xsd:attribute name="caption" type="xsf:xdViewName" />
       <xsd:attribute name="name" type="xsf:xdViewName" use="required" />
       <xsd:attribute name="showMenuItem" type="xsf:xdYesNo" use="optional" />
       <xsd:attribute name="printView" type="xsd:string" />
       <xsd:attribute name="designMode" type="xsf:xdDesignMode" />
     </xsd:complexType>
     <xsd:unique name="toolbar_name_unique">
       <xsd:selector xpath="./xsf:toolbar" />
       <xsd:field xpath="@name" />
     </xsd:unique>
     <xsd:unique name="menuArea_name_unique">
       <xsd:selector xpath="./xsf:menuArea" />
       <xsd:field xpath="@name" />
     </xsd:unique>
     <xsd:unique name="xmlToEdit_name_unique">
       <xsd:selector xpath="./xsf:editing/xsf:xmlToEdit" />
       <xsd:field xpath="@name" />
     </xsd:unique>
     <xsd:key name="xmlToEdit_name_key">
       <xsd:selector xpath="./xsf:editing/xsf:xmlToEdit" />
       <xsd:field xpath="@name" />
     </xsd:key>
     <xsd:keyref name="button_xmlToEdit_reference" refer="xsf:xmlToEdit_name_key">
       <xsd:selector xpath="./xsf:menuArea/xsf:button | ./xsf:menu/xsf:button | ./xsf:toolbar/xsf:button" />
       <xsd:field xpath="@xmlToEdit" />
     </xsd:keyref>
   </xsd:element>
   <!-- xmlToEdit -->
   <xsd:element name="xmlToEdit">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:editWith" minOccurs="0" maxOccurs="1" />
       </xsd:sequence>
       <xsd:attribute name="name" type="xsd:NMTOKEN" use="required" />
       <xsd:attribute name="item" type="xsd:string" use="required" />
       <xsd:attribute name="container" type="xsd:string" />
       <xsd:attribute name="viewContext">
         <xsd:simpleType>
           <xsd:restriction base="xsd:string">
             <xsd:pattern value="((\.|\#|[a-zA-Z0-9_])[a-zA-Z0-9_]*)(\s((\.|\#|[a-zA-Z0-9_])[a-zA-Z0-9_]*))*" />
           </xsd:restriction>
         </xsd:simpleType>
       </xsd:attribute>
     </xsd:complexType>
   </xsd:element>
   <!-- Digital Signatures -->
   <xsd:element name="documentSignatures">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:signedDataBlock" minOccurs="0" maxOccurs="unbounded" />
       </xsd:sequence>
       <xsd:attribute name="signatureLocation" type="xsd:string" use="optional" />
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="signedDataBlock">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element name="message" type="xsf:xdSignedDataBlockMessage" minOccurs="0" />
       </xsd:sequence>
       <xsd:attribute name="name" type="xsf:xdSignedDataBlockName" use="required" />
       <xsd:attribute name="data" type="xsd:string" use="required" />
       <xsd:attribute name="signatureLocation" type="xsd:string" use="required" />
       <xsd:attribute name="mode" type="xsf:xdSignatureRelationEnum" use="required" />
     </xsd:complexType>
     <xsd:unique name="signedDataBlock_name_unique">
       <xsd:selector xpath="." />
       <xsd:field xpath="@name" />
     </xsd:unique>
   </xsd:element>
   <!-- Version Upgrade -->
   <xsd:element name="documentVersionUpgrade">
     <xsd:complexType>
       <xsd:choice>
         <xsd:element ref="xsf:useScriptHandler" />
         <xsd:element ref="xsf:useTransform" />
       </xsd:choice>
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="useTransform">
     <xsd:complexType>
       <xsd:attribute name="transform" use="required">
         <xsd:simpleType>
           <xsd:union memberTypes="xsf:xdFileName xsf:xdEmptyString" />
         </xsd:simpleType>
       </xsd:attribute>
       <xsd:attribute name="minVersionToUpgrade" type="xsf:xdSolutionVersion" use="required" />
       <xsd:attribute name="maxVersionToUpgrade" type="xsf:xdSolutionVersion" />
     </xsd:complexType>
   </xsd:element>
   <!-- XSF Extensions -->
   <xsd:element name="extensions">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:extension" minOccurs="0" maxOccurs="unbounded" />
       </xsd:sequence>
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="extension">
     <xsd:complexType mixed="true">
       <xsd:sequence>
         <xsd:any minOccurs="0" maxOccurs="unbounded" processContents="lax" />
       </xsd:sequence>
       <xsd:attribute name="name" type="xsd:NMTOKEN" use="required" />
       <xsd:anyAttribute processContents="skip" />
     </xsd:complexType>
   </xsd:element>
   <!-- Rules -->
   <xsd:element name="ruleSetAction">
     <xsd:complexType>
       <xsd:attribute name="ruleSet" type="xsd:string" use="required" />
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="rule">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:choice minOccurs="0" maxOccurs="unbounded">
           <xsd:element ref="xsf:dialogBoxMessageAction" />
           <xsd:element ref="xsf:dialogBoxExpressionAction" />
           <xsd:element ref="xsf:switchViewAction" />
           <xsd:element ref="xsf:assignmentAction" />
           <xsd:element ref="xsf:changeAdapterProperty" />
           <xsd:element ref="xsf:queryAction" />
           <xsd:element name="submitAction">
             <xsd:complexType>
               <xsd:attribute name="adapter" type="xsf:xdTitle" use="required" />
             </xsd:complexType>
           </xsd:element>
           <xsd:element ref="xsf:openNewDocumentAction" />
           <xsd:element ref="xsf:signSignatureLineAction" />
           <xsd:element ref="xsf:closeDocumentAction" />
           <xsd:element ref="xsf:webPartConnectionAction" />
         </xsd:choice>
         <xsd:element name="exitRuleSet" minOccurs="0">
           <xsd:complexType />
         </xsd:element>
       </xsd:sequence>
       <xsd:attribute name="caption" type="xsd:string" use="required" />
       <xsd:attribute name="condition" type="xsd:string" use="optional" />
       <xsd:attribute name="isEnabled" type="xsf:xdYesNo" use="optional" default="yes" />
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="dialogBoxMessageAction">
     <xsd:simpleType>
       <xsd:restriction base="xsd:string">
         <xsd:maxLength value="1024" />
       </xsd:restriction>
     </xsd:simpleType>
   </xsd:element>
   <xsd:element name="dialogBoxExpressionAction" type="xsd:string" />
   <xsd:element name="switchViewAction">
     <xsd:complexType>
       <xsd:attribute name="view" type="xsf:xdViewName" use="required" />
     </xsd:complexType>
     <xsd:keyref name="switchViewAction_view_keyref" refer="xsf:view_name_key">
       <xsd:selector xpath="." />
       <xsd:field xpath="@view" />
     </xsd:keyref>
   </xsd:element>
   <xsd:element name="assignmentAction">
     <xsd:complexType>
       <xsd:attribute name="targetField" type="xsd:string" use="required" />
       <xsd:attribute name="expression" type="xsd:string" use="required" />
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="changeAdapterProperty">
     <xsd:complexType>
       <xsd:attribute name="adapter" type="xsd:string" use="required" />
       <xsd:attribute name="adapterProperty" type="xsd:string" use="required" />
       <xsd:attribute name="expression" type="xsd:string" use="required" />
     </xsd:complexType>
   </xsd:element>
  
   <xsd:element name="queryAction">
     <xsd:complexType>
       <xsd:attribute name="adapter" type="xsd:string" use="required" />
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="openNewDocumentAction">
     <xsd:complexType>
       <xsd:attribute name="solutionURI" type="xsd:anyURI" use="required" />
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="signSignatureLineAction">
     <xsd:complexType>
       <xsd:attribute name="matchCriteria" type="xsf:xdSignSignatureLineRuleEnum" use="required" />
       <xsd:attribute name="matchValue" type="xsd:string" use="required" />
       <xsd:attribute name="isExpression" type="xsf:xdYesNo" use="required" />
       <xsd:attribute name="signaturePictureEnabled" type="xsf:xdYesNo" use="required" />
       <xsd:attribute name="defaultSignaturePicture" type="xsd:string" use="optional" />
       <xsd:attribute name="isSignaturePictureExpression" type="xsf:xdYesNo" use="required" />
       <xsd:attribute name="checkHostEnabled" type="xsf:xdYesNo" use="required" />
       <xsd:attribute name="checkHost" type="xsd:string" use="optional" />
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="closeDocumentAction">
     <xsd:complexType>
       <xsd:attribute name="promptToSaveChanges" type="xsf:xdYesNo" use="required" />
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="webPartConnectionAction" />
   <xsd:element name="ruleSet">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:rule" minOccurs="1" maxOccurs="unbounded" />
       </xsd:sequence>
       <xsd:attribute name="name" type="xsd:string" use="required" />
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="ruleSets">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:ruleSet" minOccurs="0" maxOccurs="unbounded" />
       </xsd:sequence>
     </xsd:complexType>
     <xsd:unique name="ruleSets_name_unique">
       <xsd:selector xpath="./xsf:ruleSet" />
       <xsd:field xpath="@name" />
     </xsd:unique>
   </xsd:element>
   <!-- Declarative Calculations -->
   <xsd:element name="calculations">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element ref="xsf:calculatedField" minOccurs="0" maxOccurs="unbounded" />
       </xsd:sequence>
       <xsd:attribute name="treatBlankValueAsZero" type="xsf:xdYesNo" use="optional" />
     </xsd:complexType>
   </xsd:element>
   <xsd:element name="calculatedField">
     <xsd:complexType>
       <xsd:attribute name="target" type="xsd:string" use="required" />
       <xsd:attribute name="expression" type="xsd:string" use="required" />
       <xsd:attribute name="refresh" type="xsd:string" use="required" />
     </xsd:complexType>
   </xsd:element>
 </xsd:schema>