<!-- ====================================== -->
<!-- Gene Expression Markup Language (GEML) -->
<!-- ====================================== -->
<!-- Copyright National Center for Genome Resources
     June 2000
     All rights reserved                                           -->

<!--                                                               -->
<!--                    Entities                                   -->
<!--                                                               -->

<!ENTITY   VERSION
     "$Id: geml.dtd,v 1.16 2000/11/09 22:27:16 jasons Exp $"        >

<!--                    attribute_id_spec                          -->
<!--                    This is for all the attribute lists that
                        have an required id field                  -->
<!ENTITY % attribute_id_spec
                       "id ID #REQUIRED"                             >

<!--                    date-spec                                  -->
<!--                    This is a standard format for representing
                        dates (submission,release,etc.)            -->
<!ENTITY % date_spec   "CDATA"                              >

<!--                    time-spec                                  -->
<!--                    This is a standard format for representing
                        times (creation,last modified,etc.)        -->
<!ENTITY % time_spec   "hour,minute,sec"                             >


<!--                    GEML                                       -->
<!--                    The main element for the format. It 
                        is split into two sections a header 
                        containing meta-data definitions, and
                        the a list of experiment sets that have 
                        the data and references to the meta-data.  -->
<!ELEMENT GEML (header?,experiment_set*)                             >
<!ATTLIST GEML
             date       CDATA                              #IMPLIED 
             cvs_id     CDATA                              #IMPLIED 
             version    CDATA                              #IMPLIED >

<!--                    header                                     -->
<!--                    Predefinitions of all the meta-data 
                        referenced within the file. This provides
                        a space efficient encoding. If any given 
                        piece of meta-data is used more than once
                        the information does not need to be 
                        duplicated, instead only the IDREF is 
                        duplicated.                                -->
<!ELEMENT header (misc_list|
                  genex_info|
                  external_file_list|
                  protocol_list|
                  DB_foreign_key_list|
                  contact_list|
                  external_database_list|
                  citation_list|
                  group_list|
                  software_list|
                  scanner_list|
                  spotter_list|
                  species_list|
                  sample_list|
                  array_layout_list|
                  usf_list|
                  csf_list)*                                            >


<!--                    DB_foreign_key                                      -->
<!--                    This category is the catch-all substitute 
                        that marks where meta-data should have been.
                        This allows users to reduce the amount of 
                        information in the GEML file (many of which
                        are indicated as having a #REQUIRED IDREF
                        component). So those components would have
                        IDREF's that point to <DB_foreign_keys> instead
                        of <protocols>, or <array_suppliers>, etc,
                        while still getting all the necessary primary
                        data.                                      -->
<!ELEMENT  DB_foreign_key_list (DB_foreign_key*)                     >
<!ELEMENT  DB_foreign_key 
                        EMPTY                                      >
<!ATTLIST  DB_foreign_key 
                        id ID #REQUIRED
             table_name  CDATA                              #IMPLIED
             foreign_key CDATA                              #REQUIRED >

<!--                    misc_list                                  -->
<!--                    stores misc info as qualifier-value pairs  -->
<!ELEMENT  misc_list    (misc_qualifier*)                            >
<!--                    misc_qualifier                             -->
<!ELEMENT  misc_qualifier
                        EMPTY                                        >

<!--         The currently supported list of names include:
             ExperimentName:       used to supply complete list of current
                                      experiment set names in the DB to 
                                      curation tool
             file_creator_version: version of software that created output
             user_name:            login of individual that created file
             transmission_type:    control-bundle or experiment-set
             file_creator:         the name of the software that created 
                                      the output
             creation_time:        time of creation
             transmission_site:    NCGR or USER

                                                                 -->
<!ATTLIST  misc_qualifier
             name       CDATA                              #REQUIRED
             value      CDATA                              #REQUIRED >

