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

  <xsd:annotation>
    <xsd:documentation xml:lang="en">
     ExpressionView file format schema, version 1.1.
     ExpressionView is a tool to visualize modules (biclusters) in
     gene expression data. Please see http://www.unil.ch/cbg for
     details. Copyright 2010 UNIL DGM Computational Biology Group
    </xsd:documentation>
  </xsd:annotation>

  <xsd:element name="evf" type="evfType" />
  
  <xsd:complexType name="evfType">
    <xsd:sequence>
      <xsd:element name="summary" type="SummaryType" />
      <xsd:element name="experimentdata" type="ExperimentDataType" />
      <xsd:element name="genes" type="GenesType" />
      <xsd:element name="samples" type="SamplesType" />
      <xsd:element name="modules" type="ModulesType" />
      <xsd:element name="data" type="xsd:base64Binary" />
    </xsd:sequence>
  </xsd:complexType>
  
  <xsd:complexType name="SummaryType">
    <xsd:sequence>
      <xsd:element name="description" minOccurs="0" type="xsd:string" />
      <xsd:element name="version" type="xsd:string" />
      <xsd:element name="dataorigin" minOccurs="0" type="xsd:string" />
      <xsd:element name="xaxislabel" minOccurs="0" type="xsd:string" />
      <xsd:element name="yaxislabel" minOccurs="0" type="xsd:string" />
      <xsd:element name="nmodules" type="xsd:nonNegativeInteger" />
      <xsd:element name="ngenes" type="xsd:positiveInteger" />
      <xsd:element name="nsamples" type="xsd:positiveInteger" />
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="ExperimentDataType">
    <xsd:all>
      <xsd:element name="title" minOccurs="0" type="xsd:string" />
      <xsd:element name="name" minOccurs="0" type="xsd:string" />
      <xsd:element name="lab" minOccurs="0" type="xsd:string" />
      <xsd:element name="abstract" minOccurs="0" type="xsd:string" />
      <xsd:element name="url" minOccurs="0" type="xsd:anyURI" />
      <xsd:element name="annotation" minOccurs="0" type="xsd:string" />
      <xsd:element name="organism" minOccurs="0" type="xsd:string" />
    </xsd:all>
  </xsd:complexType>

  <xsd:complexType name="GenesType">
    <xsd:sequence>
      <xsd:element name="genetags" type="GeneTagsType" />
      <xsd:element name="gene" maxOccurs="unbounded" type="GeneType" />
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="ExtraType">
    <xsd:simpleContent>
      <xsd:extension base="xsd:string">
	<xsd:attribute name="name" type="xsd:string" use="required" />
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>

  <xsd:complexType name="GeneTagsType">
    <xsd:sequence>
      <xsd:element name="id" type="xsd:string" />
      <xsd:element name="name" minOccurs="0" type="xsd:string" />
      <xsd:element name="symbol" minOccurs="0" type="xsd:string" />
      <xsd:element name="entrezid" minOccurs="0" type="xsd:string" />
      <xsd:element name="x" minOccurs="0" maxOccurs="unbounded"
		   type="ExtraType" />
    </xsd:sequence>
  </xsd:complexType>
  
  <xsd:complexType name="GeneType">
    <xsd:sequence>
      <xsd:element name="id" type="xsd:string" />
      <xsd:element name="name" minOccurs="0" type="xsd:string" />
      <xsd:element name="symbol" minOccurs="0" type="xsd:string" />
      <xsd:element name="entrezid" minOccurs="0" type="xsd:string" />
      <xsd:element name="x" minOccurs="0" maxOccurs="unbounded"
		   type="ExtraType"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="SamplesType">
    <xsd:sequence>
      <xsd:element name="sampletags" type="SampleTagsType" />
      <xsd:element name="sample" maxOccurs="unbounded" 
		   type="SampleType" />
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="SampleTagsType">
    <xsd:sequence>
      <xsd:element name="id" type="xsd:string" />
      <xsd:element name="name" minOccurs="0" type="xsd:string" />
      <xsd:element name="x" minOccurs="0" maxOccurs="unbounded"
		   type="ExtraType" />
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="SampleType">
    <xsd:sequence>
      <xsd:element name="id" type="xsd:string" />
      <xsd:element name="name" minOccurs="0" type="xsd:string" />
      <xsd:element name="x" minOccurs="0" maxOccurs="unbounded"
		   type="ExtraType" />
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="ModulesType">
    <xsd:sequence>
      <xsd:element name="moduletags" type="ModuleTagsType" />
      <xsd:element name="gotags" minOccurs="0" type="GoTagsType" />
      <xsd:element name="keggtags" minOccurs="0" type="KeggTagsType" />
      <xsd:element name="module" maxOccurs="unbounded" 
		   type="ModuleType" />
    </xsd:sequence>      
  </xsd:complexType>

  <xsd:complexType name="ModuleTagsType">
    <xsd:sequence>
      <xsd:element name="id" type="xsd:string" />
      <xsd:element name="name" minOccurs="0" type="xsd:string" />
      <xsd:element name="iterations" minOccurs="0" type="xsd:string" />
      <xsd:element name="oscillation" minOccurs="0" type="xsd:string" />
      <xsd:element name="thr_row" minOccurs="0" type="xsd:string" />
      <xsd:element name="thr_col" minOccurs="0" type="xsd:string" />
      <xsd:element name="freq" minOccurs="0" type="xsd:string" />
      <xsd:element name="rob" minOccurs="0" type="xsd:string" />
      <xsd:element name="rob_limit" minOccurs="0" type="xsd:string" />
      <xsd:element name="x" minOccurs="0" maxOccurs="unbounded"
		   type="ExtraType" />
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="GoTagsType">
    <xsd:sequence>
      <xsd:element name="id" type="xsd:string" />
      <xsd:element name="go" type="xsd:string" />
      <xsd:element name="term" type="xsd:string" />
      <xsd:element name="ontology" type="xsd:string" />
      <xsd:element name="pvalue" type="xsd:string" />
      <xsd:element name="oddsratio" type="xsd:string" />
      <xsd:element name="expcount" type="xsd:string" />
      <xsd:element name="count" type="xsd:string" />
      <xsd:element name="size" type="xsd:string" />
    </xsd:sequence>
  </xsd:complexType>
  
  <xsd:complexType name="KeggTagsType">
    <xsd:sequence>
      <xsd:element name="id" type="xsd:string" />
      <xsd:element name="kegg" type="xsd:string" />
      <xsd:element name="pathname" type="xsd:string" />
      <xsd:element name="pvalue" type="xsd:string" />
      <xsd:element name="oddsratio" type="xsd:string" />
      <xsd:element name="expcount" type="xsd:string" />
      <xsd:element name="count" type="xsd:string" />
      <xsd:element name="size" type="xsd:string" />    
    </xsd:sequence>
  </xsd:complexType>  

  <xsd:simpleType name="integerList">
    <xsd:list itemType="xsd:positiveInteger"/>
  </xsd:simpleType>

  <xsd:simpleType name="doubleList">
    <xsd:list itemType="xsd:double"/>
  </xsd:simpleType>

  <xsd:complexType name="ModuleType">
    <xsd:sequence>
      <xsd:element name="id" type="xsd:string" />
      <xsd:element name="name" minOccurs="0" type="xsd:string" />
      <xsd:element name="iterations" minOccurs="0" type="xsd:string" />
      <xsd:element name="oscillation" minOccurs="0" type="xsd:string" />
      <xsd:element name="thr_row" minOccurs="0" type="xsd:string" />
      <xsd:element name="thr_col" minOccurs="0" type="xsd:string" />
      <xsd:element name="freq" minOccurs="0" type="xsd:string" />
      <xsd:element name="rob" minOccurs="0" type="xsd:string" />
      <xsd:element name="rob_limit" minOccurs="0" type="xsd:string" />
      <xsd:element name="x" minOccurs="0" maxOccurs="unbounded"
		   type="ExtraType" />
      <xsd:element name="containedgenes" type="integerList" />
      <xsd:element name="genescores" type="doubleList" />
      <xsd:element name="containedsamples" type="integerList" />
      <xsd:element name="samplescores" type="doubleList" />
      <xsd:element name="intersectingmodules" type="integerList" />
      <xsd:element name="gos" minOccurs="0" type="GosType" />
      <xsd:element name="keggs" minOccurs="0" type="KeggsType" />
    </xsd:sequence>
  </xsd:complexType>  

  <xsd:complexType name="GosType">
    <xsd:sequence>
      <xsd:element name="go" minOccurs="0" maxOccurs="unbounded" />
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="KeggsType">
    <xsd:sequence>
      <xsd:element name="kegg" minOccurs="0" maxOccurs="unbounded" />
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="go">
    <xsd:sequence>
      <xsd:element name="id" type="xsd:positiveInteger" />
      <xsd:element name="go" type="xsd:string" />
      <xsd:element name="ontology" type="xsd:string" />
      <xsd:element name="pvalue" type="xsd:double" />
      <xsd:element name="oddsratio" type="xsd:double" />
      <xsd:element name="expcount" type="xsd:double" />
      <xsd:element name="count" type="xsd:nonNegativeInteger" />
      <xsd:element name="size" type="xsd:nonNegativeInteger" />
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="kegg">
    <xsd:sequence>
      <xsd:element name="id" type="xsd:positiveInteger" />
      <xsd:element name="kegg" type="xsd:string" />
      <xsd:element name="pathname" type="xsd:string" />
      <xsd:element name="pvalue" type="xsd:double" />
      <xsd:element name="oddsratio" type="xsd:double" />
      <xsd:element name="expcount" type="xsd:double" />
      <xsd:element name="count" type="xsd:nonNegativeInteger" />
      <xsd:element name="size" type="xsd:nonNegativeInteger" />
    </xsd:sequence>
  </xsd:complexType>
  
</xsd:schema>
