<!--
********************************************************
*
* db.xsd
*
* Authors: The DNA team, http://www.dna.ac.uk
*
* Version: SId: db.xsd,v 1.1.2.1 2004/03/12 11:10:07 spruce Exp S
*
********************************************************
-->

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:dna="http://www.dna.ac.uk/DNA_XMLSchema">


  <xsd:include schemaLocation="dna_common.xsd"/>


  <xsd:complexType name="proposal">
    <xsd:sequence>
      <xsd:element name="proposal_key" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:integer"/>
      <xsd:element name="propos_uo_ref" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:integer"/>
      <xsd:element name="proposal_code" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:string"/>
      <xsd:element name="proposal_number" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:integer"/>
      <xsd:element name="surname" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:string"/>
      <xsd:element name="labo_name" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:string"/>
      <xsd:element name="labo_pays_code" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:integer"/>
      <xsd:element name="propos_tit" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:string"/>

    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="db_proposal">
    <xsd:sequence>
      <xsd:element name="proposal" 
                   minOccurs="1" 
                   maxOccurs="1" 
                   type="proposal"/>
      <xsd:element name="session" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="db_session"/>
      <xsd:element name="start_date" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:string"/>
      <xsd:element name="end_date" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:string"/>
      <xsd:element name="run" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:string"/>
    </xsd:sequence>
    
  </xsd:complexType>


  <xsd:complexType name="db_session">
    <xsd:sequence>
      <xsd:element name="sessionno" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:integer"/>
      <xsd:element name="se_pl_no" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:integer"/>
      <xsd:element name="user_no" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:integer"/>
      <xsd:element name="proposal_key" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:integer"/>
      <xsd:element name="scheduled" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:integer"/>
      <xsd:element name="local_contact" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:string"/>
      <xsd:element name="date_deb" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:string"/>
      <xsd:element name="date_fin" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:string"/>
      <xsd:element name="no_shifts" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:string"/>
      <xsd:element name="instr_nom" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:string"/>
      <xsd:element name="exp_operator" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:string"/>
      <xsd:element name="no_perf_shifts" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:integer"/>
      <xsd:element name="comment" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:string"/>
      <xsd:element name="blom_comment" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:string"/>
      <xsd:element name="lc_comment" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:string"/>

    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="sample">
    <xsd:sequence>
      <xsd:element name="protein_id" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:string"/>
      <xsd:element name="crystal_key" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:string"/>
      <xsd:element name="suffix" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:string"/>

    </xsd:sequence>
  </xsd:complexType>


  <xsd:complexType name="db_collect_store_request">
    <xsd:sequence>
      <xsd:element name="db_proposal" 
                   minOccurs="1" 
                   maxOccurs="1" 
                   type="db_proposal"/>
      <xsd:element name="fileinfo" 
                   minOccurs="1" 
                   maxOccurs="1" 
                   type="fileinfo"/>
      <xsd:element name="oscillation_sequence"
                   minOccurs="1" 
                   maxOccurs="unbounded" 
                   type="oscillation_sequence"/>
      <xsd:element name="sample"
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="sample"/>
      <xsd:element name="wavelength" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:double"/>
      <xsd:element name="xbeam" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:double"/>
      <xsd:element name="ybeam" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:double"/>
      <xsd:element name="distance" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:double"/>
      <xsd:element name="resolution" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:double"/>
    </xsd:sequence>
  </xsd:complexType>

  <!--  Example collect_request:
  This looks exactly like a collect request but it is used differently.
  Maybe it will evolve!

        <db_collect_store_request>
          <db_proposal>
            <proposal>
            </proposal>
            <db_session>
              <sessionno>123454</sessionno>
            </db_session>
           </db_proposal>
          <fileinfo>
            <directory>/data/id14eh1/inhouse/dna</directory>
            <prefix>dnatest</prefix>
          </fileinfo>
          <oscillation_sequence>
            <start>0.0</start>
            <range>1.0</range>
            <number_of_images>2</number_of_images>
            <overlap>-89.0</overlap>
            <exposure_time>1.0</exposure_time>
            <start_image_number>1</start_image_number>
            <number_of_passes>1</number_of_passes>
          </oscillation_sequence>
        </db_collect_store_request>
           
   -->   




  <xsd:complexType name="db_collect_store_response">
    <xsd:sequence>
      <xsd:element name="status" 
                   minOccurs="1" 
                   maxOccurs="1" 
                   type="status"/>
    </xsd:sequence>
  </xsd:complexType>

  <!--  Example collect_response:

        <db_collect_store_response>
          <status>
            <code>ok</code>
          </status>
        </db_collect_store_response>

   -->   


  <xsd:complexType name="db_image_store_request">
    <xsd:sequence>
      <xsd:element name="filename" 
                   minOccurs="1" 
                   maxOccurs="1" 
                   type="xsd:string"/>
      <xsd:element name="directory" 
                   minOccurs="1" 
                   maxOccurs="1" 
                   type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>

  <!--  Example image_store_request:
    This would have been fileinfo but the database needs to have the exact image
    name in order to display the image. This is not possible with fileinfo.
        <db_image_store_request>
          <filename> xxx_001.img </filename>
          <directory>/data/id14eh1/inhouse/dna</directory>
        </db_image_store_request>
           
   -->   




  <xsd:complexType name="db_collect_store_response">
    <xsd:sequence>
      <xsd:element name="status" 
                   minOccurs="1" 
                   maxOccurs="1" 
                   type="status"/>
    </xsd:sequence>
  </xsd:complexType>

  <!--  Example collect_response:

        <db_collect_store_response>
          <status>
            <code>ok</code>
          </status>
        </db_collect_store_response>

   -->   


  <xsd:complexType name="db_proposal_request">
    <xsd:sequence>
      <xsd:element name="category" 
                   minOccurs="1" 
                   maxOccurs="1" 
                   type="xsd:string"/>
      <xsd:element name="code" 
                   minOccurs="1" 
                   maxOccurs="1" 
                   type="xsd:integer"/>
      <xsd:element name="start_date" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:string"/>
      <xsd:element name="end_date" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:string"/>
      <xsd:element name="run" 
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>

  <!--  Example proposal_request:

        <db_proposal_request>
          <category> LS </category>
          <code>1234</code>
        </db_proposal_request>
           
   -->   




  <xsd:complexType name="db_proposal_response">
    <xsd:sequence>
      <xsd:element name="status" 
                   minOccurs="1" 
                   maxOccurs="1" 
                   type="status"/>
      <xsd:element name="db_proposal"
                   minOccurs="0" 
                   maxOccurs="1" 
                   type="db_proposal"/>
      <xsd:element name="db_session"
                   minOccurs="1" 
                   maxOccurs="unbounded" 
                   type="db_session"/>
    </xsd:sequence>
  </xsd:complexType>

  <!--  Example collect_response:
  
  The response to a login is to return an xml document with the proposal and all
  the sessions associated with it.

        <db_proposal_response>
          <status>
            <code>ok</code>
          </status>
          <proposal>
            <propos_categ_code>LS</propos_categ_code>
            <propos_categ_cpt>1234</propos_categ_cpt>
            <proposid>1</proposid>
            <surname>spruce</surname>
            <labo_name>esrf</labo_name>
            <labo_pays_code>F</labo_pays_code>
            <propos_tit>test</propos_tit>
          </proposal>
          <session>
            <se_pl_no> 1234 </se_pl_no>....
          </session>
        </db_proposal_response>

   -->   

  <xsd:complexType name="db_set_session_request">
    <xsd:sequence>
      <xsd:element name="sessionno" 
                   minOccurs="1" 
                   maxOccurs="1" 
                   type="xsd:integer"/>
    </xsd:sequence>
  </xsd:complexType>

  <!--  Example set_session_request:
  
  The response to a login is to return an xml document with the proposal and all
  the sessions associated with it.

        <db_set_session_request>
          <sessionno>14566</sessionno>
        </db_set_session_request>

   -->   


  <xsd:complexType name="db_set_session_response">
    <xsd:sequence>
      <xsd:element name="status" 
                   minOccurs="1" 
                   maxOccurs="1" 
                   type="status"/>
    </xsd:sequence>
  </xsd:complexType>

</xsd:schema>