<!ELEMENT  genex_info   (controlled_vocabulary_list*)                >
<!ELEMENT  controlled_vocabulary_list
                        (controlled_vocabulary*)                     >
<!ELEMENT  controlled_vocabulary
                        (term*)                                      >
<!ATTLIST  controlled_vocabulary
             qualifier  CDATA                              #REQUIRED >
<!ELEMENT  term         EMPTY                                        >
<!ATTLIST  term
             name       CDATA                              #REQUIRED
             description
                        CDATA                              #IMPLIED >

<!ELEMENT  external_file_list
                        (external_file*)                             >
<!ELEMENT  external_file
                        EMPTY                                        >
<!ATTLIST  external_file
            id ID #REQUIRED
             file_name  CDATA                              #REQUIRED >



<!--                    contact                                    -->
<!--                    The contact information for researchers 
                        who provide data and companies that supply
                        technology                                 -->
<!ELEMENT  contact_list (contact*)                                   >
<!ELEMENT  contact      (organization|
                        contact_person|
                        contact_person_phone|
                        contact_person_email|
                        org_mail_address|
                        org_phone|
                        org_toll_free_phone|
                        org_fax|
                        org_email|
                        url)*                                        >
<!ATTLIST  contact
             id ID #REQUIRED
             last_updated
                        CDATA                              #REQUIRED 
             type       CDATA                              #REQUIRED
             url        CDATA                              #IMPLIED  >

