<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:annotation>
        <xs:appinfo>SeqXML Schema</xs:appinfo>
        <xs:documentation>
    This Schema defines the SeqXML version 0.3. Author(s): Sanjit Roopra, Dave Messina, Thomas Schmitt and Erik Sonnhammer. 
    SBC - Stockholm Bioinformatics Centre. 2009-2010. More info at http://seqxml.org
    </xs:documentation>
    </xs:annotation>
    <xs:element name="seqXML">
        <xs:annotation>
            <xs:documentation>Entry point for SeqXML. Multiple sequence records (entries) possible</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element minOccurs="1" maxOccurs="unbounded" name="entry" type="entryType"/>
            </xs:sequence>
            <xs:attribute name="source" use="optional" type="xs:string"/>
            <xs:attribute name="sourceVersion" use="optional"/>
            <xs:attribute name="seqXMLversion" use="required" type="xs:decimal"/>
        </xs:complexType>
        <xs:unique name="uniqueEntryId">
            <xs:selector xpath=".//entry"/>
            <xs:field xpath="@id"/>
        </xs:unique>
    </xs:element>
    <!--...............................................................................................-->
    <xs:complexType name="entryType">
        <xs:annotation>
            <xs:documentation>Entry type used for all sequence entries.</xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="1" ref="species"/>
            <xs:element minOccurs="0" maxOccurs="1" ref="description"/>
            <xs:choice>
                <xs:element name="DNAseq" type="dnaSeq"/>
                <xs:element name="RNAseq" type="rnaSeq"/>
                <xs:element name="AAseq" type="aaSeq"/>
            </xs:choice>
            <xs:element minOccurs="0" maxOccurs="unbounded" ref="DBRef"/>
            <xs:element minOccurs="0" maxOccurs="unbounded" ref="property"/>
        </xs:sequence>
        <xs:attribute name="id" use="required" type="xs:string"/>
        <xs:attribute name="source" use="optional" type="xs:string"/>
    </xs:complexType>
    <!--...............................................................................................-->
    <xs:element name="species">
        <xs:complexType>
            <xs:attribute name="ncbiTaxID" use="required" type="xs:integer"/>
            <xs:attribute name="name" use="required"/>
        </xs:complexType>
    </xs:element>
    <!--...............................................................................................-->
    <xs:element name="description" type="xs:string"/>
    <!--...............................................................................................-->
    <xs:element name="DBRef">
        <xs:complexType>
        	<xs:attribute name="type" use="required" type="seqType"/>
            <xs:attribute name="source" use="required" type="xs:string"/>
            <xs:attribute name="id" use="required" type="xs:string"/>
        </xs:complexType>
    </xs:element>
    <!--...............................................................................................-->
    <xs:element name="property">
        <xs:annotation>
            <xs:documentation>Key-value pair for annotating the sequence. 
      Put alternative IDs in DBRef element</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:attribute name="name" use="required" type="xs:string"/>
            <xs:attribute name="value"/>
        </xs:complexType>
    </xs:element>
    <!--...............................................................................................-->
    <xs:simpleType name="seqType">
    	<xs:restriction base="xs:string">
    		<xs:minLength value="1" />
    	</xs:restriction>
    </xs:simpleType>
    <!--...............................................................................................-->
    <xs:simpleType name="dnaSeq">
        <xs:annotation>
            <xs:documentation>Type used for DNA sequence</xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
            <xs:pattern value="[A|C|G|T|M|R|W|S|Y|K|V|H|D|B|X|N|\.|\-]+"/>
            <xs:minLength value="1" />
        </xs:restriction>
    </xs:simpleType>
    <!--...............................................................................................-->
    <xs:simpleType name="rnaSeq">
        <xs:annotation>
            <xs:documentation>Type used for RNA sequence</xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
            <xs:pattern value="[A|C|G|U|M|R|W|S|Y|K|V|H|D|B|X|N|\.|\-]+"/>
            <xs:minLength value="1" />
        </xs:restriction>
    </xs:simpleType>
    <!--...............................................................................................-->
    <xs:simpleType name="aaSeq">
        <xs:annotation>
            <xs:documentation>Type used for Protein sequence</xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
            <xs:pattern value="[A-Z|\.|\-|\*]+"/>
            <xs:minLength value="1" />
        </xs:restriction>
    </xs:simpleType>
    <!--...............................................................................................-->
</xs:schema>
