<?xml version='1.0'?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
  
  <xsd:element name="LOCATE_doc" type="LOCATE_docType"/>

  <!-- LOCATE_Doc-->
  <xsd:complexType name="LOCATE_docType">
    <xsd:sequence>
      <xsd:element name="LOCATE_protein" type="LOCATE_proteinType" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>

  <!-- LOCATE_Protein -->
  <xsd:complexType name="LOCATE_proteinType">
    <xsd:sequence>
      <xsd:element name="protein" type="proteinType"/>
      <xsd:element name="transcript" type="transcriptType"/>
      <xsd:element name="experimental_data" type="expDataType"/>
      <xsd:element name="literature" type="literatureType" minOccurs="0"/>
      <xsd:element name="motifs" type="motifType" minOccurs="0"/>
      <xsd:element name="xrefs" type="xrefType" minOccurs="0"/>
      <xsd:element name="memo" type="memoType" minOccurs="0"/>
      <xsd:element name="topology" type="topologyType" minOccurs="0"/>
    </xsd:sequence>
    <xsd:attribute name="uid" type="uidType"/>
    <xsd:attribute name="date_created" type="xsd:date"/>
    <xsd:attribute name="date_updated" type="xsd:date"/>
  </xsd:complexType>

  <!-- uid -->
  <xsd:simpleType name="uidType">
    <xsd:restriction base="xsd:integer">
      <xsd:minInclusive value="200000"/>
    </xsd:restriction>
  </xsd:simpleType>

  <!-- protein -->
  <xsd:complexType name="proteinType">
    <xsd:sequence>
      <xsd:element name="organism" type="xsd:string"/>
      <xsd:element name="class" type="xsd:string"/>
      <xsd:element name="protein_function" type="xsd:string" minOccurs="0"/>
      <xsd:element name="synonyms" type="synonymType" minOccurs="0"/>
      <xsd:element name="location_notes" type="xsd:string" minOccurs="0"/>
      <xsd:element name="source" type="sourceType"/>
      <xsd:element name="protein_sequence" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>    

  <!-- synonym -->
  <xsd:complexType name="synonymType">
    <xsd:sequence>
      <xsd:element name="synonym" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>

  <!-- transcript -->
  <xsd:complexType name="transcriptType">
    <xsd:sequence>
      <xsd:element name="other_isoforms" type="isoformType" minOccurs="0"/>
      <xsd:element name="transcript_sequence" type="xsd:string"/>
      <xsd:element name="strand" type="strandType"/>
    </xsd:sequence>
  </xsd:complexType>

  <!-- isoforms -->
  <xsd:complexType name="isoformType">
    <xsd:sequence>
      <xsd:element name="isoform" minOccurs="0" maxOccurs="unbounded">
        <xsd:complexType>
          <xsd:simpleContent>
            <xsd:extension base="xsd:string">
            <xsd:attribute name="class" type="xsd:string" />
            </xsd:extension>
          </xsd:simpleContent>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>

  <!-- strand -->
  <xsd:simpleType name="strandType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="+"/>
      <xsd:enumeration value="-"/>
   </xsd:restriction>
  </xsd:simpleType>

  <!-- experimental_data -->
  <xsd:complexType name="expDataType">
    <xsd:sequence>
      <xsd:element name="images" type="imageType" minOccurs="0"/>
      <xsd:element name="coloc_images" type="colocImageType" minOccurs="0"/>
      <xsd:element name="LOCATIONS" type="locationType" minOccurs="0"/>
    </xsd:sequence>
  </xsd:complexType>

  <!-- location -->
  <xsd:complexType name="locationType">
    <xsd:sequence>
    <xsd:element name="LOCATION" minOccurs="0" maxOccurs="unbounded">
      <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="TIER1" type="xsd:string" minOccurs="0"/>
        <xsd:element name="TIER2" type="xsd:string" minOccurs="0"/>
        <xsd:element name="TIER3" type="xsd:string" minOccurs="0"/>
      </xsd:sequence>
      <xsd:attribute name="goid" type="xsd:string"/>
      </xsd:complexType>
    </xsd:element>
    </xsd:sequence>
  </xsd:complexType>

  <!-- literature -->
  <xsd:complexType name="literatureType">
    <xsd:sequence>
      <xsd:element name="reference" minOccurs="0" maxOccurs="unbounded">
        <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="pmid" type="xsd:integer" minOccurs="0" maxOccurs="1"/>
          <xsd:element name="author" type="xsd:string"/>
          <xsd:element name="title" type="xsd:string"/>
          <xsd:element name="citation" type="xsd:string"/>
          <xsd:element name="organism" type="xsd:string"/>
          <xsd:element name="LOCATIONS" type="locationType"/>
          <xsd:element name="notes" type="xsd:string" minOccurs="0"/>
          <xsd:element name="date_analyzed" type="xsd:date"/>
          <xsd:element name="source" type="sourceType"/>
        </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>

  <!-- external_annot -->
  <xsd:complexType name="externalAnnotType">
    <xsd:sequence>
      <xsd:element name="reference" minOccurs="0" maxOccurs="unbounded">
        <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="pmid" type="xsd:integer" minOccurs="0" maxOccurs="1"/>
          <xsd:element name="locations" type="locationType"/>
          <xsd:element name="source" type="sourceType"/>
          <xsd:element name="evidence" type="xsd:string"/>
        </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>

 <!-- slp_prediction JS070908-->
  <xsd:complexType name="slpPredictionType">
    <xsd:sequence>
      <xsd:element name="slp_prediction">
       <xsd:complexType>
         <xsd:sequence>
           <xsd:element name="method" type="xsd:string"/>
           <xsd:element name="location" type="xsd:string"/>
           <xsd:element name="goid" type="xsd:string"/>
           <xsd:element name="evaluation" type="xsd:string"/>
         </xsd:sequence>
       </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>

  <!-- source -->
  <xsd:complexType name="sourceType">
    <xsd:sequence>
      <xsd:element name="source_name" type="xsd:string"/>
      <xsd:element name="accn" type="xsd:string" minOccurs="0"/>
    </xsd:sequence>
    <xsd:attribute name="source_id" type="xsd:integer"/>
  </xsd:complexType>

  <!-- motif -->
  <xsd:complexType name="motifType">
    <xsd:sequence>
      <xsd:element name="motif" minOccurs="0" maxOccurs="unbounded">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="motif_name" type="xsd:string"/>
            <xsd:element name="motif_description" type="xsd:string" minOccurs="0"/>
            <xsd:element name="motif_type" type="motifTypeType" minOccurs="0"/>
            <xsd:element name="source" type="sourceType"/>
            <xsd:element name="position" type="xsd:string"/>
            <xsd:element name="status" type="statusType"/>
          </xsd:sequence>
          <xsd:attribute name="motif_id" type="xsd:integer"/>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>

  <!-- status -->
  <xsd:simpleType name="statusType">
    <xsd:restriction base ="xsd:string">
      <xsd:enumeration value="is_predicted"/>
      <xsd:enumeration value="is_validated"/>
      <xsd:enumeration value="is_real"/>
    </xsd:restriction>
  </xsd:simpleType>

  <!-- motif_type -->
  <xsd:simpleType name="motifTypeType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="family"/>
      <xsd:enumeration value="domain"/>
      <xsd:enumeration value=""/> <!-- to allow for no type -->
    </xsd:restriction>
  </xsd:simpleType>

  <!-- images -->
  <xsd:complexType name="imageType">
    <xsd:sequence>
      <xsd:element name="rep_image" type="imageTypeType" minOccurs="0" maxOccurs="1"/>
      <xsd:element name="image" type="imageTypeType" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>

  <!-- image -->
  <xsd:complexType name="imageTypeType">
      <xsd:sequence>
        <xsd:element name="filename" type="xsd:string"/>
        <xsd:element name="celltype" type="xsd:string"/>
        <xsd:element name="magnification" type="xsd:string"/>
        <xsd:element name="tag" type="xsd:string"/>
        <xsd:element name="epitope" type="xsd:string"/>
        <xsd:element name="channel" type="xsd:string"/>
      </xsd:sequence>
  </xsd:complexType>

  <!-- yes/no Type -->
  <xsd:simpleType name="yesNoType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="Y"/>
      <xsd:enumeration value="N"/>
   </xsd:restriction>
  </xsd:simpleType>

  <!-- coloc_images -->
  <xsd:complexType name="colocImageType">
    <xsd:sequence>
      <xsd:element name="rep_coloc_image" type="colocImageTypeType" minOccurs="0" maxOccurs="1"/>
      <xsd:element name="coloc_image" type="colocImageTypeType" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="colocImageTypeType">
    <xsd:sequence>
      <xsd:element name="filename" type="xsd:string"/>
      <xsd:element name="celltype" type="xsd:string"/>
      <xsd:element name="channel1" type="xsd:string"/>
      <xsd:element name="channel2" type="xsd:string"/>
      <xsd:element name="magnification" type="xsd:string"/>
      <xsd:element name="coloc" type="ynpType"/>
    </xsd:sequence>
  </xsd:complexType>

  <!-- yes/no/partial -->
  <xsd:simpleType name="ynpType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="Yes"/>
      <xsd:enumeration value="No"/>
      <xsd:enumeration value="Partial"/>
    </xsd:restriction>
  </xsd:simpleType>


  <!-- xref -->
  <xsd:complexType name="xrefType">
    <xsd:sequence>
      <xsd:element name="xref" minOccurs="0" maxOccurs="unbounded">
        <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="source" type="sourceType"/>
        </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>

  <!-- memo -->
  <xsd:complexType name="memoType">
    <xsd:sequence>
      <xsd:element name="methods">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="TMHMM" type="methodType"/>
            <xsd:element name="SVMTM" type="methodType"/>
            <xsd:element name="HMMTOP" type="methodType"/>
            <xsd:element name="MEMSAT" type="methodType"/>
            <xsd:element name="DAS" type="methodType"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="signalp" type="signalPType"/>
      <xsd:element name="nterm_conflict" type="xsd:string"/>
      <xsd:element name="nterm_resolved" type="xsd:string"/>
      <xsd:element name="num_tmd" type="xsd:integer"/>
      <xsd:element name="tmd" type="xsd:string"/>
      <xsd:element name="scores" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>

  <!-- topology -->
  <xsd:complexType name="topologyType">
    <xsd:sequence>
      <xsd:element name="methods">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="TMHMM" type="methodType"/>
            <xsd:element name="HMMTOP" type="methodType"/>
            <xsd:element name="MEMSAT" type="methodType"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>

  <!-- methods -->
  <xsd:complexType name="methodType">
    <xsd:sequence>
    <xsd:element name="position" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>

  <!-- signalp -->
  <xsd:complexType name="signalPType">
    <xsd:sequence>
    <xsd:element name="score"/>
    <xsd:element name="has_signalp" type="signalType"/>
    </xsd:sequence>
  </xsd:complexType>

  <!-- signal -->
  <xsd:complexType name="signalType">
    <xsd:simpleContent>
      <xsd:extension base="yesNoType">
        <xsd:attribute name="threshold" type="thresholdType"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>

  <!-- threshold -->
  <xsd:simpleType name="thresholdType">
    <xsd:restriction base="xsd:float">
      <xsd:minInclusive value="0"/>
      <xsd:maxInclusive value="1"/>
    </xsd:restriction>
  </xsd:simpleType>


</xsd:schema>