<!ELEMENT  organization (#PCDATA)                                    >
<!ELEMENT  contact_person
                        (#PCDATA)                                    >
<!ELEMENT  contact_person_phone
                        (#PCDATA)                                    >
<!ELEMENT  contact_person_email
                        (#PCDATA)                                    >
<!ELEMENT  org_phone    (#PCDATA)                                    >
<!ELEMENT  org_toll_free_phone
                        (#PCDATA)                                    >
<!ELEMENT  org_fax      (#PCDATA)                                    >
<!ELEMENT  org_email    (#PCDATA)                                    >
<!ELEMENT  org_mail_address    
                        (#PCDATA)                                    >
<!ELEMENT  url          (#PCDATA)                                    >

<!ELEMENT  group_list   (group*)                                     >
<!--                    group                                      -->
<!--                    Groups store research group affiliations
                        so that research can provide read/write
                        privleges to confidential for members of
                        the research group.                        -->
<!ELEMENT  group        (member*)                                    >
<!ATTLIST  group
             id ID #REQUIRED
             name       CDATA                              #REQUIRED >
<!ELEMENT  member       EMPTY                                        >
<!ATTLIST  member
             contact_id IDREF                              #REQUIRED >

<!--                    citation                                   -->
<!--                    The citation to the scientific journal in
                        which the data was presented               -->
<!--                    citation                                   -->
<!ELEMENT  citation_list 
                        (citation*)                                  >
<!ELEMENT  citation     EMPTY                                        >
<!ATTLIST  citation
            id ID #REQUIRED
             title      CDATA                              #REQUIRED
             authors    CDATA                              #REQUIRED
             publication
                        CDATA                              #REQUIRED
             publisher  CDATA                              #IMPLIED
             editor     CDATA                              #IMPLIED
             year       CDATA                              #REQUIRED
             volume     CDATA                              #IMPLIED
             issue      CDATA                              #IMPLIED
             pages      CDATA                              #REQUIRED >


<!--                    scanner                                    -->
<!--                    Name and contact information for
                        manufacturer of scanner                    -->
<!ELEMENT  scanner_list (scanner*)                                   >
<!ELEMENT  scanner      EMPTY                                        >
<!ATTLIST  scanner      id ID #REQUIRED
             contact_id IDREF                              #REQUIRED
             model_description
                        CDATA                              #REQUIRED
             model_serial_num
                        CDATA                              #IMPLIED  >

<!--                    spotter                                    -->
<!--                    Name and contact information for
                        manufacturer of spotter                    -->
<!ELEMENT  spotter_list (spotter*)                                   >
<!ELEMENT  spotter      EMPTY                                        >
<!ATTLIST  spotter      id ID #REQUIRED
             contact_id IDREF                              #REQUIRED
             model_description
                        CDATA                              #REQUIRED
             model_serial_num
                        CDATA                              #IMPLIED  >


<!--                    software                                   -->
<!--                    Entries for all types of software          -->
<!ELEMENT  software_list
                        (software*)                                  >
<!ELEMENT  software     EMPTY                                        >
<!ATTLIST  software
             id ID #REQUIRED
             contact_id IDREF                              #REQUIRED
             name       CDATA                              #REQUIRED
             type       CDATA                              #REQUIRED
             version    CDATA                              #REQUIRED >


<!--                    protocols                                  -->
<!--                    While not explicitly necessary to separate 
                        this out of the rest of the header, the 
                        protocols do make a nice data grouping 
                        since they are all going to be big text
                        blobs util we get restricted vocabularies. 
                        As mentioned above, all protocols consist of
                        two pieces: a protocol_text which is intended
                        to contain the accpeted or standardized protocol
                        information, and a comment which is 
                        intended to contain any difference between the 
                        actual experimental procedure and the standardized
                        protocol                                   -->
<!ELEMENT  protocol_list 
                        (protocol*)                                  >

<!ELEMENT  protocol     (text)                                       >
<!ATTLIST  protocol
             id ID #REQUIRED
             title      CDATA                              #REQUIRED
             type       CDATA                              #REQUIRED >


<!--                    text                                       -->
<!--                    The text of the protocol. Intended to 
                        represent a published protocol or 
                        standardized protocol                      -->
<!ELEMENT  text
                        (#PCDATA)                                    >


<!--                    external_database                          -->
<!--                    These house the information to other DBs   -->
<!ELEMENT  external_database_list
                        (external_database*)                         >
<!ELEMENT  external_database
                        EMPTY                                        >
<!ATTLIST  external_database
             id         ID                                 #REQUIRED
             name       CDATA                              #REQUIRED
             parameterized_url        
                        CDATA                              #IMPLIED
             main_url   CDATA                              #IMPLIED  >


<!--                    sample                                     -->
<!ELEMENT  sample_list  (sample*)                                    >
<!--                    sample                                     -->
<!ELEMENT  sample       (sample_protocol_list?,
                         sample_qualifier_list?)                     >
<!ATTLIST  sample       id ID #REQUIRED
             contact_id IDREF                              #IMPLIED
             species_id IDREF                              #REQUIRED >

<!ELEMENT  sample_protocol_list
                        (sample_protocol*)                           >
<!ELEMENT  sample_protocol
                        (comment)                                    >
<!ATTLIST  sample_protocol
             protocol_id
                        IDREF                              #REQUIRED >
<!ELEMENT  comment     (#PCDATA)                                     >

<!ELEMENT  sample_qualifier_list
                        (sample_qualifier*)                          >
<!ELEMENT  sample_qualifier
                        EMPTY                                        >
<!ATTLIST  sample_qualifier
             name       CDATA                              #REQUIRED
             value      CDATA                              #REQUIRED >

<!--            Some example sample qualifiers could be:           -->
<!--                         seed_supplier_cat_num                 -->
<!--                         cultivar_name                         -->
<!--                         variety                               -->
<!--                         strain                                -->
<!--                         genotype                              -->
<!--                         phenotype_name                        -->
<!--                         sex_mating_type                       -->
<!--                         age                                   -->
<!--                         age_units                             -->
<!--                         dev_stage_time                        -->
<!--                         dev_stage_units                       -->
<!--                         dev_stage_name                        -->
<!--                         organ_type                            -->
<!--                         tissue_type                           -->
<!--                         atcc_cell_type                        -->
<!--                         primary_cell_type                     -->
<!--                         organism_intactness                   -->
<!--                         genetic_status                        -->
<!--                         genetic_status_comment                -->
<!--                         growth_condition                      -->
<!--                         pathology_description                 -->
<!--                         common_accession_number               -->
<!--                         abrc_accession_number                 -->
<!--                         nottingham_accession_number           -->


<!--                    species                                    -->
<!--                    This describes the taxonomic information   -->
<!ELEMENT  species_list (species*)                                   >
<!ELEMENT  species      (scientific_aliases|
                         common_names|
                         genome_size|
                         ncbi_taxonomy_acc|
                         relevant_urls|
                         comments|
                         chromosome_list)*                           >
<!--         general_classification
                        This field can be used to distinguish what
                        types of sample details are appropriate.
             cell_structure
                        e.g. single cell, multi cell, etc.         -->
<!ATTLIST  species id ID #REQUIRED
             primary_scientific_name
                        CDATA                              #REQUIRED
             is_sequenced_genome
                        CDATA                              #REQUIRED
             is_circular_genome
                        CDATA                              #REQUIRED
             general_classification
                        CDATA                              #REQUIRED
             num_chromosomes
                        CDATA                              #IMPLIED
             cell_structure
                        CDATA                              #IMPLIED >


<!ELEMENT  scientific_aliases
                        (#PCDATA)                                    >
<!ELEMENT  common_names (#PCDATA)                                    >
<!ELEMENT  genome_size  (#PCDATA)                                    >
<!ELEMENT  ncbi_taxonomy_acc
                        (#PCDATA)                                    >
<!ELEMENT  relevant_urls
                        (#PCDATA)                                    >
<!ELEMENT  comments     (#PCDATA)                                    >
<!ELEMENT  chromosome_list
                        (chromosome*)                                >
<!ELEMENT  chromosome   EMPTY                                        >
<!ATTLIST  chromosome
             name       CDATA                              #REQUIRED
             length     CDATA                              #REQUIRED >


<!ELEMENT  usf_list     (data*)                           >

<!ELEMENT  csf_list     (data*)                           >



<!--                    array_layout                              -->
<!--                    Complete description of the
                        microarry. E.g. who created it, spot
                        location, content, size, spacine, etc.     -->

<!ELEMENT  array_layout_list
                        (array_layout*)                              >
<!ELEMENT  array_layout (data?)                                       >
<!ATTLIST  array_layout id ID #REQUIRED
             contact_id IDREF                              #REQUIRED
             name       CDATA                              #REQUIRED
             technology_type
                        CDATA                              #REQUIRED
             identifier_code
                        CDATA                              #IMPLIED
             medium     CDATA                              #IMPLIED
             coating    CDATA                              #IMPLIED
             default_spot_conc
                        CDATA                              #IMPLIED
             default_spot_conc_units
                        CDATA                              #IMPLIED
             default_spot_conc_error
                        CDATA                              #IMPLIED  >

<!ELEMENT  experiment_set (experiment_set_header?,
                           array*)                                   >
<!--         local_accession_num
                        If the experimentor that created this data
                        stored it in a local DB, this is the
                        accession number in that local DB. This is
                        provided in order to make it easier to get
                        more details from the primary author.
             group_can_update
                        Specifies whether the group has privelege to
                        modify the data, or only view the data
                        (read/write vs. read only access)
             treatment_type
                        This is used in conjunction with the Treatment
                        definition information to define the number and types 
                        of data points in the experiment. 
                        * mutant_wildtype: a mutant vs wildtype comparison
                        * normal_disease: a diseased tissue vs normal tissue
                            comparison
                        * time_series: self explanatory
                        * development_series: self explanatory
                        * quantity_series: A series of related conditions, 
                            such as osmotic stress, with 0, 15, 30, and 
                            45 mM NaCl.
                        * miscellaneous_series: a grouping of separate 
                            conditions that can't be defined under a single 
                            quantity series, e.g. one data point with 
                            15mM NaCl, one data point with 15mM Glucose, 
                            one data point with 37 degrees C.
                        * multidimensional_series: A full matrix experiment 
                            that can't be classified as a single series. 
                            E.g. an osmotic stress experiment, that also 
                            varies glucose concentration.
             quantity_series_type
                        This is to give more detail of the general
                        experimexntal design. It is intended for DB
                        query purposes, e.g. "Show all yeast heatshock
                        data sets".                                -->
<!ATTLIST  experiment_set
             id ID #REQUIRED
             citation_id
                        IDREF                              #IMPLIED
             owner_contact_id   
                        IDREF                              #IMPLIED
             group_id   IDREF                              #IMPLIED
             name       CDATA                              #REQUIRED
             is_public  CDATA                              #REQUIRED
             local_accession
                        CDATA                              #IMPLIED
             group_can_update
                        CDATA                              #REQUIRED
             treatment_type
                        CDATA                              #REQUIRED
             quantity_series_type
                        CDATA                              #REQUIRED
             archive_bundle_ref
                        CDATA                              #IMPLIED
             release_date 
                        CDATA                              #REQUIRED     
             submission_date 
                        CDATA                              #IMPLIED
             experiment_date 
                        CDATA                              #IMPLIED  >

<!ELEMENT  experiment_set_header
                        (biology_description|
                         experiment_factors_list|
                         treatment_list|
                         analysis_description)*                      >

<!-- ============================================================= -->
<!--
     The <treatment_list> corresponds to the TreatmentLevel table
                                                                   -->
<!-- ============================================================= -->
<!ELEMENT  treatment_list
                        (treatment*)                                 >
<!ELEMENT  treatment    
                        (treatment_array_list|
                         treatment_factor_list)*                     >
<!ATTLIST  treatment
             id ID #REQUIRED
             ratio_array_measurement_id
                        IDREF                              #IMPLIED
             treatment_name       
                        CDATA                              #REQUIRED >

<!ELEMENT  treatment_array_list
                        (treatment_array*)                           >


<!-- ============================================================= -->
<!--
     The <treatment_array> corresponds to the Treatment_AMs table
         the measurement_id referes to the correspond <array_measurement>
         ID attribute
                                                                   -->
<!-- ============================================================= -->
<!ELEMENT  treatment_array
                        EMPTY                                        >
<!ATTLIST  treatment_array
             measurement_id 
                        IDREF                              #REQUIRED  >


<!-- ============================================================= -->
<!--                    
     The <treatment_factor> corresponds to the TL_FactorValues
                                                                   -->
<!-- ============================================================= -->
<!ELEMENT  treatment_factor_list 
                        (treatment_factor*)                          >
<!ELEMENT  treatment_factor 
                        EMPTY                                        >
<!ATTLIST  treatment_factor
             factor_id  IDREF                              #REQUIRED
             value      CDATA                              #REQUIRED 
             reference_value
                        CDATA                              #REQUIRED >


<!--                    experiment_factor                        -->
<!--                    List of the factors present in the
                        experimental design.                       -->
<!--         other_name 
                        It the major category is 'other' this field
                        will indicate what that category is.       -->
<!ELEMENT  experiment_factors_list
                        (experiment_factor*)                       >
<!ELEMENT  experiment_factor
                        EMPTY                                        >
<!ATTLIST  experiment_factor
             id ID #REQUIRED
             factor_name       
                        CDATA                              #REQUIRED
             factor_units       
                        CDATA                              #IMPLIED
             major_category
                        CDATA                              #REQUIRED
             minor_category
                        CDATA                              #IMPLIED  >
<!ELEMENT  biology_description
                        (#PCDATA)                                    >
<!ELEMENT  analysis_description
                        (#PCDATA)                                    >


<!--                    array                                      -->
<!--                    The data and meta-data for an individual
                        microarray.                                -->

<!ELEMENT  array         (spotter_sw_params|
                          spotter_hw_params|
                          scanner_sw_params|
                          scanner_hw_params|
                          image_analysis_sw_params|
                          array_measurement_list|
                          channel_info_list)*                       >

<!--         spot_measurement_units
                        E.g. 'cpm' for p32 data
             hybridization_stringency
                        This needs to be calculated using some
                        standard metric
             hybridization_name
                        This is the identifier that groups different
                        <array_measurements> under the same <array>
             bundle_file_name
                        This is the file in the archive bundle that
                        holds the data for this measurement        -->
<!ATTLIST  array
             name       CDATA                              #IMPLIED
             array_layout_id
                        IDREF                              #IMPLIED
             spotter_sw_id
                        IDREF                              #IMPLIED
             spotter_hw_id
                        IDREF                              #IMPLIED
             scanner_sw_id
                        IDREF                              #IMPLIED
             image_analysis_sw_id
                        IDREF                              #IMPLIED
             scanner_hw_id
                        IDREF                              #IMPLIED
             identifier_code
                        CDATA                              #IMPLIED
             release_date 
                        CDATA                              #REQUIRED     
             submission_date 
                        CDATA                              #IMPLIED
             experiment_date 
                        CDATA                              #IMPLIED
             owner_contact_id
                        IDREF                              #IMPLIED
             group_id   IDREF                              #IMPLIED
             group_can_update
                        CDATA                              #REQUIRED
             is_public  CDATA                              #REQUIRED
             spot_measurement_units
                        CDATA                              #IMPLIED
             hybridization_name
                        CDATA                              #IMPLIED
             hybridization_stringency
                        CDATA                              #IMPLIED  >

<!ELEMENT  array_measurement_list
                        (array_measurement*)                         >
<!ELEMENT  array_measurement
                        (description|
                          equation|
                          data)*                                      >
<!ATTLIST  array_measurement
             type       CDATA                              #REQUIRED
             sample_id  IDREF                              #IMPLIED
             channel_id IDREF                              #IMPLIED
             file_name
                        CDATA                              #IMPLIED 
             column_name
                        CDATA                              #IMPLIED 
             id         ID                                 #REQUIRED >

<!ELEMENT  channel_info_list 
                        (channel_info*)                              >
<!ELEMENT  channel_info 
                        (measurement_factor_value_list*)             >
<!ATTLIST  channel_info
             id         ID                                 #REQUIRED
             background_corrected
                        CDATA                              #IMPLIED
             unit       CDATA                              #IMPLIED
             description
                        CDATA                              #IMPLIED >

<!ELEMENT  measurement_factor_value_list
                        (measurement_factor_value*)
                                                                     >
<!ELEMENT  measurement_factor_value 
                        EMPTY                                        >
<!ATTLIST  measurement_factor_value
             factor_id  IDREF                              #REQUIRED
             value      CDATA                              #REQUIRED >


<!ELEMENT  equation     EMPTY                                        >
<!ATTLIST  equation
             type       CDATA                              #REQUIRED
             value      CDATA                              #REQUIRED >

<!ELEMENT  scanner_hw_params    
                        (#PCDATA)                                    >


<!--                    scanning_sw_params                         -->
<!ELEMENT  scanner_sw_params 
                        (#PCDATA)                                    >
<!ELEMENT  spotter_hw_params    
                        (#PCDATA)                                    >


<!--                    scanning_sw_params                         -->
<!ELEMENT  spotter_sw_params 
                        (#PCDATA)                                    >

<!--                    image_analysis_sw_params                   -->
<!ELEMENT  image_analysis_sw_params
                        (#PCDATA)                                    >
<!ELEMENT  description  
                        (#PCDATA)                                    >

<!ELEMENT  data         EMPTY                                        >
<!ATTLIST  data
             external_file_id
                        IDREF                              #REQUIRED >

<!--
     Local Variables:
     dtd-xml-flag: t
     End:
-->

