<?xml version="1.0" encoding="UTF-8"?>

<!--
    Document    : gdpc-schema.xml
    Created on  : February 27, 2003
    Last update : March 3, 2005
    Author      : terryc
    Description :
        This is the XML Schema that describes GDPC.
-->

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://www.maizegenetics.net/gdpc"
            xmlns="http://www.maizegenetics.net/gdpc"
            elementFormDefault="qualified">
            
                  
    <xsd:element name="GDPC">
        <xsd:complexType>
            <xsd:sequence>
            <xsd:element ref="Group" minOccurs="1" maxOccurs="1"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    

    <xsd:element name="Group"/>
    
    <xsd:element name="DBElement" type="DBElementType" abstract="true"/>
    
    <xsd:complexType name="DBElementType" abstract="true">
        <xsd:attribute name="id" type="xsd:ID" use="optional"/>
    </xsd:complexType>
    
    
    
    <xsd:element name="LocusGroup" type="LocusGroupType" substitutionGroup="Group"/>
    
    <xsd:complexType name="LocusGroupType">
        <xsd:sequence>
        <xsd:element ref="Locus" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:element name="Locus" type="LocusType" substitutionGroup="DBElement"/>
    
    <xsd:complexType name="LocusType">
        <xsd:complexContent>
            <xsd:extension base="DBElementType">
                <xsd:sequence>
                <xsd:element name="Properties" type="LocusProperties"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>

    <xsd:complexType name="LocusProperties">

        <xsd:sequence>
        <xsd:element ref="CHROMOSOME_NUMBER" minOccurs="0"/>
        <xsd:element ref="COMMENTS" minOccurs="0"/>
        <xsd:element ref="DATA_SOURCE"/>
        <xsd:element ref="GENETIC_BIN" minOccurs="0"/>
        <xsd:element ref="GENETIC_MAP" minOccurs="0"/>
        <xsd:element ref="GENETIC_POSITION" minOccurs="0"/>
        <xsd:element ref="ID"/>
        <xsd:element ref="LOCUS_TYPE" minOccurs="0"/>
        <xsd:element ref="NAME"/>
        <xsd:element ref="PHYSICAL_POSITION" minOccurs="0"/>
        <xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>

    </xsd:complexType>
    
    
    
    <xsd:element name="GenotypeExperimentGroup" type="GenotypeExperimentGroupType" substitutionGroup="Group"/>
    
    <xsd:complexType name="GenotypeExperimentGroupType">
        <xsd:sequence>
        <xsd:element ref="GenotypeExperiment" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:element name="GenotypeExperiment" type="GenotypeExperimentType" substitutionGroup="DBElement"/>
    
    <xsd:complexType name="GenotypeExperimentType">
        <xsd:complexContent>
            <xsd:extension base="DBElementType">
                <xsd:sequence>
                <xsd:element ref="Locus" minOccurs="0"/>
                <xsd:element name="Properties" type="GenotypeExperimentProperties"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>

    <xsd:complexType name="GenotypeExperimentProperties">

        <xsd:sequence>
        <xsd:element ref="ALIGN_PROGRAM" minOccurs="0"/>
        <xsd:element ref="COMMENTS" minOccurs="0"/>
        <xsd:element ref="DATA_SOURCE"/>
        <xsd:element ref="DATE" minOccurs="0"/>
        <xsd:element ref="END_POSITION" minOccurs="0"/>
        <xsd:element ref="HUMAN_VALIDATION" minOccurs="0"/>
        <xsd:element ref="ID"/>
        <xsd:element ref="LOCUS"/>
        <xsd:element ref="NAME"/>
        <xsd:element ref="POLY_TYPE" minOccurs="0"/>
        <xsd:element ref="PRIMER1" minOccurs="0"/>
        <xsd:element ref="PRIMER2" minOccurs="0"/>
        <xsd:element ref="PRODUCER" minOccurs="0"/>
        <xsd:element ref="SRC_EXP" minOccurs="0"/>
        <xsd:element ref="START_POSITION" minOccurs="0"/>
        <xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>

    </xsd:complexType>
    
    
    
    <xsd:element name="TaxonGroup" type="TaxonGroupType" substitutionGroup="Group"/>
    
    <xsd:complexType name="TaxonGroupType">
        <xsd:sequence>
        <xsd:element ref="Taxon" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:element name="Taxon" type="TaxonType" substitutionGroup="DBElement"/>
    
    <xsd:complexType name="TaxonType">
        <xsd:complexContent>
            <xsd:extension base="DBElementType">
                <xsd:sequence>
                <xsd:element ref="Locality" minOccurs="0"/>
                <xsd:element name="Properties" type="TaxonProperties"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>

    <xsd:complexType name="TaxonProperties">

        <xsd:sequence>
        <xsd:element ref="ACCESSION" minOccurs="0"/>
        <xsd:element ref="COLLECTOR" minOccurs="0"/>
        <xsd:element ref="COMMENTS" minOccurs="0"/>
        <xsd:element ref="DATA_SOURCE"/>
        <xsd:element ref="GENUS" minOccurs="0"/>
        <xsd:element ref="GERMPLASM_TYPE" minOccurs="0"/>
        <xsd:element ref="ID"/>
        <xsd:element ref="LOCALITY" minOccurs="0"/>
        <xsd:element ref="NAME"/>
        <xsd:element ref="PLANT" minOccurs="0"/>
        <xsd:element ref="POPULATION" minOccurs="0"/>
        <xsd:element ref="REFERENCE" minOccurs="0"/>
        <xsd:element ref="SEED_LOT" minOccurs="0"/>
        <xsd:element ref="SOURCE" minOccurs="0"/>
        <xsd:element ref="SPECIES" minOccurs="0"/>
        <xsd:element ref="SUBSPECIES" minOccurs="0"/>
        <xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>

    </xsd:complexType>
    
    
    
    <xsd:element name="LocalityGroup" type="LocalityGroupType" substitutionGroup="Group"/>
    
    <xsd:complexType name="LocalityGroupType">
        <xsd:sequence>
        <xsd:element ref="Locality" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
    
    <xsd:element name="Locality" type="LocalityType" substitutionGroup="DBElement"/>
    
    <xsd:complexType name="LocalityType">
        <xsd:complexContent>
            <xsd:extension base="DBElementType">
                <xsd:sequence>
                <xsd:element name="Properties" type="LocalityProperties"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>

    <xsd:complexType name="LocalityProperties">

        <xsd:sequence>
        <xsd:element ref="ALTITUDE" minOccurs="0"/>
        <xsd:element ref="CITY" minOccurs="0"/>
        <xsd:element ref="COUNTRY" minOccurs="0"/>
        <xsd:element ref="DATA_SOURCE"/>
        <xsd:element ref="ELEVATION" minOccurs="0"/>
        <xsd:element ref="ID"/>
        <xsd:element ref="LATITUDE" minOccurs="0"/>
        <xsd:element ref="LONGITUDE" minOccurs="0"/>
        <xsd:element ref="NAME"/>
        <xsd:element ref="STATE_PROVINCE" minOccurs="0"/>
        <xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>

    </xsd:complexType>
    
    
    
    <xsd:element name="EnvironmentExperimentGroup" type="EnvironmentExperimentGroupType" substitutionGroup="Group"/>
    
    <xsd:complexType name="EnvironmentExperimentGroupType">
        <xsd:sequence>
        <xsd:element ref="EnvironmentExperiment" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
    
    <xsd:element name="EnvironmentExperiment" type="EnvironmentExperimentType" substitutionGroup="DBElement"/>
        
    <xsd:complexType name="EnvironmentExperimentType">
        <xsd:complexContent>
            <xsd:extension base="DBElementType">
                <xsd:sequence>
                <xsd:element ref="Locality" minOccurs="0"/>
                <xsd:element name="Properties" type="EnvironmentExperimentProperties"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>

    <xsd:complexType name="EnvironmentExperimentProperties">

        <xsd:sequence>
        <xsd:element ref="DATA_SOURCE"/>
        <xsd:element ref="EVALUATIONSITE" minOccurs="0"/>
        <xsd:element ref="HARVEST_DATE" minOccurs="0"/>
        <xsd:element ref="ID"/>
        <xsd:element ref="LOCALITY" minOccurs="0"/>
        <xsd:element ref="NAME"/>
        <xsd:element ref="PLANT_DATE" minOccurs="0"/>
        <xsd:element ref="SUMMARY" minOccurs="0"/>
        <xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>

    </xsd:complexType>
    
    
    
    <xsd:element name="GenotypeGroup" type="GenotypeGroupType" substitutionGroup="Group"/>
    
    <xsd:complexType name="GenotypeGroupType">
        <xsd:sequence>
        <xsd:element ref="Genotype" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
    
    <xsd:element name="Genotype" type="GenotypeType" substitutionGroup="DBElement"/>
    
    <xsd:complexType name="GenotypeType">
        <xsd:complexContent>
            <xsd:extension base="DBElementType">
                <xsd:sequence>
                <xsd:element ref="GenotypeExperiment" minOccurs="0"/>
                <xsd:element ref="Taxon" minOccurs="0"/>
                <xsd:element name="Properties" type="GenotypeProperties"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>

    <xsd:complexType name="GenotypeProperties">

        <xsd:sequence>
        <xsd:element ref="ALLELE_LIST"/>
        <xsd:element ref="DATA_SOURCE"/>
        <xsd:element ref="GENOTYPE_EXPERIMENT"/>
        <xsd:element ref="TAXON"/>
        <xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>

    </xsd:complexType>
    
    
    
    <xsd:element name="PhenotypeGroup" type="PhenotypeGroupType" substitutionGroup="Group"/>
    
    <xsd:complexType name="PhenotypeGroupType">
        <xsd:sequence>
        <xsd:element ref="Phenotype" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
    
    <xsd:element name="Phenotype" type="PhenotypeType" substitutionGroup="DBElement"/>
    
    <xsd:complexType name="PhenotypeType">
        <xsd:complexContent>
            <xsd:extension base="DBElementType">
                <xsd:sequence>
                <xsd:element ref="EnvironmentExperiment" minOccurs="0"/>
                <xsd:element ref="PhenotypeOntology" minOccurs="0"/>
                <xsd:element ref="Taxon" minOccurs="0"/>
                <xsd:element name="Properties" type="PhenotypeProperties"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>

    <xsd:complexType name="PhenotypeProperties">

        <xsd:sequence>
        <xsd:element ref="DATA_SOURCE"/>
        <xsd:element ref="ENVIRONMENT_EXPERIMENT"/>
        <xsd:element ref="PHENOTYPE_ONTOLOGY"/>
        <xsd:element ref="TAXON"/>
        <xsd:element ref="VALUE"/>
        <xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>

    </xsd:complexType>
    

    <xsd:element name="PhenotypeOntologyGroup" type="PhenotypeOntologyGroupType" substitutionGroup="Group"/>
    
    <xsd:complexType name="PhenotypeOntologyGroupType">
        <xsd:sequence>
        <xsd:element ref="PhenotypeOntology" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:element name="PhenotypeOntology" type="PhenotypeOntologyType" substitutionGroup="DBElement"/>
    
    <xsd:complexType name="PhenotypeOntologyType">
        <xsd:complexContent>
            <xsd:extension base="DBElementType">
                <xsd:sequence>
                <xsd:element name="Properties" type="PhenotypeOntologyProperties"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>

    <xsd:complexType name="PhenotypeOntologyProperties">

        <xsd:sequence>
        <xsd:element ref="DATA_SOURCE"/>
        <xsd:element ref="ID"/>
        <xsd:element ref="NAME"/>
        <xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>

    </xsd:complexType>
    
    
    <xsd:element name="Allele" type="AlleleType" substitutionGroup="DBElement"/>
    
    <xsd:complexType name="AlleleType">
        <xsd:complexContent>
            <xsd:extension base="DBElementType">
                <xsd:sequence>
                <xsd:element name="Properties" type="AlleleProperties"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
    
    <xsd:complexType name="AlleleProperties">

        <xsd:sequence>
        <xsd:element ref="DATA_SOURCE" minOccurs="0"/>
        <xsd:element ref="ID" minOccurs="0"/>
        <xsd:element ref="NUM" minOccurs="0"/>
        <xsd:element ref="QUALITY" minOccurs="0"/>
        <xsd:element ref="VALUE"/>
        <xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>

    </xsd:complexType>
    

    
    <!-- Reference type -->
    <xsd:complexType name="Reference">
        <xsd:attribute name="href" type="xsd:IDREF" use="required"/>
    </xsd:complexType>
    

    <!-- COMMON PROPERTIES  -->
    <xsd:element name="ID" substitutionGroup="Property">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="VALUE" type="xsd:string"/>
                <xsd:element name="HINT" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="DATA_SOURCE" type="xsd:string" substitutionGroup="Property"/>
    <xsd:element name="COMMENTS" type="xsd:string" substitutionGroup="Property"/>
    <xsd:element name="NAME" type="xsd:string" substitutionGroup="Property"/>
    <xsd:element name="DATE" type="xsd:date" substitutionGroup="Property"/>
    <xsd:element name="SUMMARY" type="xsd:string" substitutionGroup="Property"/>
    
    <xsd:element name="LOCALITY" type="Reference" substitutionGroup="Property"/>
    <xsd:element name="GENOTYPE_EXPERIMENT" type="Reference" substitutionGroup="Property"/>
    <xsd:element name="TAXON" type="Reference" substitutionGroup="Property"/>
    <xsd:element name="LOCUS" type="Reference" substitutionGroup="Property"/>
    <xsd:element name="ENVIRONMENT_EXPERIMENT" type="Reference" substitutionGroup="Property"/>
    <xsd:element name="PHENOTYPE_ONTOLOGY" type="Reference" substitutionGroup="Property"/>
    <xsd:element name="VALUE" type="xsd:string" substitutionGroup="Property"/>
    
    
    <!-- LOCUS PROPERTIES -->
    <xsd:element name="CHROMOSOME_NUMBER" type="xsd:string" substitutionGroup="Property"/>
    <xsd:element name="GENETIC_BIN" type="xsd:string" substitutionGroup="Property"/>
    <xsd:element name="GENETIC_MAP" type="xsd:string" substitutionGroup="Property"/>
    <xsd:element name="GENETIC_POSITION" type="xsd:double" substitutionGroup="Property"/>
    <xsd:element name="LOCUS_TYPE" type="xsd:string" substitutionGroup="Property"/>
    <xsd:element name="PHYSICAL_POSITION" type="xsd:double" substitutionGroup="Property"/>
    
    
    <!-- GENOTYPE EXPERIMENT PROPERTIES -->
    <xsd:element name="ALIGN_PROGRAM" type="xsd:string" substitutionGroup="Property"/>
    <xsd:element name="END_POSITION" type="xsd:string" substitutionGroup="Property"/>
    <xsd:element name="HUMAN_VALIDATION" type="xsd:string" substitutionGroup="Property"/>
    <xsd:element name="POLY_TYPE" type="xsd:string" substitutionGroup="Property"/>
    <xsd:element name="START_POSITION" type="xsd:string" substitutionGroup="Property"/>
    <xsd:element name="PRIMER1" type="xsd:string" substitutionGroup="Property"/>
    <xsd:element name="PRIMER2" type="xsd:string" substitutionGroup="Property"/>
    <xsd:element name="PRODUCER" type="xsd:string" substitutionGroup="Property"/>
    <xsd:element name="SRC_EXP" type="Reference" substitutionGroup="Property"/>
    
    
    <!-- TAXON PROPERTIES -->
    <xsd:element name="ACCESSION" type="xsd:string" substitutionGroup="Property"/>
    <xsd:element name="COLLECTOR" type="xsd:string" substitutionGroup="Property"/>
    <xsd:element name="GENUS" type="xsd:string" substitutionGroup="Property"/>
    <xsd:element name="GERMPLASM_TYPE" type="xsd:string" substitutionGroup="Property"/>
    <xsd:element name="PLANT" type="xsd:string" substitutionGroup="Property"/>
    <xsd:element name="POPULATION" type="xsd:string" substitutionGroup="Property"/>
    <xsd:element name="REFERENCE" type="xsd:string" substitutionGroup="Property"/>
    <xsd:element name="SEED_LOT" type="xsd:string" substitutionGroup="Property"/>
    <xsd:element name="SOURCE" type="xsd:string" substitutionGroup="Property"/>
    <xsd:element name="SPECIES" type="xsd:string" substitutionGroup="Property"/>
    <xsd:element name="SUBSPECIES" type="xsd:string" substitutionGroup="Property"/>
    
    
    <!-- LOCALITY PROPERTIES -->
    <xsd:element name="ALTITUDE" type="xsd:double" substitutionGroup="Property"/>
    <xsd:element name="COUNTRY" type="xsd:string" substitutionGroup="Property"/>
    <xsd:element name="LATITUDE" type="xsd:double" substitutionGroup="Property"/>
    <xsd:element name="LONGITUDE" type="xsd:double" substitutionGroup="Property"/>
    <xsd:element name="STATE_PROVINCE" type="xsd:string" substitutionGroup="Property"/>
    <xsd:element name="ELEVATION" type="xsd:double" substitutionGroup="Property"/>
    <xsd:element name="CITY" type="xsd:string" substitutionGroup="Property"/>
    
    
    <!-- ENVIRONMENT EXPERIMENT PROPERTIES -->
    <xsd:element name="EVALUATIONSITE" type="xsd:string" substitutionGroup="Property"/>
    <xsd:element name="HARVEST_DATE" type="xsd:date" substitutionGroup="Property"/>
    <xsd:element name="PLANT_DATE" type="xsd:date" substitutionGroup="Property"/>
    
    
    <!-- ALLELE PROPERTIES -->
    <xsd:element name="QUALITY" type="xsd:string" substitutionGroup="Property"/>
    <xsd:element name="NUM" type="xsd:integer" substitutionGroup="Property"/>
    
    
    <!-- GENOTYPE PROPERTIES -->
    <xsd:element name="ALLELE_LIST" substitutionGroup="Property">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="ALLELE" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
                <xsd:element ref="Allele" minOccurs="0" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    
    
    
    <!-- PHENOTYPE PROPERTIES -->
    
    
    
    <!-- PHENOTYPE ONTOLOGY PROPERTIES -->
    
    
     
    
    <xsd:element name="Property"/>
    
    <xsd:element name="PropertyDesc">
        <xsd:complexType>
            <xsd:attribute name="element" type="xsd:string" use="required"/>
            <xsd:attribute name="type" type="xsd:string" use="required"/>
        </xsd:complexType>
    </xsd:element>
    
    
    <xsd:element name="PropertiesList" type="PropertiesListType"/>
    
    <xsd:complexType name="PropertiesListType">
        <xsd:sequence>
        <xsd:element ref="PropertyDesc" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>

    
    <xsd:element name="DBElements">
        <xsd:complexType>
            <xsd:sequence>
            <xsd:element ref="DBElement" minOccurs="0" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
            
            
            
    <!-- Filter Definitions -->
    
    <xsd:element name="Filter" type="FilterType"/>
    
    <xsd:element name="EnvironmentExperimentFilter" substitutionGroup="Filter" type="EnvironmentExperimentFilterType"/>
    <xsd:element name="GenotypeExperimentFilter" substitutionGroup="Filter" type="GenotypeExperimentFilterType"/>
    <xsd:element name="TaxonFilter" substitutionGroup="Filter" type="TaxonFilterType"/>
    <xsd:element name="LocusFilter" substitutionGroup="Filter" type="LocusFilterType"/>
    <xsd:element name="LocalityFilter" substitutionGroup="Filter" type="LocalityFilterType"/>
    <xsd:element name="PhenotypeOntologyFilter" substitutionGroup="Filter" type="PhenotypeOntologyFilterType"/>
    
    <xsd:complexType name="PhenotypeOntologyFilterType">
        <xsd:complexContent>
            <xsd:extension base="FilterType"/>
        </xsd:complexContent>
    </xsd:complexType>    
    
    <xsd:complexType name="EnvironmentExperimentFilterType">
        <xsd:complexContent>
            <xsd:extension base="FilterType"/>
        </xsd:complexContent>
    </xsd:complexType>
    
    <xsd:complexType name="GenotypeExperimentFilterType">
        <xsd:complexContent>
            <xsd:extension base="FilterType"/>
        </xsd:complexContent>
    </xsd:complexType>
    
    <xsd:complexType name="LocusFilterType">
        <xsd:complexContent>
            <xsd:extension base="FilterType"/>
        </xsd:complexContent>
    </xsd:complexType>
    
    <xsd:complexType name="LocalityFilterType">
        <xsd:complexContent>
            <xsd:extension base="FilterType"/>
        </xsd:complexContent>
    </xsd:complexType>
    
    <xsd:complexType name="TaxonFilterType">
        <xsd:complexContent>
            <xsd:extension base="FilterType"/>
        </xsd:complexContent>
    </xsd:complexType>

    
    <xsd:complexType name="FilterType" abstract="true">
        <xsd:sequence>
        <xsd:element ref="DBElements" minOccurs="0"/>
        <xsd:element ref="FilterValue" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="type" type="xsd:string" use="optional"/>
    </xsd:complexType>
     
    
    <xsd:element name="FilterValue"/>
    
    
    <xsd:element name="Single" substitutionGroup="FilterValue">
        <xsd:complexType>
            <xsd:sequence>
            <xsd:element ref="Property" minOccurs="0" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    
    
    <xsd:element name="Range" substitutionGroup="FilterValue">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="Property"/>
                <xsd:element ref="Property"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    
    
    <xsd:element name="Like" substitutionGroup="FilterValue">
        <xsd:complexType>
            <xsd:simpleContent>
                <xsd:extension base="xsd:string">
                <xsd:attribute name="type" type="xsd:string" use="required"/>
                </xsd:extension>
            </xsd:simpleContent>
        </xsd:complexType>
    </xsd:element>
    
    
    
    <!-- Distinct property values definitions -->
    
    <xsd:element name="DistinctPropertyValues" type="DistinctPropertyValuesType"/>
    
    <xsd:complexType name="DistinctPropertyValuesType">
        <xsd:sequence>
            <xsd:element ref="DBElements" minOccurs="0"/>
            <xsd:element name="DBElement" maxOccurs="unbounded">
                <xsd:complexType>
                    <xsd:sequence>
                    <xsd:element ref="Property" maxOccurs="unbounded"/>
                    </xsd:sequence>
                    <xsd:attribute name="type" type="xsd:string" use="required"/>
                </xsd:complexType>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    
    
    
    <!-- Generic Table definitions -->
    
    <xsd:element name="GenericTable" type="GenericTableType"/>
    
    <xsd:complexType name="GenericTableType">
        <xsd:sequence>
            <xsd:element name="row" maxOccurs="unbounded">
                <xsd:complexType>
                    <xsd:sequence>
                    <xsd:element name="i" maxOccurs="unbounded">
                       <xsd:complexType>
                          <xsd:sequence>
                             <xsd:element ref="ALLELE_LIST"/>
                          </xsd:sequence>
                          <xsd:attribute name="x" type="xsd:integer" use="required"/>
                       </xsd:complexType>
                    </xsd:element>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
        </xsd:sequence>
        <xsd:attribute name="numRows" type="xsd:integer" use="required"/>
        <xsd:attribute name="numColumns" type="xsd:integer" use="required"/>
    </xsd:complexType>
    

</xsd:schema>