<?xml version="1.0"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
	   targetNamespace="http://ecoinformatics.org/sms/annotation.1.0beta1"
	   xmlns="http://ecoinformatics.org/sms/annotation.1.0beta1"
	   xmlns:party="eml://ecoinformatics.org/party-2.1.1"
	   xmlns:res="eml://ecoinformatics.org/resource-2.1.1"
	   elementFormDefault="qualified">
<xs:import namespace="eml://ecoinformatics.org/party-2.1.1" schemaLocation="https://code.ecoinformatics.org/code/eml/tags/RELEASE_EML_2_1_1_RC_2/eml-party.xsd"/>
<xs:import namespace="eml://ecoinformatics.org/resource-2.1.1" schemaLocation="https://code.ecoinformatics.org/code/eml/tags/RELEASE_EML_2_1_1_RC_2/eml-resource.xsd"/>

  <!-- annotations -->
  <xs:complexType name="AnnotationType">
    <xs:sequence minOccurs="0">
		<xs:element name="observation" type="ObservationType" maxOccurs="unbounded"/>
		<xs:element name="map" type="MapType" minOccurs="0" maxOccurs="unbounded"/>
		<xs:element name="creator" type="party:ResponsibleParty" minOccurs="0"/>
		<xs:element name="createDate" type="res:yearDate" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="id" type="xs:string" use="required"/>
    <xs:attribute name="dataPackage" type="xs:string" use="required"/>
  </xs:complexType>


  <!-- observations -->
  <xs:complexType name="ObservationType">
    <xs:sequence>
      <xs:element name="entity" type="EntityType" minOccurs="0" maxOccurs="1"/>
      <xs:sequence minOccurs="0" maxOccurs="unbounded">
		<xs:choice>
		  <xs:element name="measurement" type="MeasurementType"/>
		  <xs:element name="context" type="ContextType"/>
		</xs:choice>
      </xs:sequence>
    </xs:sequence>
    <xs:attribute name="label" type="xs:ID" use="optional"/>
    <xs:attribute name="distinct" type="xs:string" default="no"/>
  </xs:complexType>


  <!-- measurements --> 
  <xs:complexType name="MeasurementType">
    <xs:sequence>
		<xs:element name="characteristic" type="CharacteristicType" 
			minOccurs="0" maxOccurs="unbounded"/>
		<xs:element name="standard" type="StandardType"
			minOccurs="0" maxOccurs="1"/>
		<xs:element name="protocol" type="ProtocolType"
			minOccurs="0" maxOccurs="1"/>	
		<xs:element name="domain" type="DomainType" 
			minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
    <xs:attribute name="id" type="xs:QName" use="optional"/>
    <xs:attribute name="label" type="xs:ID" use="optional"/>
    <xs:attribute name="precision" type="xs:float" use="optional"/>
    <xs:attribute name="value" type="xs:string" use="optional"/>
    <xs:attribute name="key" type="xs:string" default="no"/>
  </xs:complexType>


  <!-- entities --> 
  <xs:complexType name="EntityType">
    <xs:attribute name="id" type="xs:QName" use="required"/>
  </xs:complexType>


  <!-- characteristics --> 
  <xs:complexType name="CharacteristicType">
    <xs:attribute name="id" type="xs:QName" use="required"/>
    <xs:attribute name="value" type="xs:string" use="optional"/>
  </xs:complexType>


  <!-- standards --> 
  <xs:complexType name="StandardType">
    <xs:attribute name="id" type="xs:QName" use="required"/>
  </xs:complexType>

  <!-- protocol --> 
  <xs:complexType name="ProtocolType">
    <xs:attribute name="id" type="xs:QName" use="required"/>
  </xs:complexType>
  
  <!-- domains --> 
  <xs:complexType name="DomainType">
    <xs:sequence>
       <xs:element name="entity" type="EntityType" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="min" type="xs:string" use="optional"/>
    <xs:attribute name="max" type="xs:string" use="optional"/>
  </xs:complexType>


  <!-- contexts --> 
  <xs:complexType name="ContextType">
    <xs:sequence>
      <xs:element name="relationship" type="RelationshipType"
		  minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
    <xs:attribute name="observation" type="xs:IDREF" use="required"/>
    <xs:attribute name="identifying" type="xs:string" default="no"/>
  </xs:complexType>


  <!-- relationships --> 
  <xs:complexType name="RelationshipType">
    <xs:attribute name="id" type="xs:QName" use="required"/>
  </xs:complexType>


  <!-- mappings --> 
  <xs:complexType name="MapType">
    <xs:attribute name="dataObject" type="xs:string" use="required"/>
    <xs:attribute name="attribute" type="xs:string" use="required"/>
    <xs:attribute name="measurement" type="xs:IDREF" use="required"/>
    <xs:attribute name="value" type="xs:string" use="optional"/>
    <xs:attribute name="if" type="xs:string" use="optional"/>
  </xs:complexType>


  <!-- annotation element --> 
  <xs:element name="annotation" type="AnnotationType"/>


</xs:schema>