MINI MINI MANI MO

Path : /opt/oracle/product/18c/dbhomeXE/cv/cvdata/
File Upload :
Current File : //opt/oracle/product/18c/dbhomeXE/cv/cvdata/prereq.xsd

<?xml version="1.0"?>

<!--  $Header: opsm/cv/cvdata/prereq.xsd /main/33 2016/12/18 21:31:41 maboddu Exp $ -->

<!--
 Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved.

   NAME
     prereq.xsd - CVU prereq schema

   DESCRIPTION
     XML schema for CVU prereq xmls

   NOTES

   MODIFIED   (MM/DD/YY)
    maboddu     09/30/16 - Fix bug#24524511 - Enable prereq.xml to have
                           RELAX_PERCENTAGE attribute
    maboddu     09/01/16 - Fix bug#22809593 - add support for SHMMAX in STEP
                           element
    maboddu     03/18/16 - Add severity type FATAL
    maboddu     11/05/14 - Enhance CONDITION schema to allow flexible
                           conditions
    prajm       05/23/14 - corrected the condition to KERNEL_GROUP
    ptare       01/22/14 - add support for default shell limit values
    nvira       03/30/12 - add syntax for upgrade suitability
    nvira       10/18/11 - add RIM attribute
    nvira       05/26/11 - add section for RAC home patches
    nvira       04/12/11 - add check oracle patches
    nvira       05/10/10 - add range to condition
    nvira       02/11/10 - XbranchMerge msingal_bug-8653583 from main
    ptare       01/18/10 - Bug#8655778 Add Property EQ
    ptare       10/20/09 - updated for ENV_VAR_LIST element
    nvira       05/03/09 - update Architecture element to allow multiple
                           architectures
    nvira       04/24/09 - add attribute for package architecture
    nvira       03/11/09 - update xsd for run level
    nvira       02/02/09 - add min max attributes to swap space
    nvira       10/12/08 - add ospatch tag
    nvira       02/29/08 - Creation

