<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema
  targetNamespace="http://www.biomoby.org/moby"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:moby="http://www.biomoby.org/moby"
  xmlns="http://www.biomoby.org/moby"
>
  <xsd:annotation>
    <xsd:documentation xml:lang="en">MOBY services messages schema, written by José María Fernández (jmfernandez@cnio.es, INB) using as example MOBY documentation.
It tries validate the not-static parts of MOBY services message model</xsd:documentation>
  </xsd:annotation>
  
  <xsd:attributeGroup name="articleNames">
    <xsd:annotation>
      <xsd:documentation/>
    </xsd:annotation>
    <xsd:attribute default="" name="articleName" type="xsd:string" use="optional"/>
  </xsd:attributeGroup>
  
  <xsd:element name="Simple">
    <xsd:annotation>
      <xsd:documentation/>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence maxOccurs="1" minOccurs="1">
        <xsd:any namespace="http://www.biomoby.org/moby" processContents="lax"/>
      </xsd:sequence>
      <xsd:attributeGroup ref="articleNames"/>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="MOBY">
    <xsd:annotation>
      <xsd:documentation/>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence minOccurs="1" maxOccurs="1">
        <xsd:element name="mobyContent">
          <xsd:annotation>
            <xsd:documentation/>
          </xsd:annotation>
          <xsd:complexType>
            <xsd:sequence minOccurs="1" maxOccurs="1">
              <xsd:element name="serviceNotes" minOccurs="0" maxOccurs="1">
                <xsd:annotation>
                  <xsd:documentation/>
                </xsd:annotation>
                <xsd:complexType mixed="true">
                  <xsd:sequence maxOccurs="1" minOccurs="1">
                    <xsd:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="lax"/>
                  </xsd:sequence>
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="mobyData" minOccurs="1" maxOccurs="unbounded">
                <xsd:annotation>
                  <xsd:documentation/>
                </xsd:annotation>
                <xsd:complexType>
                  <xsd:sequence minOccurs="1" maxOccurs="1">
                    <xsd:choice minOccurs="0" maxOccurs="1">
                      <xsd:element ref="Simple" minOccurs="1" maxOccurs="1"/>
                      <xsd:element name="Collection">
                        <xsd:annotation>
                          <xsd:documentation/>
                        </xsd:annotation>
                        <xsd:complexType>
                          <xsd:sequence maxOccurs="unbounded" minOccurs="1">
                            <xsd:element ref="Simple"/>
                          </xsd:sequence>
                          <xsd:attributeGroup ref="articleNames"/>
                        </xsd:complexType>
                      </xsd:element>
                    </xsd:choice>
                    <xsd:element name="Parameter" minOccurs="0" maxOccurs="1">
                      <xsd:annotation>
                        <xsd:documentation/>
                      </xsd:annotation>
                      <xsd:complexType>
                        <xsd:sequence maxOccurs="1" minOccurs="1">
                          <xsd:element name="Value" type="xsd:string"/>
                        </xsd:sequence>
                        <xsd:attributeGroup ref="articleNames"/>
                      </xsd:complexType>
                    </xsd:element>
                  </xsd:sequence>
                  <xsd:attribute name="queryID" type="xsd:string" use="required"/>
                </xsd:complexType>
                <xsd:key name="articleNames_Key">
                  <xsd:annotation>
                    <xsd:documentation><![CDATA[With this key we ensure you cannot repeat an articleName when you are submitting a query to a service.]]></xsd:documentation>
                  </xsd:annotation>
                  <xsd:selector xpath="*"/>
                  <xsd:field xpath="@articleName"/>
                </xsd:key>
              </xsd:element>
            </xsd:sequence>
            <xsd:attribute name="authority" type="xsd:anyURI" use="optional"/>
          </xsd:complexType>
          <xsd:key name="mobyData_Key">
            <xsd:annotation>
              <xsd:documentation><![CDATA[With this key we ensure different mobyData's have different queryID's]]></xsd:documentation>
            </xsd:annotation>
            <xsd:selector xpath="mobyData"/>
            <xsd:field xpath="@queryID"/>
          </xsd:key>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  
</xsd:schema>
