<?xml version = "1.0" encoding = "UTF-8"?>
<!--
	#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	#
	# Copyright (C) 2003-2008 Open Microscopy Environment
	#       Massachusetts Institute of Technology,
	#       National Institutes of Health,
	#       University of Dundee,
	#       University of Wisconsin at Madison
	#
	#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-->
<!--
	#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	# Written by:  Andrew J Patterson 
	#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-->
<xsd:schema xmlns = "http://www.openmicroscopy.org/Schemas/SA/2008-09"
	targetNamespace = "http://www.openmicroscopy.org/Schemas/SA/2008-09"
	xmlns:OME = "http://www.openmicroscopy.org/Schemas/OME/2008-09"
	xmlns:Bin="http://www.openmicroscopy.org/Schemas/BinaryFile/2008-09" 
	xmlns:xsd = "http://www.w3.org/2001/XMLSchema"
	version = "1"
	elementFormDefault = "qualified">
	<xsd:import namespace = "http://www.openmicroscopy.org/Schemas/OME/2008-09" schemaLocation = "http://www.openmicroscopy.org/Schemas/OME/2008-09/ome.xsd"/>
	<xsd:import namespace = "http://www.openmicroscopy.org/Schemas/BinaryFile/2008-09" schemaLocation = "http://www.openmicroscopy.org/Schemas/BinaryFile/2008-09/BinaryFile.xsd"/>
	<xsd:element name="StructuredAnnotations"> <!-- top level definition -->
		<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="StringAnnotation" minOccurs="1" maxOccurs="1"/>
				<xsd:element ref="BooleanAnnotation" minOccurs="1" maxOccurs="1"/>
				<xsd:element ref="TimestampAnnotation" minOccurs="1" maxOccurs="1"/>
			</xsd:choice>
		</xsd:complexType>
	</xsd:element>
	<xsd:complexType name="CommonAnnotation" abstract="true">
		<xsd:sequence>
			<xsd:element ref="Link" minOccurs="1" maxOccurs="unbounded"/>
		</xsd:sequence>
		<xsd:attribute name="ID" use="required" type="AnnotationID"></xsd:attribute>
		<xsd:attribute name="Namespace" use="required" type="xsd:anyURI"></xsd:attribute>
	</xsd:complexType>
	<xsd:element name="Link"> <!-- top level definition --> 
		<xsd:simpleType>
			<xsd:restriction base="OME:LSID"/>
		</xsd:simpleType>
	</xsd:element>
	<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:complexType>
			<xsd:complexContent>
				<xsd:extension base="CommonAnnotation">
					<xsd:sequence>
						<xsd:element name="FileName" minOccurs="1" maxOccurs="1"/>
						<xsd:element name="MimeType" minOccurs="0" maxOccurs="1" type="OME:MIMEtype"/>	
						<xsd:choice minOccurs="1" maxOccurs="1">
							<xsd:element ref="Bin:BinData" minOccurs="1" maxOccurs="1"/>
							<xsd:element name="ExternalFile" minOccurs="1" maxOccurs="1" type="xsd:string"/>
						</xsd:choice>
					</xsd:sequence>
				</xsd:extension>
			</xsd:complexContent> 
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="XmlAnnotation"> <!-- top level definition -->
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="CommonAnnotation">
					<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:complexType>
			<xsd:complexContent>
				<xsd:extension base="CommonAnnotation">
					<xsd:sequence>
						<xsd:element name="List" minOccurs="1" maxOccurs="1">
							<xsd:complexType>
								<xsd:sequence>
									<xsd:element ref="Link" minOccurs="1" maxOccurs="unbounded"/>
								</xsd:sequence>
							</xsd:complexType>
						</xsd:element>
					</xsd:sequence>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="StringAnnotation"> <!-- top level definition -->
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="CommonAnnotation">
					<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:complexType>
			<xsd:complexContent>
				<xsd:extension base="CommonAnnotation">
					<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:complexType>
			<xsd:complexContent>
				<xsd:extension base="CommonAnnotation">
					<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:complexType>
			<xsd:complexContent>
				<xsd:extension base="CommonAnnotation">
					<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:complexType>
			<xsd:complexContent>
				<xsd:extension base="CommonAnnotation">
					<xsd:sequence>
						<xsd:element name="Value" type="xsd:dateTime" minOccurs="1" maxOccurs="1"/>
					</xsd:sequence>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>
</xsd:schema>