-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.w3.org/2001/XMLSchema http://www.w3.org/2001/XMLSchema.xsd"
  elementFormDefault="qualified">
  <xs:element name="HOST">
    <xs:complexType>
      <xs:all>
        <xs:element name="SYSTEM" type="SYSTEM_TYPE"
          minOccurs="0" maxOccurs="1" />
        <xs:element name="CERTIFIED_SYSTEMS" type="CERTIFIED_SYSTEMS_TYPE"
          minOccurs="1" maxOccurs="1" />
        <xs:element name="REFERENCE_DEVICES" minOccurs="0" maxOccurs="1" >
          <xs:complexType>
            <xs:sequence>
              <!--
              CVU does not care about the contents of  this element. Hence the content 'any'
               -->
              <xs:any minOccurs="0" maxOccurs="unbounded"
                processContents="lax" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="SCRIPTS" minOccurs="0" maxOccurs="1" >
          <xs:complexType>
            <xs:sequence>
              <!--
              CVU does not care about the contents of  this element. Hence the content 'any'
               -->
              <xs:any minOccurs="0" maxOccurs="unbounded"
                processContents="lax" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="USER_INPUTS" minOccurs="0" maxOccurs="1" >
          <xs:complexType>
            <xs:sequence>
              <!--
              CVU does not care about the contents of  this element. Hence the content 'any'
               -->
              <xs:any minOccurs="0" maxOccurs="unbounded"
                processContents="lax" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="DIRS" minOccurs="0" maxOccurs="1" >
          <xs:complexType>
            <xs:sequence>
              <!--
              CVU does not care about the contents of  this element. Hence the content 'any'
               -->
              <xs:any minOccurs="0" maxOccurs="unbounded"
                processContents="lax" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="NETWORK" minOccurs="0" maxOccurs="1" >
          <xs:complexType>
            <xs:sequence>
              <!--
              CVU does not care about the contents of  this element. Hence the content 'any'
               -->
              <xs:any minOccurs="0" maxOccurs="unbounded"
                processContents="lax" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="ORACLE_HOME" minOccurs="0" maxOccurs="1" >
          <xs:complexType>
            <xs:sequence>
              <!--
              CVU does not care about the contents of  this element. Hence the content 'any'
               -->
              <xs:any minOccurs="0" maxOccurs="unbounded"
                processContents="lax" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:all>
      <xs:attribute name="PLATID" type="xs:string"  use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="SYSTEM_TYPE">
    <xs:all>
      <xs:element name="MEMORY" minOccurs="0" maxOccurs="1">
        <xs:complexType>
          <xs:all>
            <xs:element name="PHYSICAL_MEMORY" minOccurs="1"
              maxOccurs="1">
              <xs:complexType>
                <xs:attribute name="VALUE" type="NonNegativeDouble"  use="required"/>
                <xs:attribute name="RIM" type="NonNegativeDouble"  use="optional"/>
                <xs:attribute name="UNIT" type="STORAGE_UNITS_TYPE"
                  use="required" />
                <xs:attribute name="SEVERITY" type="SEVERITY_TYPE"
                  use="optional" />
                <xs:attribute name="RELAX_PERCENTAGE" type="xs:positiveInteger" use="optional" />
              </xs:complexType>
            </xs:element>
            <xs:element name="AVAILABLE_MEMORY" minOccurs="0"
              maxOccurs="1">
              <xs:complexType>
                <xs:attribute name="VALUE" type="NonNegativeDouble" use="required"/>
                <xs:attribute name="RIM" type="NonNegativeDouble"  use="optional"/>
                <xs:attribute name="UNIT" type="STORAGE_UNITS_TYPE"
                  use="required" />
                <xs:attribute name="SEVERITY" type="SEVERITY_TYPE"
                  use="optional" />
                <xs:attribute name="RELAX_PERCENTAGE" type="xs:positiveInteger" use="optional" />
              </xs:complexType>
            </xs:element>
            <xs:element name="SWAP_SIZE" type="SWAP_SIZE_TYPE"
              minOccurs="0" maxOccurs="1" />
          </xs:all>
        </xs:complexType>
      </xs:element>
      <xs:element name="SPACE" type="SPACE_TYPE" minOccurs="0"
        maxOccurs="1" />
      <xs:element name="USERS_GROUPS" type="USERS_GROUPS_TYPE"
        minOccurs="0" maxOccurs="1" />
      <xs:element name="RUNLEVEL" minOccurs="0" maxOccurs="1">
        <xs:complexType>
          <xs:sequence>
		    <xs:element name="LIST" minOccurs="0" maxOccurs="1">
		        <xs:complexType>
		          <xs:sequence>
		            <xs:element name="VALUE" minOccurs="1" maxOccurs="unbounded" type="xs:nonNegativeInteger"/> 
		          </xs:sequence>
		        </xs:complexType>
		    </xs:element>
		  </xs:sequence>
          <xs:attribute name="CURRENT" use="optional">
            <xs:simpleType>
              <xs:restriction base="xs:integer">
                <xs:minInclusive value="0" />
                <xs:maxInclusive value="9" />
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
          <xs:attribute name="DEFAULT" use="optional">
            <xs:simpleType>
              <xs:restriction base="xs:integer">
                <xs:minInclusive value="0" />
                <xs:maxInclusive value="9" />
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
          <xs:attribute name="SEVERITY" type="SEVERITY_TYPE" use="optional" />
        </xs:complexType>
      </xs:element>
      <xs:element name="SHELL_LIMIT_CHECKS" minOccurs="0"
        maxOccurs="1">
        <xs:complexType>
          <xs:group ref="SHELL_LIMITS_GROUP" />
        </xs:complexType>
      </xs:element>
      <xs:element name="PROCESS_CHECKS" minOccurs="0"
        maxOccurs="1">
        <xs:complexType>
            <!--
            Use group reference to allow nesting of CHOICE, CONDITION & PROCESS_CHECK tags
             -->
          <xs:group ref="PROCESSCHECKS_GROUP" minOccurs="0"
            maxOccurs="unbounded" />
        </xs:complexType>
      </xs:element>
      <xs:element name="ORACLE_PATCH_CHECKS" minOccurs="0" maxOccurs="1">
        <xs:complexType>
        <xs:sequence>
          <xs:element name="SOURCE_HOME_PATCHES" minOccurs="0" maxOccurs="1">
            <xs:complexType>
              <xs:group ref="ORACLE_PATCH_GROUP" minOccurs="0" maxOccurs="unbounded" />
            </xs:complexType>
          </xs:element>
          <xs:element name="DESTINATION_HOME_PATCHES" minOccurs="0" maxOccurs="1">
            <xs:complexType>
              <xs:group ref="ORACLE_PATCH_GROUP" minOccurs="0" maxOccurs="unbounded" />
            </xs:complexType>
          </xs:element>
          <xs:element name="RAC_HOME_PATCHES" minOccurs="0" maxOccurs="1">
            <xs:complexType>
              <xs:group ref="ORACLE_PATCH_GROUP" minOccurs="0" maxOccurs="unbounded" />
            </xs:complexType>
          </xs:element>
        </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="UPGRADE_SUITABILITY_MATRIX" minOccurs="0" maxOccurs="1" type="UPGRADE_SUITABILITY_MATRIX_TYPE" />
    </xs:all>
  </xs:complexType>
  <xs:complexType name="CERTIFIED_SYSTEMS_TYPE">
    <xs:sequence>
      <xs:element name="OPERATING_SYSTEM" type="OPERATING_SYSTEM_TYPE"
        minOccurs="1" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="SPACE_TYPE">
    <xs:sequence>
      <xs:element name="LOC" minOccurs="1" maxOccurs="unbounded">
        <xs:complexType>
          <!--
          NOTE: Either VAR or VALUE must be specified. It is not possible to mandate to mandate one attribute over the other in the grammar.
          The either or is enforced while constructing the task list in Java.
           -->
          <xs:attribute name="VAR" type="xs:string" use="optional" />
          <xs:attribute name="VALUE" type="xs:string" use="optional" />
          <xs:attribute name="SIZE" type="NonNegativeDouble" use="required"/>
          <xs:attribute name="RIM" type="NonNegativeDouble" use="optional" />
          <xs:attribute name="UNIT" type="STORAGE_UNITS_TYPE"
            use="required" />
          <xs:attribute name="TEMP" type="xs:boolean" use="optional" />
        	<xs:attribute name="SEVERITY" type="SEVERITY_TYPE" use="optional" />
          <xs:attribute name="RELAX_PERCENTAGE" type="xs:positiveInteger" use="optional" />
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="STORAGE_UNITS_TYPE">
    <xs:restriction base="xs:string">
      <xs:enumeration value="B" />
      <xs:enumeration value="KB" />
      <xs:enumeration value="MB" />
      <xs:enumeration value="GB" />
      <xs:enumeration value="TB" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="RANGE_OPERATOR_TYPE">
    <xs:restriction base="xs:string">
      <xs:enumeration value="ATLEAST" />
      <xs:enumeration value="ATMOST" />
      <xs:enumeration value="GREATER_THAN" />
      <xs:enumeration value="LESS_THAN" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="SEVERITY_TYPE">
    <xs:restriction base="xs:string">
      <xs:enumeration value="FATAL" />
      <xs:enumeration value="CRITICAL" />
      <xs:enumeration value="IGNORABLE" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="NonNegativeDouble">
    <xs:restriction base="xs:double">
      <xs:minInclusive value="0.0" />
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="USERS_GROUPS_TYPE">
    <xs:group ref="USERS_GROUPS_XSDGROUP" minOccurs="0" maxOccurs="unbounded" />
  </xs:complexType>
  <xs:group name="USERS_GROUPS_XSDGROUP">
    <xs:choice>
      <xs:element name="USER" type="USER_TYPE" />
      <xs:element name="GROUP" type="GROUP_TYPE" />
      <xs:element name="CONDITION" type="USER_CONDITION_TYPE" /> 
    </xs:choice>
  </xs:group>

  <xs:complexType name="USER_TYPE">
     <xs:sequence>
       <xs:element name="GROUP" minOccurs="0" maxOccurs="unbounded" type="GROUP_TYPE" />
     </xs:sequence>
       <!--
       NOTE: Either VAR or VALUE must be specified. It is not possible to mandate to mandate one attribute over the other in the grammar.
       The either or is enforced while constructing the task list in Java.
        -->
     <xs:attribute name="VAR" type="xs:string" use="optional" />
     <xs:attribute name="VALUE" type="xs:string" use="optional" />
     <xs:attribute name="SEVERITY" type="SEVERITY_TYPE" use="optional" />
  </xs:complexType>
  <xs:complexType name="GROUP_TYPE">
    <!--
    NOTE: Either VAR or VALUE must be specified. It is not possible to mandate to mandate one attribute over the other in the grammar.
    The either or is enforced while constructing the task list in Java.
     -->
    <xs:attribute name="VAR" type="xs:string"
      use="optional" />
    <xs:attribute name="VALUE" type="xs:string"
      use="optional" />
    <xs:attribute name="ACTIVE" type="xs:boolean"
      use="optional" />
    <xs:attribute name="SEVERITY" type="SEVERITY_TYPE" use="optional" />
  </xs:complexType>

  <xs:complexType name="USER_CONDITION_TYPE">
          <xs:sequence>
            <xs:element name="VAR_TASK" type="VAR_TASK_TYPE" minOccurs="0" maxOccurs="1" />
            <xs:group ref="USERS_GROUPS_XSDGROUP" minOccurs="0"
            maxOccurs="unbounded" />
            <xs:element name="ELSE" type="USER_CONDITION_TYPE"
              minOccurs="0" maxOccurs="1" />
          </xs:sequence>
          <xs:attribute name="VAR" type="xs:string" 
            use="optional" />
          <xs:attribute name="TYPE" type="xs:string"
            use="optional" />
          <xs:attribute name="EQ" type="xs:string"
            use="optional" />
          <xs:attribute name="NE" type="xs:string"
            use="optional" />
          <xs:attribute name="RE" type="xs:string"
            use="optional" />
          <xs:attribute name="ATLEAST" type="xs:string"
            use="optional" />
          <xs:attribute name="ATMOST" type="xs:string"
            use="optional" />
          <xs:attribute name="GREATER_THAN" type="xs:string"
            use="optional" />
          <xs:attribute name="LESS_THAN" type="xs:string"
            use="optional" />
  </xs:complexType>

  <!--
  NOTE: Swap size can be specified interms of multiple of Physical Memory or as an absolute value.
  Thus either of the following are valid expressions for Swap size:

            <SWAP_SIZE>
            <STEPS>
               <STEP NAME="PHYSICAL_MEMORY" ATLEAST="0" ATMOST="256" UNIT="MB" MULTIPLE="3"/>
               <STEP NAME="PHYSICAL_MEMORY" GREATER_THAN="256" ATMOST="512" UNIT="MB" MULTIPLE="2"/>
               <STEP NAME="PHYSICAL_MEMORY" GREATER_THAN="512" ATMOST="2048" UNIT="MB" MULTIPLE="1.5"/>
               <STEP NAME="PHYSICAL_MEMORY" GREATER_THAN="2048" ATMOST="8192" UNIT="MB" MULTIPLE="1"/>
               <STEP NAME="PHYSICAL_MEMORY" GREATER_THAN="8192" UNIT="MB" MULTIPLE="0.75"/>
            </STEPS>
          </SWAP_SIZE>

  OR

            <SWAP_SIZE  VALUE="20" UNIT="MB"/>

   It is not possible to enforce either or definition of swap size in the grammar. Hence, the definition combines the two form in a single declaration.
   The either or is enforced while constructing the task list in Java.
   -->
  <xs:complexType name="SWAP_SIZE_TYPE">
    <xs:all>
      <xs:element name="STEPS" minOccurs="0" maxOccurs="1" type="STEPS_TYPE">
      </xs:element>
    </xs:all>
    <xs:attribute name="VALUE" type="NonNegativeDouble" use="optional" />
    <xs:attribute name="RIM" type="NonNegativeDouble"  use="optional"/>
    
    <xs:attribute name="UNIT" type="STORAGE_UNITS_TYPE" use="optional" />
	  <xs:attribute name="SEVERITY" type="SEVERITY_TYPE" use="optional" />
    <xs:attribute name="RELAX_PERCENTAGE" type="xs:positiveInteger" use="optional" />
  </xs:complexType>
  <xs:complexType name="STEPS_TYPE">
        <xs:sequence>
            <xs:element name="MIN" minOccurs="0" maxOccurs="1">
              <xs:complexType>
                <xs:attribute name="VALUE" type="NonNegativeDouble" use="required" />
                <xs:attribute name="UNIT" type="STORAGE_UNITS_TYPE" use="required" />
              </xs:complexType>
            </xs:element>
            <xs:element name="MAX" minOccurs="0" maxOccurs="1">
              <xs:complexType>
                <xs:attribute name="VALUE" type="NonNegativeDouble" use="required" />
                <xs:attribute name="UNIT" type="STORAGE_UNITS_TYPE" use="required" />
              </xs:complexType>
            </xs:element>
            <xs:element name="STEP" minOccurs="1" maxOccurs="unbounded">
              <xs:complexType>
                <xs:attribute name="NAME" use="required">
                  <xs:simpleType>
                    <xs:restriction base="xs:string">
                      <!--
                        NOTE: In future swap size could be expressed as multiple of attributes other than PHYSICAL_MEMORY.
                        But currently we only support PHYSICAL_MEMORY.
                      -->
                      <xs:enumeration value="PHYSICAL_MEMORY" />
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
                <!--
                  NOTE: When specifying the range at least one of the range operators are mandatory out of VALUE, ATLEAST,ATMOST, GREATER_THAN, LESS_THAN.
                  It is not possible to express this requirement in XSD. It will be enforced in Java.
                -->
                <xs:attribute name="ATLEAST" type="NonNegativeDouble" use="optional" />
                <xs:attribute name="ATMOST" type="NonNegativeDouble" use="optional" />
                <xs:attribute name="GREATER_THAN" type="NonNegativeDouble" use="optional" />
                <xs:attribute name="LESS_THAN" type="NonNegativeDouble" use="optional" />
                <xs:attribute name="UNIT" type="STORAGE_UNITS_TYPE" use="required" />
                <xs:attribute name="MULTIPLE" type="NonNegativeDouble" use="required" />
              </xs:complexType>
            </xs:element>
          </xs:sequence>
  </xs:complexType>
  <xs:complexType name="OPERATING_SYSTEM_TYPE">
    <xs:all>
      <xs:element name="VERSION" minOccurs="0" maxOccurs="1">
        <xs:complexType>
          <xs:attribute name="VALUE" type="xs:string" use="required" />
        </xs:complexType>
      </xs:element>
      <xs:element name="ARCHITECTURE" minOccurs="0"
        maxOccurs="1">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="LIST" minOccurs="0" maxOccurs="1">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="VALUE" minOccurs="1" maxOccurs="unbounded" type="xs:string"/> 
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="VALUE" type="xs:string" use="optional" />
        </xs:complexType>
      </xs:element>
      <xs:element name="OSPATCH_CHECKS" minOccurs="0" maxOccurs="1">
        <xs:complexType>
          <xs:group ref="OSPATCH_GROUP" minOccurs="0" maxOccurs="unbounded" />
        </xs:complexType>
      </xs:element>
      <xs:element name="NAME" minOccurs="0" maxOccurs="1">
        <xs:complexType>
          <xs:attribute name="VALUE" type="xs:string" use="required" />
        </xs:complexType>
      </xs:element>
      <xs:element name="VENDOR" minOccurs="0" maxOccurs="1">
        <xs:complexType>
          <xs:attribute name="VALUE" type="xs:string" use="required" />
        </xs:complexType>
      </xs:element>
      <xs:element name="ENV_VAR_LIST" minOccurs="0" maxOccurs="1">
        <xs:complexType>
         <xs:sequence>
          <xs:element name="ENV_VAR" minOccurs="0"  maxOccurs="unbounded">
           <xs:complexType>
              <xs:attribute name="NAME" type="xs:string" use="required" />
              <xs:attribute name="MAX_LENGTH" type="xs:string" use="optional" />
              <xs:attribute name="SET" type="xs:boolean" use="optional" />
           </xs:complexType>
          </xs:element>
         </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="KERNEL_VER" type="KERNEL_VER_TYPE" minOccurs="0" maxOccurs="1" />
      <xs:element name="KERNEL_VERSION" minOccurs="0" maxOccurs="1">
        <xs:complexType>
            <!--
            Use group reference to allow nesting of CHOICE, CONDITION & PROPERTY tags
             -->
          <xs:group ref="KERNEL_VERSION_GROUP" minOccurs="0" maxOccurs="unbounded" />
        </xs:complexType>
      </xs:element>
      <xs:element name="KERNEL" minOccurs="0" maxOccurs="1">
        <xs:complexType>
            <!--
            Use group reference to allow nesting of CHOICE, CONDITION & PROPERTY tags
             -->
          <xs:group ref="KERNEL_GROUP" minOccurs="0" maxOccurs="unbounded" />
        </xs:complexType>
      </xs:element>
      <xs:element name="PACKAGES" minOccurs="0" maxOccurs="1">
        <xs:complexType>
          <xs:group ref="PACKAGE_GROUP" minOccurs="0"
            maxOccurs="unbounded" />
        </xs:complexType>
      </xs:element>
      <xs:element name="SYSTEM_FILES" minOccurs="0"
        maxOccurs="1">
        <xs:complexType>
          <xs:sequence>
              <!--
              CVU does not care about the contents of  this element. Hence the content 'any'
               -->
            <xs:any minOccurs="0" maxOccurs="unbounded"
              processContents="lax" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:all>
    <xs:attribute name="RELEASE" type="xs:string" use="required" />
  </xs:complexType>
  
  <xs:group name="KERNEL_VERSION_GROUP">
    <xs:choice>
      <xs:element name="KERNEL_VER" type="KERNEL_VER_TYPE" minOccurs="0" maxOccurs="1" />
      <xs:element name="CHOICE"  minOccurs="0" maxOccurs="1">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SELECTION" minOccurs="0"
              maxOccurs="unbounded">
              <xs:complexType>
               <xs:all>
					      <xs:element name="KERNEL_VER" type="KERNEL_VER_TYPE" minOccurs="1" maxOccurs="1" />
					     </xs:all>
					     <xs:attribute name="VALUE" type="xs:string" />
              </xs:complexType>
            </xs:element>
            <xs:element name="DEFAULT" minOccurs="0" maxOccurs="1">
              <xs:complexType>
               <xs:all>
                <xs:element name="KERNEL_VER" type="KERNEL_VER_TYPE" minOccurs="1" maxOccurs="1" />
               </xs:all>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="VAR" type="xs:string" />
        </xs:complexType>
      </xs:element>
    </xs:choice>
  </xs:group>
  
    <xs:complexType name="KERNEL_VER_TYPE">
     <xs:attribute name="VALUE" type="xs:string" use="required" />
     <xs:attribute name="RIM" type="xs:string" use="optional" />
    </xs:complexType>
  
  
  <xs:group name="KERNEL_GROUP">
    <xs:choice>
      <xs:element name="PROPERTY">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="STEPS" minOccurs="0" maxOccurs="1">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="MIN" minOccurs="0" maxOccurs="1">
                    <xs:complexType>
                      <xs:attribute name="VALUE" type="NonNegativeDouble" use="required" />
                      <xs:attribute name="UNIT" type="STORAGE_UNITS_TYPE" use="required" />
                    </xs:complexType>
                  </xs:element> 
                  <xs:element name="MAX" minOccurs="0" maxOccurs="1">
                    <xs:complexType>
                      <xs:attribute name="VALUE" type="NonNegativeDouble" use="required" />
                      <xs:attribute name="UNIT" type="STORAGE_UNITS_TYPE" use="required" />
                    </xs:complexType>
                  </xs:element>
                  <xs:element name="STEP" minOccurs="1" maxOccurs="unbounded">
                    <xs:complexType>
                      <xs:attribute name="NAME" use="required">
                        <xs:simpleType>
                          <xs:restriction base="xs:string">
                            <!--
                            NOTE: In future Kernel parameters could be expressed as multiple of
                            attributes other than PHYSICAL_MEMORY and SHMMAX. But currently we only
                            support PHYSICAL_MEMORY and SHMMAX
                            -->
                            <xs:enumeration value="PHYSICAL_MEMORY" />
                            <xs:enumeration value="SHMMAX" />
                          </xs:restriction>
                        </xs:simpleType>
                      </xs:attribute>
                      <!--
                      NOTE: When specifiying the range at least one of the range
                      operators are manadatory out of VALUE, ATLEAST,ATMOST,
                      GREATER_THAN, LESS_THAN. It is not possible to express this
                      requirement in XSD. It will be enforced in Java.
                      -->
                      <xs:attribute name="ATLEAST" type="NonNegativeDouble" use="optional" />
                      <xs:attribute name="ATMOST" type="NonNegativeDouble" use="optional" />
                      <xs:attribute name="GREATER_THAN" type="NonNegativeDouble" use="optional" />
                      <xs:attribute name="LESS_THAN" type="NonNegativeDouble" use="optional" />
                      <xs:attribute name="UNIT" type="STORAGE_UNITS_TYPE" use="required" />
                      <xs:attribute name="MULTIPLE" type="NonNegativeDouble" use="required" />
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="NAME" type="xs:string" use="required" />
          <xs:attribute name="NAME2" type="xs:string" use="optional" />
            <!--
            NOTE: When specifying the range at least one of the range operators are mandatory of VALUE, ATLEAST,ATMOST, GREATER_THAN, LESS_THAN.
            It is not possible to express this requirement in XSD. It will be enforced in Java.
             -->
          <xs:attribute name="VALUE" type="xs:string"
            use="optional" />
          <xs:attribute name="EQ" type="xs:string"
            use="optional" />
          <xs:attribute name="ATLEAST" type="xs:string"
            use="optional" />
          <xs:attribute name="ATMOST" type="xs:string"
            use="optional" />
          <xs:attribute name="GREATER_THAN" type="xs:string"
            use="optional" />
          <xs:attribute name="LESS_THAN" type="xs:string"
            use="optional" />
          <xs:attribute name="SEVERITY" type="SEVERITY_TYPE" use="optional" />
          <xs:attribute name="RELAX_PERCENTAGE" type="xs:positiveInteger" use="optional" />
        </xs:complexType>
      </xs:element>
      <xs:element name="CHOICE">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SELECTION" minOccurs="0"
              maxOccurs="unbounded">
              <xs:complexType>
                <xs:group ref="KERNEL_GROUP" minOccurs="0"
                  maxOccurs="unbounded" />
                <xs:attribute name="VALUE" type="xs:string" />
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="VAR" type="xs:string" />
        </xs:complexType>
      </xs:element>
      <xs:element name="CONDITION" type="KERNEL_CONDITION_TYPE" />
    </xs:choice>
  </xs:group>

  <xs:complexType name="KERNEL_CONDITION_TYPE">
          <xs:sequence>
            <xs:element name="VAR_TASK" type="VAR_TASK_TYPE" minOccurs="0" maxOccurs="1" />
            <xs:group ref="KERNEL_GROUP" minOccurs="0"
              maxOccurs="unbounded" />
            <xs:element name="ELSE" type="KERNEL_CONDITION_TYPE"
              minOccurs="0" maxOccurs="1" />
          </xs:sequence>
          <xs:attribute name="VAR" type="xs:string" 
            use="optional" />
          <xs:attribute name="TYPE" type="xs:string"
            use="optional" />
          <xs:attribute name="EQ" type="xs:string"
            use="optional" />
          <xs:attribute name="NE" type="xs:string"
            use="optional" />
          <xs:attribute name="RE" type="xs:string"
            use="optional" />
          <xs:attribute name="ATLEAST" type="xs:string"
            use="optional" />
          <xs:attribute name="ATMOST" type="xs:string"
            use="optional" />
          <xs:attribute name="GREATER_THAN" type="xs:string"
            use="optional" />
          <xs:attribute name="LESS_THAN" type="xs:string"
            use="optional" />
  </xs:complexType>
  <xs:group name="OSPATCH_GROUP">
    <xs:choice>
      <xs:element name="OSPATCH" minOccurs="1" maxOccurs="unbounded">
        <xs:complexType>
          <xs:attribute name="VALUE" type="xs:string" use="required" />
          <xs:attribute name="SEVERITY" type="SEVERITY_TYPE" use="optional" />
        </xs:complexType>
      </xs:element>
      <xs:element name="CHOICE">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SELECTION" minOccurs="0"
              maxOccurs="unbounded">
              <xs:complexType>
                <xs:group ref="OSPATCH_GROUP" minOccurs="0"
                  maxOccurs="unbounded" />
                <xs:attribute name="VALUE" type="xs:string" />
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="VAR" type="xs:string" />
        </xs:complexType>
      </xs:element>
      <xs:element name="CONDITION" type="OSPATCH_CONDITION_TYPE" />
    </xs:choice>
  </xs:group>

  <xs:complexType name="OSPATCH_CONDITION_TYPE">
          <xs:sequence>
            <xs:element name="VAR_TASK" type="VAR_TASK_TYPE" minOccurs="0" maxOccurs="1" />
            <xs:group ref="OSPATCH_GROUP" minOccurs="0" maxOccurs="unbounded" />
            <xs:element name="ELSE" type="OSPATCH_CONDITION_TYPE"
              minOccurs="0" maxOccurs="1" />
          </xs:sequence>
          <xs:attribute name="VAR" type="xs:string" 
            use="optional" />
          <xs:attribute name="TYPE" type="xs:string"
            use="optional" />
          <xs:attribute name="EQ" type="xs:string"
            use="optional" />
          <xs:attribute name="NE" type="xs:string"
            use="optional" />
          <xs:attribute name="RE" type="xs:string"
            use="optional" />
          <xs:attribute name="ATLEAST" type="xs:string"
            use="optional" />
          <xs:attribute name="ATMOST" type="xs:string"
            use="optional" />
          <xs:attribute name="GREATER_THAN" type="xs:string"
            use="optional" />
          <xs:attribute name="LESS_THAN" type="xs:string"
            use="optional" />
  </xs:complexType>

  <xs:group name="ORACLE_PATCH_GROUP">
    <xs:choice>
      <xs:element name="ORACLE_PATCH" minOccurs="1" maxOccurs="unbounded">
        <xs:complexType>
          <xs:attribute name="VALUE" type="xs:string" use="required" />
          <xs:attribute name="SEVERITY" type="SEVERITY_TYPE" use="optional" />
        </xs:complexType>
      </xs:element>
      <xs:element name="CHOICE">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SELECTION" minOccurs="0"
              maxOccurs="unbounded">
              <xs:complexType>
                <xs:group ref="ORACLE_PATCH_GROUP" minOccurs="0"
                  maxOccurs="unbounded" />
                <xs:attribute name="VALUE" type="xs:string" />
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="VAR" type="xs:string" />
        </xs:complexType>
      </xs:element>
      <xs:element name="CONDITION" type="ORACLE_PATCH_CONDITION_TYPE" />
    </xs:choice>
  </xs:group>

  <xs:complexType  name="ORACLE_PATCH_CONDITION_TYPE">
          <xs:sequence>
            <xs:element name="VAR_TASK" type="VAR_TASK_TYPE" minOccurs="0" maxOccurs="1" />
            <xs:group ref="ORACLE_PATCH_GROUP" minOccurs="0" maxOccurs="unbounded" />
            <xs:element name="ELSE" type="ORACLE_PATCH_CONDITION_TYPE"
              minOccurs="0" maxOccurs="1" />
          </xs:sequence>
          <xs:attribute name="VAR" type="xs:string" 
            use="optional" />
          <xs:attribute name="TYPE" type="xs:string"
            use="optional" />
          <xs:attribute name="EQ" type="xs:string"
            use="optional" />
          <xs:attribute name="NE" type="xs:string"
            use="optional" />
          <xs:attribute name="RE" type="xs:string"
            use="optional" />
          <xs:attribute name="ATLEAST" type="xs:string"
            use="optional" />
          <xs:attribute name="ATMOST" type="xs:string"
            use="optional" />
          <xs:attribute name="GREATER_THAN" type="xs:string"
            use="optional" />
          <xs:attribute name="LESS_THAN" type="xs:string"
            use="optional" />
  </xs:complexType>

  <xs:group name="PACKAGE_GROUP">
    <xs:choice>
      <!--
      NOTE: Package value can be specified as a range or as an absolute value.
      Thus either of the following are valid expressions for PACKAGE:

            <PACKAGE NAME="glibc">
               <RANGE ATLEAST="2.2.4-31.7" ATMOST="2.2.4-37.9">
                  <EXCLUDE VALUE="2.2.4-31.8"/>
                  <EXCLUDE ATLEAST="2.2.4-32" ATMOST="2.2.4-33"/>
               </RANGE>
            </PACKAGE>

       OR

           <PACKAGE NAME="libaio" VALUE="0.3.96" />

       It is not possible to enforce either or definition of swap size in the grammar. Hence, the definition combines the two form in a single declaration.
       The either or is enforced while constructing the task list in Java.
       -->
      <xs:element name="PACKAGE">
        <xs:complexType>
          <xs:sequence>
            <!--
            NOTE: When specifying the range at least one of the range operators are mandatory out of VALUE, ATLEAST,ATMOST, GREATER_THAN, LESS_THAN.
            It is not possible to express this requirement in XSD. It will be enforced in Java.
             -->
            <xs:element name="RANGE" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="EXCLUDE" minOccurs="0"
                    maxOccurs="unbounded">
                    <xs:complexType>
                      <xs:attribute name="VALUE" type="xs:string"
                        use="optional" />
                      <xs:attribute name="ATLEAST" type="xs:string"
                        use="optional" />
                      <xs:attribute name="ATMOST" type="xs:string"
                        use="optional" />
                      <xs:attribute name="GREATER_THAN"
                        type="xs:string" use="optional" />
                      <xs:attribute name="LESS_THAN" type="xs:string"
                        use="optional" />
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="ATLEAST" type="xs:string"
                  use="optional" />
                <xs:attribute name="ATMOST" type="xs:string"
                  use="optional" />
                <xs:attribute name="GREATER_THAN" type="xs:string"
                  use="optional" />
                <xs:attribute name="LESS_THAN" type="xs:string"
                  use="optional" />
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <!--
            NOTE: Either NAME or VAR must be specified. It is not possible to mandate to mandate one attribute over the other in the grammar.
            The either or is enforced while constructing the task list in Java.
          -->
          <xs:attribute name="NAME" type="xs:string" use="optional" />
          <xs:attribute name="VAR" type="xs:string" use="optional" />
          <xs:attribute name="VALUE" type="xs:string" use="optional" />
          <xs:attribute name="SEVERITY" type="SEVERITY_TYPE" use="optional" />
          <xs:attribute name="ARCHITECTURE" type="xs:string" use="optional" />
        </xs:complexType>
      </xs:element>
      <xs:element name="CHOICE">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SELECTION" minOccurs="0"
              maxOccurs="unbounded">
              <xs:complexType>
                <xs:group ref="PACKAGE_GROUP" minOccurs="0"
                  maxOccurs="unbounded" />
                <xs:attribute name="VALUE" type="xs:string" />
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="VAR" type="xs:string" />
        </xs:complexType>
      </xs:element>
      <xs:element name="CONDITION" type="PACKAGE_CONDITION_TYPE" />
    </xs:choice>
  </xs:group>

  <xs:complexType  name="PACKAGE_CONDITION_TYPE">
          <xs:sequence>
            <xs:element name="VAR_TASK" type="VAR_TASK_TYPE" minOccurs="0" maxOccurs="1" />
            <xs:group ref="PACKAGE_GROUP" minOccurs="0"
              maxOccurs="unbounded" />
            <xs:element name="ELSE" type="PACKAGE_CONDITION_TYPE"
              minOccurs="0" maxOccurs="1" />
          </xs:sequence>
          <xs:attribute name="VAR" type="xs:string" 
            use="optional" />
          <xs:attribute name="TYPE" type="xs:string"
            use="optional" />
          <xs:attribute name="EQ" type="xs:string"
            use="optional" />
          <xs:attribute name="NE" type="xs:string"
            use="optional" />
          <xs:attribute name="RE" type="xs:string"
            use="optional" />
          <xs:attribute name="ATLEAST" type="xs:string"
            use="optional" />
          <xs:attribute name="ATMOST" type="xs:string"
            use="optional" />
          <xs:attribute name="GREATER_THAN" type="xs:string"
            use="optional" />
          <xs:attribute name="LESS_THAN" type="xs:string"
            use="optional" />
  </xs:complexType>

  <xs:group name="PROCESSCHECKS_GROUP">
    <xs:choice>
      <xs:element name="PROCESS">
        <xs:complexType>
          <xs:attribute name="NAME" type="xs:string" use="required" />
          <xs:attribute name="EXISTS" >
             <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <!--
                    FIXME: This should be defined as boolean, but the existing sample-prereq.xml defines value as TRUE which is not a valid boolean value.
                     -->
                    <xs:enumeration value="true" />
                    <xs:enumeration value="TRUE" />
                    <xs:enumeration value="false" />
                    <xs:enumeration value="FALSE" />
                  </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
          <xs:attribute name="SEVERITY" type="SEVERITY_TYPE" use="optional" />
        </xs:complexType>
      </xs:element>
      <xs:element name="CHOICE">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SELECTION" minOccurs="0"
              maxOccurs="unbounded">
              <xs:complexType>
                <xs:group ref="PROCESSCHECKS_GROUP" minOccurs="0"
                  maxOccurs="unbounded" />
                <xs:attribute name="VALUE" type="xs:string" />
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="VAR" type="xs:string" />
        </xs:complexType>
      </xs:element>
      <xs:element name="CONDITION" type="PROCESS_CONDITION_TYPE" />
    </xs:choice>
  </xs:group>
  
  <xs:complexType name="PROCESS_CONDITION_TYPE">
          <xs:sequence>
            <xs:element name="VAR_TASK" type="VAR_TASK_TYPE" minOccurs="0" maxOccurs="1" />
            <xs:group ref="PROCESSCHECKS_GROUP" minOccurs="0"
              maxOccurs="unbounded" />
            <xs:element name="ELSE" type="PROCESS_CONDITION_TYPE"
              minOccurs="0" maxOccurs="1" />
          </xs:sequence>
          <xs:attribute name="VAR" type="xs:string" 
            use="optional" />
          <xs:attribute name="TYPE" type="xs:string"
            use="optional" />
          <xs:attribute name="EQ" type="xs:string"
            use="optional" />
          <xs:attribute name="NE" type="xs:string"
            use="optional" />
          <xs:attribute name="RE" type="xs:string"
            use="optional" />
          <xs:attribute name="ATLEAST" type="xs:string"
            use="optional" />
          <xs:attribute name="ATMOST" type="xs:string"
            use="optional" />
          <xs:attribute name="GREATER_THAN" type="xs:string"
            use="optional" />
          <xs:attribute name="LESS_THAN" type="xs:string"
            use="optional" />
  </xs:complexType>
  
  <xs:group name="SHELL_LIMITS_GROUP">
    <xs:all>
        <xs:element name="FILE_DESCRIPTORS" minOccurs="0" maxOccurs="1">
            <xs:complexType>
             <xs:group ref="FILE_DESCRIPTOR_GROUP" minOccurs="0" maxOccurs="1" />
            </xs:complexType>
        </xs:element>
        <xs:element name="MAXPROC" minOccurs="0" maxOccurs="1" >
            <xs:complexType>
             <xs:group ref="MAXPROC_GROUP" minOccurs="0" maxOccurs="1" />
            </xs:complexType>
        </xs:element>
        <xs:element name="STACK" minOccurs="0" maxOccurs="1">
            <xs:complexType>
             <xs:group ref="STACK_GROUP" minOccurs="0" maxOccurs="1" />
            </xs:complexType>
        </xs:element>
        <xs:element name="CHOICE">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="SELECTION" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:all>
                     <xs:element name="FILE_DESCRIPTORS"  minOccurs="0" maxOccurs="1">
                       <xs:complexType>
                         <xs:group ref="FILE_DESCRIPTOR_GROUP" minOccurs="0" maxOccurs="1" />
                       </xs:complexType>
                     </xs:element>
                     <xs:element name="MAXPROC"  minOccurs="0" maxOccurs="1">
                       <xs:complexType>
                         <xs:group ref="MAXPROC_GROUP" minOccurs="0" maxOccurs="1" />
                       </xs:complexType>
                     </xs:element>
                     <xs:element name="STACK"  minOccurs="0" maxOccurs="1">
                       <xs:complexType>
                         <xs:group ref="STACK_GROUP" minOccurs="0" maxOccurs="1" />
                       </xs:complexType>
                     </xs:element>
                  </xs:all>
                  <xs:attribute name="VALUE" type="xs:string" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="VAR" type="xs:string" />
          </xs:complexType>
        </xs:element>
    </xs:all>
  </xs:group>
  <xs:group name="FILE_DESCRIPTOR_GROUP">
    <xs:all>
            <xs:element name="HARDLIMIT" minOccurs="0" maxOccurs="1">
              <xs:complexType>
                 <xs:attribute name="VALUE" type="xs:positiveInteger" />
                 <xs:attribute name="RIM" type="xs:positiveInteger" use="optional" />
                 <xs:attribute name="SEVERITY" type="SEVERITY_TYPE" use="optional" />
                 <xs:attribute name="RELAX_PERCENTAGE" type="xs:positiveInteger" use="optional" />
              </xs:complexType>
            </xs:element>
            <xs:element name="SOFTLIMIT" minOccurs="0" maxOccurs="1">
              <xs:complexType>
                <xs:attribute name="VALUE" type="xs:positiveInteger" />
                <xs:attribute name="RIM" type="xs:positiveInteger" use="optional" />
                <xs:attribute name="SEVERITY" type="SEVERITY_TYPE" use="optional" />
                <xs:attribute name="RELAX_PERCENTAGE" type="xs:positiveInteger" use="optional" />
              </xs:complexType>
            </xs:element>
    </xs:all>
  </xs:group>
  <xs:group name="MAXPROC_GROUP">
    <xs:all>
            <xs:element name="HARDLIMIT" minOccurs="0" maxOccurs="1">
              <xs:complexType>
                <xs:attribute name="VALUE" type="xs:positiveInteger" />
                <xs:attribute name="RIM" type="xs:positiveInteger" use="optional" />
                <xs:attribute name="SEVERITY" type="SEVERITY_TYPE" use="optional" />
                <xs:attribute name="RELAX_PERCENTAGE" type="xs:positiveInteger" use="optional" />
              </xs:complexType>
            </xs:element>
            <xs:element name="SOFTLIMIT" minOccurs="0" maxOccurs="1">
              <xs:complexType>
                <xs:attribute name="VALUE" type="xs:positiveInteger" />
                <xs:attribute name="RIM" type="xs:positiveInteger" use="optional" />
                <xs:attribute name="SEVERITY" type="SEVERITY_TYPE" use="optional" />
                <xs:attribute name="RELAX_PERCENTAGE" type="xs:positiveInteger" use="optional" />
              </xs:complexType>
            </xs:element>
    </xs:all>
  </xs:group>
  <xs:group name="STACK_GROUP">
    <xs:all>
            <xs:element name="HARDLIMIT" minOccurs="0" maxOccurs="1">
              <xs:complexType>
                <xs:attribute name="VALUE" type="xs:positiveInteger" />
                <xs:attribute name="RIM" type="xs:positiveInteger" use="optional" />
                <xs:attribute name="UNIT" type="STORAGE_UNITS_TYPE" use="required" />
                <xs:attribute name="OPERATOR" type="RANGE_OPERATOR_TYPE" use="optional" />
                <xs:attribute name="SEVERITY" type="SEVERITY_TYPE" use="optional" />
                <xs:attribute name="RELAX_PERCENTAGE" type="xs:positiveInteger" use="optional" />
              </xs:complexType>
            </xs:element>
            <xs:element name="SOFTLIMIT" minOccurs="0" maxOccurs="1">
              <xs:complexType>
                <xs:attribute name="VALUE" type="xs:positiveInteger" />
                <xs:attribute name="RIM" type="xs:positiveInteger" use="optional" />
                <xs:attribute name="UNIT" type="STORAGE_UNITS_TYPE" use="required" />
                <xs:attribute name="OPERATOR" type="RANGE_OPERATOR_TYPE" use="optional" />
                <xs:attribute name="SEVERITY" type="SEVERITY_TYPE" use="optional" />
                <xs:attribute name="RELAX_PERCENTAGE" type="xs:positiveInteger" use="optional" />
              </xs:complexType>
            </xs:element>
    </xs:all>
  </xs:group>
  <xs:complexType name="UPGRADE_SUITABILITY_MATRIX_TYPE">
	<xs:sequence>
			<xs:element name="SRC_VERSION" minOccurs="1" maxOccurs="unbounded">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="EXCLUDE" minOccurs="0" maxOccurs="1">
							<xs:complexType>
								<xs:attribute name="VALUE" type="xs:string" use="optional" />
								<xs:attribute name="ATLEAST" type="xs:string" use="optional" />
								<xs:attribute name="ATMOST" type="xs:string" use="optional" />
								<xs:attribute name="GREATER_THAN" type="xs:string"
									use="optional" />
								<xs:attribute name="LESS_THAN" type="xs:string"
									use="optional" />
							</xs:complexType>
						</xs:element>
					</xs:sequence>
					<xs:attribute name="ATLEAST" type="xs:string" use="required" />
					<xs:attribute name="ATMOST" type="xs:string" use="optional" />
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="SEVERITY" type="SEVERITY_TYPE" use="optional" />
	</xs:complexType>

  <xs:complexType name="VAR_TASK_TYPE">
    <xs:all>
      <xs:element name="EXECUTABLE_ARGUMENTS"
        minOccurs="0" maxOccurs="1" type="ARGS_TYPE" />
      <xs:element name="ANALYZER" type="ANALYZER_TYPE"
        minOccurs="0" maxOccurs="1" />
    </xs:all>
    <xs:attribute name="ID" type="xs:string" use="required" />
    <xs:attribute name="TYPE" type="xs:string"
      use="optional" />
    <xs:attribute name="EQ" type="xs:string"
      use="optional" />
    <xs:attribute name="NE" type="xs:string"
      use="optional" />
    <xs:attribute name="RE" type="xs:string"
      use="optional" />
    <xs:attribute name="ATLEAST" type="xs:string"
      use="optional" />
    <xs:attribute name="ATMOST" type="xs:string"
      use="optional" />
    <xs:attribute name="GREATER_THAN" type="xs:string"
      use="optional" />
    <xs:attribute name="LESS_THAN" type="xs:string"
      use="optional" />
  </xs:complexType>

  <xs:complexType name="ARGS_TYPE">
        <xs:sequence>
            <xs:element name="ARG" minOccurs="1" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="NAME" minOccurs="1" maxOccurs="1">
                            <xs:complexType>
                                <xs:attribute name="VALUE" use="required" type="xs:string" />
                            </xs:complexType>
                        </xs:element>
                        <xs:element name="TYPE" minOccurs="1" maxOccurs="1">
                            <xs:complexType>
                                <xs:attribute name="VALUE" use="required">
                                    <xs:simpleType>
                                        <xs:restriction base="xs:string">
                                            <xs:enumeration value="string" />
                                            <xs:enumeration value="numeric" />
                                            <xs:enumeration value="version" />
                                            <xs:enumeration value="boolean" />
                                            <xs:enumeration value="list" />
                                            <xs:enumeration value="executable" />
                                            <!-- If type is java then NAME elelment shall have the class name 
                                                and VAL may have the location of class in the package -->
                                            <xs:enumeration value="java" />
                                        </xs:restriction>
                                    </xs:simpleType>
                                </xs:attribute>
                            </xs:complexType>
                        </xs:element>
                        <!-- either VAL or VAR must be specified -->
                        <xs:element name="VAL" minOccurs="0" maxOccurs="1">
                            <xs:complexType>
                                <xs:attribute name="VALUE" use="required" type="xs:string" />
                            </xs:complexType>
                        </xs:element>
                        <xs:element name="VAR" minOccurs="0" maxOccurs="1">
                            <xs:complexType>
                               <xs:attribute name="VALUE" use="required" type="xs:string" />
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="COMPARATOR_TYPE">
        <xs:attribute name="TYPE" use="required">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="string" />
                    <xs:enumeration value="numeric" />
                    <xs:enumeration value="version" />
                    <xs:enumeration value="boolean" />
                    <xs:enumeration value="list" />
                    <xs:enumeration value="executable" />
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="EQ" type="xs:string" use="optional" />
        <xs:attribute name="EQ_NO_CASE" type="xs:string" use="optional" />
        <xs:attribute name="LE" type="xs:string" use="optional" />
        <xs:attribute name="LT" type="xs:string" use="optional" />
        <xs:attribute name="GT" type="xs:string" use="optional" />
        <xs:attribute name="GE" type="xs:string" use="optional" />
        <xs:attribute name="NE" type="xs:string" use="optional" />
        <xs:attribute name="RE" type="xs:string" use="optional" />
        <xs:attribute name="NULL" type="xs:string" use="optional" />
        <xs:attribute name="NOT_NULL" type="xs:string" use="optional" />
    </xs:complexType>

    <xs:complexType name="EXECUTABLE_INFO_TYPE">
        <xs:sequence>
            <xs:element name="REQUIRED_VERSION" minOccurs="0"
                maxOccurs="1">
                <xs:complexType>
                    <xs:attribute name="EQ" type="xs:string" use="optional" />
                    <xs:attribute name="EQ_NO_CASE" type="xs:string" use="optional" />
                    <xs:attribute name="LE" type="xs:string" use="optional" />
                    <xs:attribute name="LT" type="xs:string" use="optional" />
                    <xs:attribute name="GT" type="xs:string" use="optional" />
                    <xs:attribute name="GE" type="xs:string" use="optional" />
                </xs:complexType>
            </xs:element>
            <xs:choice>
                <xs:element name="EXTERNAL">
                    <xs:complexType>
                        <xs:all>
                            <xs:element name="NAME" minOccurs="1" maxOccurs="1">
                                <xs:complexType>
                                    <xs:attribute name="VALUE" use="required" type="xs:string" />
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="ARGS" minOccurs="0" maxOccurs="1"
                                type="ARGS_TYPE" />
                        </xs:all>
                    </xs:complexType>
                </xs:element>
                <xs:element name="JAVA">
                    <xs:complexType>
                        <xs:all>
                            <xs:element name="ARGS" minOccurs="0" maxOccurs="1"
                                type="ARGS_TYPE" />
                        </xs:all>
                        <xs:attribute name="NAME" use="required" type="xs:string" />
                        <xs:attribute name="PACKAGE" use="optional" type="xs:string" />
                    </xs:complexType>
                </xs:element>
                <!-- The contents of INLINE element should be in a CDATA section -->
                <xs:element name="INLINE">
                    <xs:complexType>
                        <xs:all>
                            <xs:element name="ARGS" minOccurs="0" maxOccurs="1"
                                type="ARGS_TYPE" />
                        </xs:all>
                        <xs:attribute name="VALUE" use="required" type="xs:string" />
                    </xs:complexType>
                </xs:element>
            </xs:choice>
            <xs:element name="RESULT_TYPE" minOccurs="1" maxOccurs="1">
                <xs:complexType>
                    <xs:attribute name="VALUE" use="required">
                        <xs:simpleType>
                            <xs:restriction base="xs:string">
                                <xs:enumeration value="ANALYZED" />
                                <xs:enumeration value="TO_BE_ANALYZED" />
                            </xs:restriction>
                        </xs:simpleType>
                    </xs:attribute>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="TYPE" use="required">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="SHELL" />
                    <xs:enumeration value="JAVA" />
                    <xs:enumeration value="SQL" />
                    <xs:enumeration value="PLSQL" />
                    <xs:enumeration value="PERL" />
                    <xs:enumeration value="BINARY" />
                    <xs:enumeration value="SCRIPT" />
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="RUN_ON" use="optional" default="DB">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="DB" />
                    <xs:enumeration value="ASM" />
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
    </xs:complexType>

    <xs:complexType name="ANALYZER_TYPE">
        <xs:choice>
            <xs:element name="STANDARD_ANALYZER">
                <xs:complexType>
                    <xs:all>
                        <xs:element name="COMPARATOR" minOccurs="1" maxOccurs="1"
                            type="COMPARATOR_TYPE" />
                    </xs:all>
                </xs:complexType>
            </xs:element>
            <xs:element name="EXTERNAL_ANALYZER">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="EXECUTABLE_INFO" type="EXECUTABLE_INFO_TYPE"
                            minOccurs="1" maxOccurs="1"></xs:element>
                    </xs:sequence>
                    <xs:attribute name="GLOBAL_ANALYZER" type="xs:boolean"
                        use="optional"></xs:attribute>
                </xs:complexType>
            </xs:element>
            <xs:element name="SQL_ANALYZER">
                <xs:complexType>
                    <xs:all>
                        <xs:element name="COLUMN_LIST" minOccurs="1" maxOccurs="1">
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element name="REFERENCE_COLUMN" minOccurs="0"
                                        maxOccurs="1">
                                        <xs:complexType>
                                            <xs:attribute name="NAME" type="xs:string" use="required" />
                                        </xs:complexType>
                                    </xs:element>
                                    <xs:element name="COLUMN" minOccurs="1" maxOccurs="unbounded">
                                        <xs:complexType>
                                            <xs:all>
                                                <xs:element name="COMPARATOR" minOccurs="1"
                                                    maxOccurs="1" type="COMPARATOR_TYPE" />
                                            </xs:all>
                                            <xs:attribute name="NAME" type="xs:string" use="required" />
                                        </xs:complexType>
                                    </xs:element>
                                </xs:sequence>
                            </xs:complexType>
                        </xs:element>
                    </xs:all>
                    <xs:attribute name="EMPTY_RESULTSET_IMPLIES_SUCCESS"
                        use="optional" type="xs:boolean" />
                </xs:complexType>
            </xs:element>
        </xs:choice>
    </xs:complexType>

</xs:schema>

OHA YOOOO