<?xml version="1.0" encoding="UTF-8"?>
<!-- 
     Electron Microscopy Data Bank

     XML Schema for EMDB entries  version: 1.9.2

     Revision history:
     2013-03-15  1.9.2
        * Removed fields:
        * Added fields:
        * Renamed fields:
        * Format change:
            - extended the list of microscopes with: JEOL 3100FFC
     
     Contact: <help@emdatabank.org> for questions or suggestions.
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
	   elementFormDefault="qualified" attributeFormDefault="unqualified">
  <xs:element name="emdEntry" type="entryType"/>
  <xs:complexType name="entryType">
    <xs:annotation>
      <xs:documentation xml:lang="en"> 
	  Electron Microscopy Database record identified by its
	  accession code
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <!-- Admin and Deposition sections are mandatory always -->
      <xs:element name="admin" type="adminType" minOccurs="1" maxOccurs="1"/>
      <xs:element name="deposition" type="depType" minOccurs="1" maxOccurs="1"/>
      <!-- Rest of the sections are mandatory when status is REL or OBS -->
      <xs:element name="map" type="mapType" minOccurs="0" maxOccurs="1"/>
      <xs:element name="supplement" type="supplType" minOccurs="0" maxOccurs="1"/>
      <xs:element name="sample" type="samplType" minOccurs="0" maxOccurs="1"/>
      <xs:element name="experiment" type="expType" minOccurs="0" maxOccurs="1"/>
      <xs:element name="processing" type="processType" minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
    <xs:attribute name="accessCode" type="xs:string" use="required"/>
    <xs:attribute name="version" type="xs:string" fixed="1.9.0"/>
  </xs:complexType>
  <xs:complexType name="adminType">
    <xs:annotation>
      <xs:documentation xml:lang="en">         
	Information relevant for administration purposes. Not for
        public release
      </xs:documentation>
    </xs:annotation>
    <xs:all>
      <xs:element name="lastUpdate" type="xs:date"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="depType">
    <xs:annotation>
      <xs:documentation xml:lang="en"> 
	  Contains context information relevant to the EMD entry
	  record
      </xs:documentation>
    </xs:annotation>
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:element name="status" minOccurs="1" maxOccurs="1">
        <xs:complexType>
          <xs:simpleContent>
            <xs:extension base="status">
              <xs:attribute name="prior" type="status"/>
            </xs:extension>
          </xs:simpleContent>
        </xs:complexType>
      </xs:element>
      <xs:element name="depositionDate" type="xs:date" minOccurs="1" maxOccurs="1"/>
      <xs:element name="depositionSite" minOccurs="1" maxOccurs="1">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="PDBe"/>
            <xs:enumeration value="RCSB"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="processingSite" minOccurs="1" maxOccurs="1">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="PDBe"/>
            <xs:enumeration value="RCSB"/>
            <xs:enumeration value="PDBj"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="headerReleaseDate" type="xs:date" minOccurs="1" maxOccurs="1"/>
      <xs:element name="mapReleaseDate" type="xs:date" minOccurs="0" maxOccurs="1"/>
      <xs:element name="obsoletedDate" type="xs:date" minOccurs="0" maxOccurs="1"/>
      <xs:element name="supersededByList" type="emdbListType" minOccurs="0" maxOccurs="1"/>
      <xs:element name="replaceExistingEntry" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
      <xs:element name="obsoleteList" type="emdbListType" minOccurs="0" maxOccurs="1"/>
      <xs:element name="details" type="xs:string" minOccurs="0" maxOccurs="1"/>
      <xs:element name="inFrameEMDBId" type="emdbEntryIdType" minOccurs="0"/>
      <xs:element name="title" type="xs:string" minOccurs="1" maxOccurs="1"/>
      <xs:element name="authors" type="xs:string" minOccurs="1" maxOccurs="1"/>
      <xs:element name="keywords" type="xs:string" minOccurs="0" maxOccurs="1"/>
      <xs:element name="fittedPDBEntryIdList" type="pdbidListType" minOccurs="0" maxOccurs="1"/>
      <xs:element name="primaryReference" type="prRefType" minOccurs="1" maxOccurs="1"/>
      <xs:element name="secondaryReference" type="prRefType" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="mapType">
    <xs:annotation>
      <xs:documentation xml:lang="en">         
	  Information on the volume density map
      </xs:documentation>
    </xs:annotation>
    <xs:all>
      <xs:element name="file" type="mapFileType"/>
      <xs:element name="dataType" type="mapDataType"/>
      <xs:element name="dimensions" type="dimensionType"/>
      <xs:element name="origin" type="originType"/>
      <xs:element name="limit" type="limitType"/>
      <xs:element name="spacing" type="spacingType"/>
      <xs:element name="cell" type="cellType"/>
      <xs:element name="axisOrder" type="axisOrderType"/>
      <xs:element name="statistics" type="statisticsType"/>
      <xs:element name="spaceGroupNumber" type="xs:string"/>
      <xs:element name="details" type="xs:string"/>
      <xs:element name="pixelSpacing" type="pixelSpacingType"/>
      <xs:element name="contourLevel" minOccurs="0">
        <xs:complexType>
          <xs:simpleContent>
            <xs:extension base="xs:float">
              <xs:attribute name="source" type="xs:string" use="optional"/>
            </xs:extension>
          </xs:simpleContent>
        </xs:complexType>
      </xs:element>
      <xs:element name="annotationDetails" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="samplType">
    <xs:annotation>
      <xs:documentation xml:lang="en"> 
	Nature of the biological sample studied.
	[/emdEntry/sample]
      </xs:documentation>
    </xs:annotation>
    <xs:all>
      <xs:element name="numComponents" type="xs:positiveInteger"/>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="compDegree" type="xs:string" minOccurs="0"/>
      <xs:element name="molWtTheo" type="mwType" minOccurs="0"/>
      <xs:element name="details" type="xs:string" minOccurs="0"/>
      <xs:element name="molWtMethod" type="xs:string" minOccurs="0"/>
      <xs:element name="molWtExp" type="mwType" minOccurs="0"/>
      <xs:element name="sampleComponentList" type="smplCompListType"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="expType">
    <xs:annotation>
      <xs:documentation xml:lang="en">         
	  Experimental techniques used to derive the density map.
      </xs:documentation>
    </xs:annotation>
    <xs:choice maxOccurs="unbounded">
      <xs:element name="vitrification" type="vitrifType" minOccurs="0"/>
      <xs:element name="imaging" type="imgType" minOccurs="0"/>
      <xs:element name="imageAcquisition" type="imgScanType" minOccurs="0"/>
      <xs:element name="fitting" type="fittingType" minOccurs="0"/>
      <xs:element name="specimenPreparation" type="smplPrepType" minOccurs="0"/>
    </xs:choice>
  </xs:complexType>
  <xs:complexType name="processType">
    <xs:annotation>
      <xs:documentation xml:lang="en">         
	  Digital processing of the image data.
      </xs:documentation>
    </xs:annotation>
    <xs:choice minOccurs="1" maxOccurs="unbounded">
      <xs:element name="method" type="methodType"/>
      <xs:element name="reconstruction" type="reconsType"/>
      <xs:element name="twoDCrystal" type="xtal2DType" maxOccurs="1"/>
      <xs:element name="helical" type="helixType" maxOccurs="1"/>
      <xs:element name="singleParticle" type="singPartType" maxOccurs="1"/>
      <xs:element name="subtomogramAveraging" type="subTomType" maxOccurs="1"/>
      <xs:element name="tomography" type="tomogrType" maxOccurs="1"/>
    </xs:choice>
  </xs:complexType>
  <xs:complexType name="fittingType">
    <xs:annotation>
      <xs:documentation xml:lang="en">         
	  Fitting procedure details for coordinates.
      </xs:documentation>
    </xs:annotation>
    <xs:all>
      <xs:element name="targetCriteria" type="xs:string" minOccurs="0"/>
      <xs:element name="details" type="xs:string" minOccurs="0"/>
      <xs:element name="software" type="xs:string" minOccurs="0"/>
      <!-- ES (11 Oct 2012) term not yet agreed -->
      <!--xs:element name="refCategory" type="refCategoryType" minOccurs="0"/-->
      <xs:element name="refProtocol" type="refProtocolType" minOccurs="0"/>
      <xs:element name="refSpace" type="refSpaceType" minOccurs="0"/>
      <xs:element name="pdbEntryIdList" type="pdbidList2Type" minOccurs="0"/>
      <xs:element name="overallBValue" type="xs:float" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="supplType">
    <xs:annotation>
      <xs:documentation xml:lang="en"> 
	  Supplemental data sets.
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="maskSet" type="mskSetType" minOccurs="0"/>
      <xs:element name="sliceSet" type="slcSetType" minOccurs="0"/>
      <xs:element name="figureSet" type="figSetType" minOccurs="0"/>
      <xs:element name="fscSet" type="fscSetType" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="smplCompListType">
    <xs:annotation><xs:documentation>
	    List of individual sample components.
	    [/emdEntry/sample/sampleComponentList]
    </xs:documentation></xs:annotation>
    <xs:sequence>
      <xs:element name="sampleComponent" type="smplCompType" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="smplCompType">
    <xs:annotation><xs:documentation>
	    A single sample component.
	    [/emdEntry/sample/sampleComponentList/sampleComponent]
    </xs:documentation></xs:annotation>
    <xs:sequence>
      <xs:element name="entry" type="cmpntClassType"/>
      <xs:element name="sciName" type="xs:string"/>
      <xs:element name="synName" type="xs:string" minOccurs="0"/>
      <xs:element name="molWtTheo" type="mwType" minOccurs="0"/>
      <xs:element name="molWtExp" type="mwType" minOccurs="0"/>
      <xs:element name="details" type="xs:string" minOccurs="0"/>
      <xs:choice>
        <xs:element name="protein" type="proteinType"/>
        <xs:element name="cellular-component" type="cellCompType"/>
        <xs:element name="virus" type="virusType"/>
        <xs:element name="nucleic-acid" type="nuclAcidType"/>
        <xs:element name="ligand" type="ligandType"/>
        <xs:element name="label" type="labelType"/>
        <xs:element name="ribosome-eukaryote" type="riboTypeEu"/>
        <xs:element name="ribosome-prokaryote" type="riboTypePro"/>
      </xs:choice>
    </xs:sequence>
    <xs:attribute name="componentID" type="xs:positiveInteger" use="required"/>
  </xs:complexType>
  <xs:complexType name="pubType">
    <xs:choice>
      <xs:element name="journalArticle" type="jrnlArtType"/>
      <xs:element name="nonJournalArticle" type="nonJrnlArtType"/>
    </xs:choice>
  </xs:complexType>
  <xs:complexType name="prRefType">
    <xs:complexContent>
      <xs:extension base="pubType">
        <xs:attribute name="published" type="xs:boolean" use="required"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="jrnlArtType">
    <xs:sequence>
      <xs:element name="authors" type="xs:string"/>
      <xs:element name="articleTitle" type="xs:string"/>
      <xs:element name="journal" type="xs:string"/>
      <xs:element name="volume" type="xs:string" minOccurs="0"/>
      <xs:element name="firstPage" type="xs:string" minOccurs="0"/>
      <xs:element name="lastPage" type="xs:string" minOccurs="0"/>
      <xs:element name="year" type="xs:string" minOccurs="0"/>
      <xs:element name="externalReference" type="externalRefType" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="nonJrnlArtType">
    <xs:sequence>
      <xs:element name="authors" type="xs:string"/>
      <xs:element name="chapterTitle" type="xs:string" minOccurs="0"/>
      <xs:element name="book" type="xs:string" minOccurs="0"/>
      <xs:element name="thesisTitle" type="xs:string" minOccurs="0"/>
      <xs:element name="editor" type="xs:string" minOccurs="0"/>
      <xs:element name="publisher" type="xs:string" minOccurs="0"/>
      <xs:element name="publisherLocation" type="xs:string" minOccurs="0"/>
      <xs:element name="volume" type="xs:string" minOccurs="0"/>
      <xs:element name="firstPage" type="xs:string" minOccurs="0"/>
      <xs:element name="lastPage" type="xs:string" minOccurs="0"/>
      <xs:element name="year" type="xs:string" minOccurs="0"/>
      <xs:element name="externalReference" type="externalRefType" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="externalRefType">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="type" type="xs:string" use="required"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="contactType">
    <xs:sequence>
      <xs:element name="firstName" type="xs:string"/>
      <xs:element name="middleName" type="xs:string" minOccurs="0"/>
      <xs:element name="familyName" type="xs:string"/>
      <xs:element name="email" type="xs:string"/>
      <xs:element name="phone" type="xs:string" minOccurs="0"/>
      <xs:element name="fax" type="xs:string" minOccurs="0"/>
      <xs:element name="address" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="smplPrepType">
    <xs:all>
      <!-- specimenState is optional because it is not present in old entries -->
      <xs:element name="specimenState" type="specimenType" minOccurs="0"/>
      <xs:element name="specimenConc" type="samplConcType" minOccurs="0"/>
      <xs:element name="buffer" type="bufferType" minOccurs="0"/>
      <xs:element name="staining" type="xs:string" minOccurs="0"/>
      <xs:element name="specimenSupportDetails" type="xs:string" minOccurs="0"/>
      <xs:element name="twoDCrystalParameters" type="twoDxtalParamType" minOccurs="0" maxOccurs="1"/>
      <xs:element name="threeDCrystalParameters" type="threeDxtalParamType" minOccurs="0" maxOccurs="1"/>
      <xs:element name="helicalParameters" type="helixParamType" minOccurs="0" maxOccurs="1"/>
      <xs:element name="crystalGrowDetails" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="vitrifType">
    <xs:all>
      <xs:element name="cryogenName" type="cryogenType"/>
      <xs:element name="humidity" type="xs:string" minOccurs="0"/>
      <xs:element name="temperature" type="tempType" minOccurs="0"/>
      <xs:element name="instrument" type="vitrInstrType" minOccurs="0"/>
      <xs:element name="method" type="xs:string" minOccurs="0"/>
      <xs:element name="timeResolvedState" type="xs:string" minOccurs="0"/>
      <xs:element name="details" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
  <xs:simpleType name="vitrInstrType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="BAL-TEC HPM 010"/>
      <xs:enumeration value="EMS-002 RAPID IMMERSION FREEZER"/>
      <xs:enumeration value="FEI VITROBOT"/>
      <xs:enumeration value="FEI VITROBOT MARK I"/>
      <xs:enumeration value="FEI VITROBOT MARK II"/>
      <xs:enumeration value="FEI VITROBOT MARK III"/>
      <xs:enumeration value="FEI VITROBOT MARK IV"/>
      <xs:enumeration value="GATAN CRYOPLUNGE 3"/>
      <xs:enumeration value="HOMEMADE PLUNGER"/>
      <xs:enumeration value="LEICA PLUNGER"/>
      <xs:enumeration value="LEICA EM GP"/>
      <xs:enumeration value="LEICA EM CPC"/>
      <xs:enumeration value="LEICA EM HPM100"/>
      <xs:enumeration value="LEICA EM PACT"/>
      <xs:enumeration value="LEICA EM PACT2"/>
      <xs:enumeration value="LEICA KF80"/>
      <xs:enumeration value="NONE"/>
      <xs:enumeration value="REICHERT-JUNG PLUNGER"/>
      <xs:enumeration value="ZEISS PLUNGE FREEZER CRYOBOX"/>
      <xs:enumeration value="OTHER"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="imgType">
    <xs:all>
      <xs:element name="astigmatism" type="xs:string" minOccurs="0"/>
      <xs:element name="electronSource" type="eSourceType"/>
      <xs:element name="electronDose" type="eDoseType" minOccurs="0"/>
      <xs:element name="energyFilter" type="xs:string" minOccurs="0"/>
      <xs:element name="imagingMode" type="imgModeType"/>
      <xs:element name="nominalDefocusMin" type="defocusType" minOccurs="0"/>
      <xs:element name="nominalDefocusMax" type="defocusType" minOccurs="0"/>
      <xs:element name="illuminationMode" type="illumType"/>
      <xs:element name="specimenHolder" type="xs:string" minOccurs="0"/>
      <xs:element name="details" type="xs:string" minOccurs="0"/>
      <xs:element name="detector" type="xs:string" minOccurs="0"/>
      <xs:element name="nominalCs" type="csType" minOccurs="0"/>
      <xs:element name="tiltAngleMin" type="tiltType" minOccurs="0"/>
      <xs:element name="calibratedMagnification" type="xs:float" minOccurs="0"/>
      <xs:element name="tiltAngleMax" type="tiltType" minOccurs="0"/>
      <xs:element name="temperature" type="tempType" minOccurs="0"/>
      <xs:element name="temperatureMin" type="tempType" minOccurs="0"/>
      <xs:element name="temperatureMax" type="tempType" minOccurs="0"/>
      <xs:element name="microscope" type="microscopeType"/>
      <xs:element name="date" type="xs:string" minOccurs="0"/>
      <xs:element name="specimenHolderModel" type="specimenHolderType"/>
      <xs:element name="acceleratingVoltage" type="accVoltType" minOccurs="0"/>
      <xs:element name="nominalMagnification" type="xs:float" minOccurs="0"/>
      <xs:element name="energyWindow" type="eWindowType" minOccurs="0"/>
      <xs:element name="detectorDistance" type="xs:string" minOccurs="0"/>
      <xs:element name="electronBeamTiltParams" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="imgScanType">
    <xs:all>
      <xs:element name="numDigitalImages" type="xs:positiveInteger" minOccurs="0"/>
      <xs:element name="scanner" type="scannerType" minOccurs="0"/>
      <xs:element name="samplingSize" type="samplSizeType" minOccurs="0"/>
      <xs:element name="odRange" type="xs:float" minOccurs="0"/>
      <xs:element name="URLRawData" type="xs:string" minOccurs="0"/>
      <xs:element name="quantBitNumber" type="xs:positiveInteger" minOccurs="0"/>
      <xs:element name="details" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="reconsType">
    <xs:all>
      <xs:element name="algorithm" type="xs:string" minOccurs="0"/>
      <xs:element name="software" type="xs:string" minOccurs="0"/>
      <xs:element name="ctfCorrection" type="xs:string" minOccurs="0"/>
      <xs:element name="resolutionByAuthor" type="xs:string" minOccurs="0"/>
      <xs:element name="resolutionMethod" type="xs:string" minOccurs="0"/>
      <xs:element name="details" type="xs:string" minOccurs="0"/>
      <xs:element name="eulerAnglesDetails" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="twoDxtalParamType">
    <xs:all>
      <xs:element name="aLength" type="lengthType" minOccurs="0"/>
      <xs:element name="bLength" type="lengthType" minOccurs="0"/>
      <xs:element name="cLength" type="lengthType" minOccurs="0"/>
      <xs:element name="alpha" type="anglType" minOccurs="0"/>
      <xs:element name="beta" type="anglType" minOccurs="0"/>
      <xs:element name="gamma" type="anglType" minOccurs="0"/>
      <xs:element name="planeGroup" type="plGrpType"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="threeDxtalParamType">
    <xs:all>
      <xs:element name="aLength" type="lengthType" minOccurs="0"/>
      <xs:element name="bLength" type="lengthType" minOccurs="0"/>
      <xs:element name="cLength" type="lengthType" minOccurs="0"/>
      <xs:element name="alpha" type="anglType" minOccurs="0"/>
      <xs:element name="beta" type="anglType" minOccurs="0"/>
      <xs:element name="gamma" type="anglType" minOccurs="0"/>
      <xs:element name="spaceGroup" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="xtal2DType">
    <xs:all>
      <xs:element name="details" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="helixParamType">
    <xs:all>
      <xs:element name="deltaPhi" type="anglType" minOccurs="0"/>
      <xs:element name="deltaZ" type="lengthType" minOccurs="0"/>
      <xs:element name="hand" type="handType" minOccurs="0"/>
      <xs:element name="axialSymmetry" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="helixType">
    <xs:all>
      <xs:element name="details" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
  <xs:simpleType name="pointGroupSymmetryType">
    <xs:restriction base="xs:token">
      <xs:pattern value="C\d+|D\d+|O|T|I"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="singPartType">
    <xs:all>
      <xs:element name="appliedSymmetry" type="pointGroupSymmetryType" minOccurs="0"/>
      <xs:element name="numProjections" type="xs:positiveInteger" minOccurs="0"/>
      <xs:element name="numClassAverages" type="xs:positiveInteger" minOccurs="0"/>
      <xs:element name="details" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="subTomType">
    <xs:all>
      <xs:element name="appliedSymmetry" type="xs:string" minOccurs="0"/>
      <xs:element name="numSubtomograms" type="xs:positiveInteger" minOccurs="0"/>
      <xs:element name="numClassAverages" type="xs:positiveInteger" minOccurs="0"/>
      <xs:element name="details" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="tomogrType">
    <xs:all>
      <xs:element name="appliedSymmetry" type="pointGroupSymmetryType" minOccurs="0"/>
      <xs:element name="tiltAngleIncrement" type="xs:string" minOccurs="0"/>
      <xs:element name="numSections" type="xs:positiveInteger" minOccurs="0"/>
      <xs:element name="details" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="figSetType">
    <xs:sequence>
      <xs:element name="figure" type="figType" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="fscSetType">
    <xs:sequence>
      <xs:element name="fsc" type="fscType" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="figType">
    <xs:all>
      <xs:element name="file" type="xs:string"/>
      <xs:element name="details" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="fscType">
    <xs:all>
      <xs:element name="file" type="xs:string"/>
      <xs:element name="details" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="mskSetType">
    <xs:sequence>
      <xs:element name="mask" type="mskType" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="mskType">
    <xs:all>
      <xs:element name="file" type="mskFileType"/>
      <xs:element name="dataType" type="mapDataType"/>
      <xs:element name="dimensions" type="dimensionType"/>
      <xs:element name="spacing" type="spacingType"/>
      <xs:element name="origin" type="originType"/>
      <xs:element name="limit" type="limitType"/>
      <xs:element name="cell" type="cellType"/>
      <xs:element name="axisOrder" type="axisOrderType"/>
      <xs:element name="statistics" type="statisticsType" minOccurs="0"/>
      <xs:element name="pixelSpacing" type="pixelSpacingType"/>
      <xs:element name="details" type="xs:string" minOccurs="0"/>
      <xs:element name="annotationDetails" type="xs:string" minOccurs="0"/>
      <xs:element name="spaceGroupNumber" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="slcSetType">
    <xs:sequence>
      <xs:element name="slice" type="slcType" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="slcType">
    <xs:all>
      <xs:element name="file" type="slcFileType"/>
      <xs:element name="dataType" type="mapDataType"/>
      <xs:element name="dimensions" type="slcDimensionType"/>
      <xs:element name="spacing" type="slcSpacingType"/>
      <xs:element name="origin" type="originType"/>
      <xs:element name="limit" type="limitType"/>
      <xs:element name="cell" type="slcCellType"/>
      <xs:element name="axisOrder" type="axisOrderType"/>
      <xs:element name="statistics" type="statisticsType"/>
      <xs:element name="pixelSpacing" type="pixelSpacingType"/>
      <xs:element name="details" type="xs:string"/>
      <xs:element name="annotationDetails" type="xs:string" minOccurs="0"/>
      <xs:element name="spaceGroupNumber" type="xs:string"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="layerLineType">
    <xs:all>
      <xs:element name="file" type="xs:string"/>
      <xs:element name="details" type="xs:string"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="structFactType">
    <xs:all>
      <xs:element name="file" type="xs:string"/>
      <xs:element name="details" type="xs:string"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="virusType">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element name="sciSpeciesName" type="sciSpeciesType" minOccurs="1" maxOccurs="1"/>
      <xs:element name="synSpeciesName" type="xs:string" minOccurs="0" maxOccurs="1"/>
      <xs:element name="sciSpeciesSerotype" type="xs:string" minOccurs="0" maxOccurs="1"/>
      <xs:element name="sciSpeciesSerocomplex" type="xs:string" minOccurs="0" maxOccurs="1"/>
      <xs:element name="sciSpeciesSubspecies" type="xs:string" minOccurs="0" maxOccurs="1"/>
      <xs:element name="sciSpeciesStrain" type="xs:string" minOccurs="0" maxOccurs="1"/>
      <xs:element name="class" type="virusClassType" minOccurs="1" maxOccurs="1"/>
      <xs:element name="isolate" type="virusIsolType" minOccurs="1" maxOccurs="1"/>
      <xs:element name="empty" type="xs:boolean" minOccurs="1" maxOccurs="1"/>
      <xs:element name="enveloped" type="xs:boolean" minOccurs="1" maxOccurs="1"/>
      <xs:element name="natSource" type="natSrcVirusType" minOccurs="0"/>
      <xs:element name="engSource" type="engSrcType" minOccurs="0"/>
      <xs:element name="externalReferences" type="externalReferencesType" minOccurs="0"/>
      <xs:element name="shell" type="shellType" minOccurs="0"/>
    </xs:choice>
  </xs:complexType>
  <xs:complexType name="shellType">
    <xs:choice minOccurs="1" maxOccurs="unbounded">
      <xs:element name="nameElement" type="xs:string" minOccurs="1" maxOccurs="1"/>
      <xs:element name="diameter" type="diamType" minOccurs="1" maxOccurs="1"/>
      <xs:element name="tNumber" type="floatOrNAType" minOccurs="1" maxOccurs="1"/>
  </xs:choice>
  <xs:attribute name="id" type="xs:positiveInteger" use="required"/>
  </xs:complexType>
  <xs:complexType name="proteinType">
    <xs:all>
      <xs:element name="sciSpeciesName" type="sciSpeciesType" minOccurs="0"/>
      <xs:element name="sciSpeciesStrain" type="sciSpeciesType" minOccurs="0"/>
      <xs:element name="synSpeciesName" type="xs:string" minOccurs="0"/>
      <xs:element name="oligomericDetails" type="xs:string" minOccurs="0"/>
      <xs:element name="numCopies" type="xs:string" minOccurs="0"/>
      <xs:element name="recombinantExpFlag" type="xs:boolean"/>
      <xs:element name="natSource" type="natSrcType" minOccurs="0"/>
      <xs:element name="engSource" type="engSrcType" minOccurs="0"/>
      <xs:element name="details" type="xs:string" minOccurs="0"/>
      <xs:element name="externalReferences" type="externalReferencesType" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="cellCompType">
    <xs:all>
      <xs:element name="sciSpeciesName" type="sciSpeciesType" minOccurs="0"/>
      <xs:element name="sciSpeciesStrain" type="sciSpeciesType" minOccurs="0"/>
      <xs:element name="synSpeciesName" type="xs:string" minOccurs="0"/>
      <xs:element name="oligomericDetails" type="xs:string" minOccurs="0"/>
      <xs:element name="numCopies" type="xs:string" minOccurs="0"/>
      <xs:element name="recombinantExpFlag" type="xs:boolean"/>
      <xs:element name="natSource" type="natSrcType" minOccurs="0"/>
      <xs:element name="engSource" type="engSrcType" minOccurs="0"/>
      <xs:element name="details" type="xs:string" minOccurs="0"/>
      <xs:element name="externalReferences" type="externalReferencesType" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="nuclAcidType">
    <xs:all>
      <xs:element name="sciSpeciesName" type="sciSpeciesType" minOccurs="0"/>
      <xs:element name="sciSpeciesStrain" type="sciSpeciesType" minOccurs="0"/>
      <xs:element name="synSpeciesName" type="xs:string" minOccurs="0"/>
      <xs:element name="syntheticFlag" type="xs:boolean"/>
      <xs:element name="sequence" type="xs:string" minOccurs="0"/>
      <xs:element name="class" type="naClassType"/>
      <xs:element name="structure" type="naStructType"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="ligandType">
    <xs:all>
      <xs:element name="sciSpeciesName" type="sciSpeciesType" minOccurs="0"/>
      <xs:element name="sciSpeciesStrain" type="sciSpeciesType" minOccurs="0"/>
      <xs:element name="synSpeciesName" type="xs:string" minOccurs="0"/>
      <xs:element name="oligomericDetails" type="xs:string" minOccurs="0"/>
      <xs:element name="numCopies" type="xs:string" minOccurs="0"/>
      <xs:element name="recombinantExpFlag" type="xs:boolean"/>
      <xs:element name="natSource" type="natSrcType" minOccurs="0"/>
      <xs:element name="engSource" type="engSrcType" minOccurs="0"/>
      <xs:element name="details" type="xs:string" minOccurs="0"/>
      <xs:element name="externalReferences" type="externalReferencesType" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="labelType">
    <xs:all>
      <xs:element name="formula" type="xs:string" minOccurs="0"/>
      <xs:element name="oligomericDetails" type="xs:string" minOccurs="0"/>
      <xs:element name="numCopies" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="riboTypeEu">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element name="eukaryote" type="xs:string" minOccurs="1"/>
      <!-- ES: This is mandatory for new entries (EmDep version 4.0) but not for older --> 
      <xs:element name="sciSpeciesName" type="sciSpeciesType" minOccurs="0" maxOccurs="1"/>
      <xs:element name="sciSpeciesStrain" type="sciSpeciesType" minOccurs="0"/>
      <xs:element name="synSpeciesName" type="xs:string" minOccurs="0" maxOccurs="1"/>
      <xs:element name="oligomericDetails" type="xs:string" minOccurs="0" maxOccurs="1"/>
      <xs:element name="numCopies" type="xs:string" minOccurs="0" maxOccurs="1"/>
      <!-- ES: This is mandatory for new entries (EmDep version 4.0) but not for older --> 
      <xs:element name="recombinantExpFlag" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
      <xs:element name="natSource" type="natSrcType" minOccurs="0" maxOccurs="1"/>
      <xs:element name="engSource" type="engSrcType" minOccurs="0" maxOccurs="1"/>
      <xs:element name="details" type="xs:string" minOccurs="0" maxOccurs="1"/>
      <xs:element name="externalReferences" type="externalReferencesType" minOccurs="0" maxOccurs="1"/>
    </xs:choice>
  </xs:complexType>
  <xs:complexType name="riboTypePro">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element name="prokaryote" type="xs:string" minOccurs="1"/>
      <!-- ES: This is mandatory for new entries (EmDep version 4.0) but not for older --> 
      <xs:element name="sciSpeciesName" type="sciSpeciesType" minOccurs="0" maxOccurs="1"/>
      <xs:element name="sciSpeciesStrain" type="sciSpeciesType" minOccurs="0"/>
      <xs:element name="synSpeciesName" type="xs:string" minOccurs="0" maxOccurs="1"/>
      <xs:element name="oligomericDetails" type="xs:string" minOccurs="0" maxOccurs="1"/>
      <xs:element name="numCopies" type="xs:string" minOccurs="0" maxOccurs="1"/>
      <!-- ES: This is mandatory for new entries (EmDep version 4.0) but not for older --> 
      <xs:element name="recombinantExpFlag" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
      <xs:element name="natSource" type="natSrcType" minOccurs="0" maxOccurs="1"/>
      <xs:element name="engSource" type="engSrcType" minOccurs="0" maxOccurs="1"/>
      <xs:element name="details" type="xs:string" minOccurs="0" maxOccurs="1"/>
      <xs:element name="externalReferences" type="externalReferencesType" minOccurs="0" maxOccurs="1"/>
    </xs:choice>
  </xs:complexType>
  <xs:complexType name="sciSpeciesType">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="ncbiTaxId" type="xs:integer"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="externalReferencesType">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element name="refUniProt" type="uniProtType"/>
      <xs:element name="refInterpro" type="iprIdType"/>
      <xs:element name="refGo" type="goIdType"/>
    </xs:choice>
  </xs:complexType>
  <xs:complexType name="natSrcVirusType">
    <xs:all>
      <xs:element name="hostCategory" type="hostCategoryType" minOccurs="0" maxOccurs="1"/>
      <xs:element name="hostSpecies" type="sciSpeciesType" minOccurs="0" maxOccurs="1"/>
      <xs:element name="hostSpeciesStrain" type="xs:string" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="natSrcType">
    <xs:all>
      <xs:element name="cell" type="xs:string" minOccurs="0"/>
      <xs:element name="organelle" type="xs:string" minOccurs="0"/>
      <xs:element name="organOrTissue" type="xs:string" minOccurs="0"/>
      <xs:element name="cellLocation" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="engSrcType">
    <xs:all>
      <xs:element name="expSystem" type="sciSpeciesType" minOccurs="0"/>
      <xs:element name="expSystemStrain" type="xs:string" minOccurs="0"/>
      <xs:element name="expSystemCell" type="xs:string" minOccurs="0"/>
      <xs:element name="vector" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="bufferType">
    <xs:all>
      <xs:element name="ph" type="xs:float" minOccurs="0"/>
      <xs:element name="details" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="mwType">
    <xs:simpleContent>
      <xs:extension base="xs:float">
        <xs:attribute name="units" type="xs:string" use="required" fixed="MDa"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="samplConcType">
    <xs:simpleContent>
      <xs:extension base="xs:float">
        <xs:attribute name="units" type="xs:string" use="required" fixed="mg/ml"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="tempType">
    <xs:simpleContent>
      <xs:extension base="xs:float">
        <xs:attribute name="units" type="xs:string" use="required" fixed="Kelvin"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="crystSizeType">
    <xs:simpleContent>
      <xs:extension base="xs:float">
        <xs:attribute name="units" type="xs:string" use="required" fixed="microns**2"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="lengthType">
    <xs:simpleContent>
      <xs:extension base="xs:float">
        <xs:attribute name="units" type="xs:string" use="required" fixed="A"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="origType">
    <xs:simpleContent>
      <xs:extension base="xs:float">
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="diamType">
    <xs:simpleContent>
      <xs:extension base="floatOrNAType">
        <!-- FIXME -->
        <xs:attribute name="units" type="xs:string" use="required" fixed="A"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="anglType">
    <xs:simpleContent>
      <xs:extension base="xs:float">
        <xs:attribute name="units" type="xs:string" use="required" fixed="degrees"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="samplSizeType">
    <xs:simpleContent>
      <xs:extension base="xs:float">
        <xs:attribute name="units" type="xs:string" use="required" fixed="microns"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="accVoltType">
    <xs:simpleContent>
      <xs:extension base="xs:float">
        <xs:attribute name="units" type="xs:string" use="required" fixed="kV"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="csType">
    <xs:simpleContent>
      <xs:extension base="xs:float">
        <xs:attribute name="units" type="xs:string" use="required" fixed="mm"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="eDoseType">
    <xs:simpleContent>
      <xs:extension base="xs:float">
        <xs:attribute name="units" type="xs:string" use="required" fixed="e/A**2"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="eWindowType">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="units" type="xs:string" use="required" fixed="eV"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="defocusType">
    <xs:simpleContent>
      <xs:extension base="defocusAllowed">
        <xs:attribute name="units" type="xs:string" use="required" fixed="nm"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:simpleType name="defocusAllowed">
      <xs:restriction base="xs:float">
  <!-- negative (underfocus) and positive (overfocus) -->
          <xs:minInclusive value="-20000"/>
          <xs:maxInclusive value="20000"/>
      </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="tiltType">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="units" type="xs:string" use="required" fixed="degrees"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="mapFileType">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="type" type="xs:string" use="required" fixed="map"/>
        <xs:attribute name="format" type="xs:string" use="required" fixed="CCP4"/>
        <xs:attribute name="sizeKb" type="xs:string" use="required"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="mskFileType">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="type" type="xs:string" use="required" fixed="map"/>
        <xs:attribute name="format" type="xs:string" use="required" fixed="CCP4"/>
        <xs:attribute name="sizeKb" type="xs:string" use="required"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="slcFileType">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="type" type="xs:string" use="required" fixed="map"/>
        <xs:attribute name="format" type="xs:string" use="required" fixed="CCP4"/>
        <xs:attribute name="sizeKb" type="xs:string" use="required"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="axisOrderType">
    <xs:all>
      <xs:element name="axisOrderFast" type="xs:string"/>
      <xs:element name="axisOrderMedium" type="xs:string"/>
      <xs:element name="axisOrderSlow" type="xs:string"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="dimensionType">
    <xs:all>
      <xs:element name="numRows" type="xs:positiveInteger"/>
      <xs:element name="numColumns" type="xs:positiveInteger"/>
      <xs:element name="numSections" type="xs:positiveInteger"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="slcDimensionType">
    <xs:all>
      <xs:element name="numRows" type="xs:positiveInteger"/>
      <xs:element name="numColumns" type="xs:nonNegativeInteger"/>
      <xs:element name="numSections" type="xs:nonNegativeInteger"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="spacingType">
    <xs:all>
      <xs:element name="spacingRow" type="xs:positiveInteger"/>
      <xs:element name="spacingCol" type="xs:positiveInteger"/>
      <xs:element name="spacingSec" type="xs:positiveInteger"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="slcSpacingType">
    <xs:all>
      <xs:element name="spacingRow" type="xs:positiveInteger"/>
      <xs:element name="spacingCol" type="xs:nonNegativeInteger"/>
      <xs:element name="spacingSec" type="xs:nonNegativeInteger"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="pixelSpacingType">
    <xs:all>
      <xs:element name="pixelX" type="pixType"/>
      <xs:element name="pixelY" type="pixType"/>
      <xs:element name="pixelZ" type="pixType"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="originType">
    <xs:all>
      <xs:element name="originRow" type="origType"/>
      <xs:element name="originCol" type="origType"/>
      <xs:element name="originSec" type="origType"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="statisticsType">
    <xs:all>
      <xs:element name="minimum" type="xs:float"/>
      <xs:element name="maximum" type="xs:float"/>
      <xs:element name="average" type="xs:float"/>
      <xs:element name="std" type="xs:float"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="cellType">
    <xs:all>
      <xs:element name="cellA" type="cType" minOccurs="0"/>
      <xs:element name="cellB" type="cType" minOccurs="0"/>
      <xs:element name="cellC" type="cType" minOccurs="0"/>
      <xs:element name="cellAlpha" type="cAngleType" minOccurs="0"/>
      <xs:element name="cellBeta" type="cAngleType" minOccurs="0"/>
      <xs:element name="cellGamma" type="cAngleType" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="slcCellType">
    <xs:all>
      <xs:element name="cellA" type="cType" minOccurs="0"/>
      <xs:element name="cellB" type="slcCType" minOccurs="0"/>
      <xs:element name="cellC" type="slcCType" minOccurs="0"/>
      <xs:element name="cellAlpha" type="cAngleType" minOccurs="0"/>
      <xs:element name="cellBeta" type="cAngleType" minOccurs="0"/>
      <xs:element name="cellGamma" type="cAngleType" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="limitType">
    <xs:all>
      <xs:element name="limitRow" type="limType"/>
      <xs:element name="limitCol" type="limType"/>
      <xs:element name="limitSec" type="limType"/>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="pixType">
    <xs:simpleContent>
      <xs:extension base="xs:float">
        <xs:attribute name="units" type="xs:string" use="required" fixed="A"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="limType">
    <xs:simpleContent>
      <xs:extension base="xs:float">
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="cType">
    <xs:simpleContent>
      <xs:extension base="allowedCellDim">
        <xs:attribute name="units" type="xs:string" use="required" fixed="A"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="slcCType">
    <xs:simpleContent>
      <xs:extension base="allowedSlcCellDim">
        <xs:attribute name="units" type="xs:string" use="required" fixed="A"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:simpleType name="allowedCellDim">
    <xs:restriction base="xs:float">
        <xs:minExclusive value="0.0"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="allowedSlcCellDim">
    <xs:restriction base="xs:float">
        <xs:minInclusive value="0.0"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="cAngleType">
    <xs:simpleContent>
      <xs:extension base="allowedAngles">
        <xs:attribute name="units" type="xs:string" use="required" fixed="degrees"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:simpleType name="allowedAngles">
    <xs:restriction base="xs:float">
      <xs:minExclusive value="0.0"/>
      <xs:maxExclusive value="180.0"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="status">
    <xs:restriction base="xs:string">
      <xs:enumeration value="REL"/>
      <xs:enumeration value="HPUB"/>
      <xs:enumeration value="HOLD1"/>
      <xs:enumeration value="OBS"/>
    </xs:restriction>
  </xs:simpleType>    
  <xs:complexType name="emdbListType">
    <xs:sequence>
      <xs:element name="entry" type="emdbType" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="pdbidListType">
    <xs:sequence>
      <xs:element name="fittedPDBEntryId" type="pdbidType" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="pdbidList2Type">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element name="pdbEntryId" type="pdbidType" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="pdbChainId" type="xs:string" minOccurs="0"/>
    </xs:choice>
  </xs:complexType>
  <xs:simpleType name="emdbType">
    <xs:restriction base="xs:string">
        <xs:pattern value="EMD-\d{4,}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="pdbidType">
    <xs:restriction base="xs:string">
        <xs:pattern value="\d[0-9a-zA-Z]{3}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="emdbEntryIdType">
    <xs:restriction base="xs:string">
      <xs:pattern value="EMD-\d{4,}(, EMD-\d{4,})*"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="uniProtType">
    <xs:restriction base="xs:string">
      <xs:pattern value="[A-Z][\dA-Z]{5}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="iprIdType">
    <xs:restriction base="xs:string">
      <xs:pattern value="IPR\d{6}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="goIdType">
    <xs:restriction base="xs:string">
      <xs:pattern value="GO:\d{7}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="ictvIdType">
    <xs:restriction base="xs:string"/>
  </xs:simpleType>
  <xs:simpleType name="specimenType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="particle"/>
      <xs:enumeration value="filament"/>
      <xs:enumeration value="twoDArray"/>
      <xs:enumeration value="threeDArray"/>
      <xs:enumeration value="helicalArray"/>
      <xs:enumeration value="tissue"/>
      <xs:enumeration value="cell"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="methodType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="twoDCrystal"/>
      <xs:enumeration value="singleParticle"/>
      <xs:enumeration value="tomography"/>
      <xs:enumeration value="subtomogramAveraging"/>
      <xs:enumeration value="helical"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="hostCategoryType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="ARCHAEA"/>
      <xs:enumeration value="ALGAE"/>
      <xs:enumeration value="BACTERIA(EUBACTERIA)"/>
      <xs:enumeration value="FUNGI"/>
      <xs:enumeration value="INVERTEBRATES"/>
      <xs:enumeration value="PLANTAE(HIGHER PLANTS)"/>
      <xs:enumeration value="VERTEBRATES"/>
      <xs:enumeration value="PROTOZOA"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="cryogenType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="ETHANE"/>
      <xs:enumeration value="ETHANE-PROPANE MIXTURE"/>
      <xs:enumeration value="METHANE"/>
      <xs:enumeration value="NITROGEN"/>
      <xs:enumeration value="HELIUM"/>
      <xs:enumeration value="PROPANE"/>
      <xs:enumeration value="FREON 12"/>
      <xs:enumeration value="FREON 22"/>
      <xs:enumeration value="NONE"/>
      <xs:enumeration value="OTHER"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="microscopeType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="FEI MORGAGNI"/>
      <xs:enumeration value="FEI POLARA 300"/>
      <xs:enumeration value="FEI TECNAI 12"/>
      <xs:enumeration value="FEI TECNAI 20"/>
      <xs:enumeration value="FEI TECNAI F20"/>
      <xs:enumeration value="FEI TECNAI F30"/>
      <xs:enumeration value="FEI TECNAI SPHERA"/>
      <xs:enumeration value="FEI TITAN KRIOS"/>
      <xs:enumeration value="FEI/PHILIPS CM120T"/>
      <xs:enumeration value="FEI/PHILIPS CM200FEG"/>
      <xs:enumeration value="FEI/PHILIPS CM200FEG/SOPHIE"/>
      <xs:enumeration value="FEI/PHILIPS CM200FEG/ST"/>
      <xs:enumeration value="FEI/PHILIPS CM200FEG/UT"/>
      <xs:enumeration value="FEI/PHILIPS CM200T"/>
      <xs:enumeration value="FEI/PHILIPS CM300FEG/HE"/>
      <xs:enumeration value="FEI/PHILIPS CM300FEG/ST"/>
      <xs:enumeration value="FEI/PHILIPS CM300FEG/T"/>
      <xs:enumeration value="FEI/PHILIPS EM400"/>
      <xs:enumeration value="FEI/PHILIPS EM420"/>
      <xs:enumeration value="HITACHI EF2000"/>
      <xs:enumeration value="HITACHI HF2000"/>
      <xs:enumeration value="HITACHI HF3000"/>
      <xs:enumeration value="HITACHI H-9500SD"/>
      <xs:enumeration value="JEOL 100CX"/>
      <xs:enumeration value="JEOL 1010"/>
      <xs:enumeration value="JEOL 1200"/>
      <xs:enumeration value="JEOL 1200EX"/>
      <xs:enumeration value="JEOL 1200EXII"/>
      <xs:enumeration value="JEOL 1230"/>
      <xs:enumeration value="JEOL 2000EX"/>
      <xs:enumeration value="JEOL 2000EXII"/>
      <xs:enumeration value="JEOL 2010F"/>
      <xs:enumeration value="JEOL 2010HT"/>
      <xs:enumeration value="JEOL 2010UHR"/>
      <xs:enumeration value="JEOL 2100"/>
      <xs:enumeration value="JEOL 2100F"/>
      <xs:enumeration value="JEOL 2200FS"/>
      <xs:enumeration value="JEOL 2200FSC"/>
      <xs:enumeration value="JEOL 3000SFF"/>
      <xs:enumeration value="JEOL 3100FFC"/>
      <xs:enumeration value="JEOL KYOTO-3000SFF"/>
      <xs:enumeration value="JEOL 3200FSC"/>
      <xs:enumeration value="JEOL 4000EX"/>
      <xs:enumeration value="OTHER"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="specimenHolderType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="FEI TITAN KRIOS AUTOGRID HOLDER"/>
      <xs:enumeration value="GATAN HELIUM"/>
      <xs:enumeration value="GATAN LIQUID NITROGEN"/>
      <xs:enumeration value="HOME BUILD"/>
      <xs:enumeration value="JEOL"/>
      <xs:enumeration value="JEOL 3200FSC CRYOHOLDER"/>
      <xs:enumeration value="PHILIPS ROTATION HOLDER"/>
      <xs:enumeration value="SIDE ENTRY, EUCENTRIC"/>
      <xs:enumeration value="OTHER"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="scannerType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="n/a"/>
      <xs:enumeration value="CREO EVERSMART SUPREME"/>
      <xs:enumeration value="EIKONIX IEEE 488"/>
      <xs:enumeration value="EMIL 10"/>
      <xs:enumeration value="IMACON"/>
      <xs:enumeration value="NIKON COOLSCAN"/>
      <xs:enumeration value="NIKON SUPER COOLSCAN 9000"/>
      <xs:enumeration value="OPTRONICS"/>
      <xs:enumeration value="PATCHWORK DENSITOMETER"/>
      <xs:enumeration value="PERKIN ELMER"/>
      <xs:enumeration value="PRIMESCAN"/>
      <xs:enumeration value="TEMSCAN"/>
      <xs:enumeration value="ZEISS SCAI"/>
      <xs:enumeration value="OTHER"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="handType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="RIGHT HANDED"/>
      <xs:enumeration value="LEFT HANDED"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- ES (11 Oct 2012) term not yet agreed -->
  <!--xs:simpleType name="refCategoryType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="fitting"/>
      <xs:enumeration value="docking"/>
    </xs:restriction>
  </xs:simpleType-->
  <xs:simpleType name="refProtocolType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="rigid body"/>
      <xs:enumeration value="flexible"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="refSpaceType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="REAL"/>
      <xs:enumeration value="RECIPROCAL"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="virusClassType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="VIRION"/>
      <xs:enumeration value="SATELLITE"/>
      <xs:enumeration value="PRION"/>
      <xs:enumeration value="VIROID"/>
      <xs:enumeration value="VIRUS-LIKE PARTICLE"/>
      <xs:enumeration value="OTHER"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="virusIsolType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="STRAIN"/>
      <xs:enumeration value="SEROTYPE"/>
      <xs:enumeration value="SEROCOMPLEX"/>
      <xs:enumeration value="SUBSPECIES"/>
      <xs:enumeration value="SPECIES"/>
      <xs:enumeration value="OTHER"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="naClassType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="DNA"/>
      <xs:enumeration value="DNA/RNA"/>
      <xs:enumeration value="PEPTIDE NUCLEIC ACID"/>
      <xs:enumeration value="PEPTIDE NUCLEIC ACID/DNA"/>
      <xs:enumeration value="RIBOZYME"/>
      <xs:enumeration value="RNA"/>
      <xs:enumeration value="T-RNA"/>
      <xs:enumeration value="OTHER"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="naStructType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="SINGLE STRANDED"/>
      <xs:enumeration value="DOUBLE HELIX"/>
      <xs:enumeration value="TRIPLE HELIX"/>
      <xs:enumeration value="QUADRUPLE HELIX"/>
      <xs:enumeration value="OTHER"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="entClassType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="molecular entity"/>
      <xs:enumeration value="polypeptide entity"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="cmpntClassType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="virus"/>
      <xs:enumeration value="cellular-component"/>
      <xs:enumeration value="protein"/>
      <xs:enumeration value="nucleic-acid"/>
      <xs:enumeration value="ligand"/>
      <xs:enumeration value="label"/>
      <xs:enumeration value="ribosome-eukaryote"/>
      <xs:enumeration value="ribosome-prokaryote"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="plGrpType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="P 1"/>
      <xs:enumeration value="P 2"/>
      <xs:enumeration value="P 1 2"/>
      <xs:enumeration value="P 1 21"/>
      <xs:enumeration value="C 1 2"/>
      <xs:enumeration value="P 2 2 2"/>
      <xs:enumeration value="P 2 2 21"/>
      <xs:enumeration value="P 2 21 21"/>
      <xs:enumeration value="C 2 2 2"/>
      <xs:enumeration value="P 4"/>
      <xs:enumeration value="P 4 2 2"/>
      <xs:enumeration value="P 4 21 2"/>
      <xs:enumeration value="P 3"/>
      <xs:enumeration value="P 3 1 2"/>
      <xs:enumeration value="P 3 2 1"/>
      <xs:enumeration value="P 6"/>
      <xs:enumeration value="P 6 2 2"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="imgFormatType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="gif"/>
      <xs:enumeration value="jpeg"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="mapDataType">
    <xs:restriction base="xs:string">
      <!-- This list should be reduce to only 3 modes: 0 (signed bytes), 1 (signed integers), 2 (floats) -->
      <xs:enumeration value="Envelope stored as signed bytes"/>
      <xs:enumeration value="Image stored as Integer*2"/>
      <xs:enumeration value="Image stored as Reals"/>
      <!-- These other elements are remainders of legacy software -->
      <xs:enumeration value="signed byte"/>
      <xs:enumeration value="integer (16-bit)"/>
      <xs:enumeration value="float (32-bit)"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="illumType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="FLOOD BEAM"/>
      <xs:enumeration value="SPOT SCAN"/>
      <xs:enumeration value="OTHER"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="imgModeType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="BRIGHT FIELD"/>
      <xs:enumeration value="DARK FIELD"/>
      <xs:enumeration value="DIFFRACTION"/>
      <xs:enumeration value="OTHER"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="eSourceType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="TUNGSTEN HAIRPIN"/>
      <xs:enumeration value="LAB6"/>
      <xs:enumeration value="FIELD EMISSION GUN"/>
      <xs:enumeration value="OTHER"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- FIXME: Data types with n/a alternative -->
  <xs:simpleType name="positiveIntegerOrNAType">
    <xs:union>
      <xs:simpleType>
        <xs:restriction base="xs:positiveInteger">
	      </xs:restriction>
      </xs:simpleType>
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="n/a"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:union>
  </xs:simpleType>
  <xs:simpleType name="floatOrNAType">
    <xs:union>
      <xs:simpleType>
        <xs:restriction base="xs:float">
	      </xs:restriction>
      </xs:simpleType>
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="n/a"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:union>
  </xs:simpleType>
</xs:schema>
