<?xml version = "1.0" encoding = "UTF-8"?>
<!-- style sheet OFF -->
<!--
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    #
    # Copyright (C) 2003-2011 Open Microscopy Environment
    #       Massachusetts Institute of Technology,
    #       National Institutes of Health,
    #       University of Dundee,
    #       University of Wisconsin at Madison
    #
    # This work is licensed under the
    #       Creative Commons Attribution 3.0 Unported License.
    # To view a copy of this license, visit
    #       http://creativecommons.org/licenses/by/3.0/
    # or send a letter to
    #       Creative Commons, 444 Castro Street, Suite 900,
    #       Mountain View, California, 94041, USA.
    # For attribution instructions, visit
    #       http://www.openmicroscopy.org/info/attribution
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-->
<!--
	#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	# Written by:  Andrew J Patterson 
	#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-->
<xsd:schema xmlns = "http://www.openmicroscopy.org/Schemas/SA/2011-06"
	targetNamespace = "http://www.openmicroscopy.org/Schemas/SA/2011-06"
	xmlns:OME = "http://www.openmicroscopy.org/Schemas/OME/2011-06"
	xmlns:Bin="http://www.openmicroscopy.org/Schemas/BinaryFile/2011-06" 
	xmlns:xsd = "http://www.w3.org/2001/XMLSchema"
	version = "1"
	elementFormDefault = "qualified">

	<xsd:import namespace="http://www.openmicroscopy.org/Schemas/OME/2011-06" schemaLocation="http://www.openmicroscopy.org/Schemas/OME/2011-06/ome.xsd"/>
	<xsd:import namespace = "http://www.openmicroscopy.org/Schemas/BinaryFile/2011-06" schemaLocation = "http://www.openmicroscopy.org/Schemas/BinaryFile/2011-06/BinaryFile.xsd"/>

	<!-- Annotatable objects
		Annotation
		Channel
		Dataset
		Experimenter
		ExperimenterGroup
		Image
		Node
		OriginalFile
		Pixels
		PlaneInfo
		Plate
		Project
		Reagent
		Roi
		Screen
		ScreenAcquisition
		Session
		Well
		WellSample
		
		ExperimenterGroup ?
		Node ?
		OriginalFile ?
		Session ?
		PlaneInfo (as Plane)
	-->
	
	<xsd:element name="StructuredAnnotations"> <!-- top level definition -->
		<xsd:annotation>
			<xsd:documentation>
				An unordered collection of annotation attached to objects in the OME data model.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:choice minOccurs="0" maxOccurs="unbounded">
				<xsd:element ref="XMLAnnotation" minOccurs="1" maxOccurs="1"/>
				<xsd:element ref="FileAnnotation" minOccurs="1" maxOccurs="1"/>
				<xsd:element ref="ListAnnotation" minOccurs="1" maxOccurs="1"/>
				<xsd:element ref="LongAnnotation" minOccurs="1" maxOccurs="1"/>
				<xsd:element ref="DoubleAnnotation" minOccurs="1" maxOccurs="1"/>
				<xsd:element ref="CommentAnnotation" minOccurs="1" maxOccurs="1"/>
				<xsd:element ref="BooleanAnnotation" minOccurs="1" maxOccurs="1"/>
				<xsd:element ref="TimestampAnnotation" minOccurs="1" maxOccurs="1"/>
				<xsd:element ref="TagAnnotation" minOccurs="1" maxOccurs="1"/>
				<xsd:element ref="TermAnnotation" minOccurs="1" maxOccurs="1"/>
			</xsd:choice>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="AnnotationRef"> <!-- top level definition -->
		<xsd:annotation>
			<xsd:documentation>
				The AnnotationRef element is a reference to an element derived 
				from the SA:CommonAnnotation element.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="OME:Reference">
					<xsd:attribute name="ID" use="required" type="AnnotationID"/>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:complexType name="Annotation">
		<xsd:annotation>
			<xsd:appinfo>abstract</xsd:appinfo>
			<xsd:documentation>
				An annotation from which the other are derived.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="Description" minOccurs="0" maxOccurs="1">
				<xsd:annotation>
					<xsd:documentation>
						A description for the annotation. [plane text multi-line string]
					</xsd:documentation>
				</xsd:annotation>
				<xsd:simpleType>
					<xsd:restriction base="xsd:string">
						<xsd:whiteSpace value="preserve"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<xsd:sequence>
				<xsd:element ref="AnnotationRef" minOccurs="0" maxOccurs="unbounded"/>
			</xsd:sequence>
		</xsd:sequence>
		<xsd:attribute name="ID" use="required" type="AnnotationID"></xsd:attribute>
		<xsd:attribute name="Namespace" use="optional" type="xsd:anyURI">
			<xsd:annotation>
				<xsd:documentation>
					We recommend the inclusion of a namespace for annotations you 
					define. If it is absent then we assume the annotation is to 
					use our (OME's) default interpretation for this type.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>
	<xsd:simpleType name="AnnotationID">
		<xsd:restriction base="OME:LSID">
			<xsd:pattern value="(urn:lsid:([\w\-\.]+\.[\w\-\.]+)+:Annotation:\S+)|(Annotation:\S+)"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:element name="FileAnnotation"> <!-- top level definition -->
		<xsd:annotation>
			<xsd:documentation>
				A file object annotation
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="Annotation">
					<xsd:sequence>
						<xsd:element ref="Bin:BinaryFile" minOccurs="1" maxOccurs="1"/>
					</xsd:sequence>
				</xsd:extension>
			</xsd:complexContent> 
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="XMLAnnotation"> <!-- top level definition -->
		<xsd:annotation>
			<xsd:documentation>
				An general xml annotation. The contents of this is not processed as OME XML but should still be well-formed XML.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="Annotation">
					<xsd:sequence>
						<xsd:element name="Value" minOccurs="1" maxOccurs="1">
							<xsd:complexType>
								<xsd:sequence>
									<xsd:any processContents = "lax" minOccurs = "0" maxOccurs = "unbounded"/>
								</xsd:sequence>
							</xsd:complexType>
						</xsd:element>
					</xsd:sequence>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="ListAnnotation">  <!-- top level definition -->
		<xsd:annotation>
			<xsd:documentation>
				This annotation is a grouping object. It uses the sequence of 
				annotation refs from the base Annotation to form the list.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="Annotation"/>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="CommentAnnotation"> <!-- top level definition -->
		<xsd:annotation>
			<xsd:documentation>
				A simple comment annotation
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="Annotation">
					<xsd:sequence>
						<xsd:element name="Value" type="xsd:string" minOccurs="1" maxOccurs="1"/>
					</xsd:sequence>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="LongAnnotation"> <!-- top level definition -->
		<xsd:annotation>
			<xsd:documentation>
				A simple numerical annotation of type xsd:long
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="Annotation">
					<xsd:sequence>
						<xsd:element name="Value" type="xsd:long" minOccurs="1" maxOccurs="1"/>
					</xsd:sequence>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="DoubleAnnotation"> <!-- top level definition -->
		<xsd:annotation>
			<xsd:documentation>
				A simple numerical annotation of type xsd:double
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="Annotation">
					<xsd:sequence>
						<xsd:element name="Value" type="xsd:double" minOccurs="1" maxOccurs="1"/>
					</xsd:sequence>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="BooleanAnnotation"> <!-- top level definition -->
		<xsd:annotation>
			<xsd:documentation>
				A simple boolean annotation of type xsd:boolean
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="Annotation">
					<xsd:sequence>
						<xsd:element name="Value" type="xsd:boolean" minOccurs="1" maxOccurs="1"/>
					</xsd:sequence>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>	
	<xsd:element name="TimestampAnnotation"> <!-- top level definition -->
		<xsd:annotation>
			<xsd:documentation>
				A date/time annotation of type xsd:dateTime
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="Annotation">
					<xsd:sequence>
						<xsd:element name="Value" type="xsd:dateTime" minOccurs="1" maxOccurs="1"/>
					</xsd:sequence>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="TagAnnotation"> <!-- top level definition -->
		<xsd:annotation>
			<xsd:documentation>
				A tag annotation (represents a tag or a tagset)
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="Annotation">
					<xsd:sequence>
						<xsd:element name="Value" type="xsd:string" minOccurs="1" maxOccurs="1"/>
					</xsd:sequence>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="TermAnnotation"> <!-- top level definition -->
		<xsd:annotation>
			<xsd:documentation>
				A ontology term annotation
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="Annotation">
					<xsd:sequence>
						<xsd:element name="Value" type="xsd:string" minOccurs="1" maxOccurs="1"/>
					</xsd:sequence>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>
</xsd:schema>

