<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           xmlns:ncbc="ncbc:biositemaps:v04" 
           targetNamespace="ncbc:biositemaps:v04" 
           elementFormDefault="qualified" 
           attributeFormDefault="unqualified">
   
	<!-- root element describing a set of NCBC Resources-->
	<xs:element name="resources" type="ncbc:resourceSetType"/>
	<xs:complexType name="resourceSetType">
		<xs:sequence>
			<xs:element ref="ncbc:resource" minOccurs="0"
				maxOccurs="unbounded" />
		</xs:sequence>
		<xs:attribute name="name" type="xs:string" use="required"></xs:attribute>
	</xs:complexType>
	<!-- element describing a single NCBC Resource-->
	<xs:element name="resource" type="ncbc:resourceType"/>
	<xs:complexType name="resourceType">	
        <xs:all>
			<xs:element name="name" type="xs:string" minOccurs="1" maxOccurs="1">
				<xs:annotation>
					<xs:documentation source="ospi.label">Name</xs:documentation>
					<xs:documentation source="ospi.description" />
				</xs:annotation>
			</xs:element>
			<xs:element name="description" type="xs:string" minOccurs="0">
				<xs:annotation>
					<xs:documentation source="ospi.label">Description</xs:documentation>
					<xs:documentation source="ospi.description" />
				</xs:annotation>
			</xs:element>
			<xs:element name="authors" type="xs:string" minOccurs="0">
				<xs:annotation>
					<xs:documentation source="ospi.label">Author List</xs:documentation>
					<xs:documentation source="ospi.description">Authors (comma separated values)</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="rlsVersion" type="ncbc:versionType" minOccurs="0" maxOccurs="1" />
			<!-- keywordItem vs keywordList:
              choice of either many individual keyword elements or one element with comma-separated-values 
          -->
			<xs:element name="keywords" type="xs:string" minOccurs="0">
				<xs:annotation>
					<xs:documentation source="ospi.label">Keyword List</xs:documentation>
					<xs:documentation source="ospi.description">Keyword (comma separated values)</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="ontologyLabel" type="ncbc:ontologyType" minOccurs="0" maxOccurs="1" />
			<xs:element name="language" type="xs:string" minOccurs="0" maxOccurs="1">
				<xs:annotation>
					<xs:documentation source="ospi.label">Implementation Language(s)</xs:documentation>
					<xs:documentation source="ospi.description" />
				</xs:annotation>
			</xs:element>
			<xs:element name="dataInput" type="xs:string" minOccurs="0" maxOccurs="1">
				<xs:annotation>
					<xs:documentation source="ospi.label">Data Input</xs:documentation>
					<xs:documentation source="ospi.description" />
				</xs:annotation>
			</xs:element>
			<xs:element name="dataOutput" type="xs:string" minOccurs="0" maxOccurs="1">
				<xs:annotation>
					<xs:documentation source="ospi.label">Data Output</xs:documentation>
					<xs:documentation source="ospi.description" />
				</xs:annotation>
			</xs:element>
			<xs:element name="platforms" type="xs:string" minOccurs="0" maxOccurs="1">
				<xs:annotation>
					<xs:documentation source="ospi.label">Platforms tested</xs:documentation>
					<xs:documentation source="ospi.description" />
				</xs:annotation>
			</xs:element>
			<xs:element name="license" type="xs:string" minOccurs="0">
				<xs:annotation>
					<xs:documentation source="ospi.label">License</xs:documentation>
					<xs:documentation source="ospi.description" />
				</xs:annotation>
			</xs:element>
			<xs:element name="organization" type="xs:string" minOccurs="0" maxOccurs="1">
				<xs:annotation>
					<xs:documentation source="ospi.label">Organization</xs:documentation>
					<xs:documentation source="ospi.description" />
				</xs:annotation>
			</xs:element>
			<xs:element name="url" minOccurs="0">
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:pattern value="http.?://.*" />
					</xs:restriction>
				</xs:simpleType>
			</xs:element>
			<xs:element name="resourceType" type="xs:string" minOccurs="0">
				<xs:annotation>
					<xs:documentation source="ospi.label">Resource Type</xs:documentation>
					<xs:documentation source="ospi.description" />
				</xs:annotation>
			</xs:element>
		</xs:all>
		
	    <xs:attribute name="center" type="xs:string" use="optional"></xs:attribute>
        <xs:attribute name="id" type="xs:int" use="optional"></xs:attribute>
		
	</xs:complexType>
	<!-- Version, Release Date and Stage
     -->
	<xs:complexType name="versionType">
		<xs:sequence>
			<xs:element name="version" type="xs:string" minOccurs="0">
				<xs:annotation>
					<xs:documentation source="ospi.label">Version Number</xs:documentation>
					<xs:documentation source="ospi.description"/>
				</xs:annotation>
			</xs:element>
			<xs:element name="releaseDate" type="xs:string" minOccurs="0">
				<xs:annotation>
					<xs:documentation source="ospi.label">Release date</xs:documentation>
					<xs:documentation source="ospi.description"/>
				</xs:annotation>
			</xs:element>
			<xs:element name="stage" type="xs:string" minOccurs="0">
				<xs:annotation>
					<xs:documentation source="ospi.label">DevelopmentStage</xs:documentation>
					<xs:documentation source="ospi.description">e.g. beta, production</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<!-- SoftwareResourceOntology (http://bioontology.org/projects/ontologies/SoftwareOntology/)
     -->
	<xs:simpleType name="ontologyType">
		<xs:restriction base="xs:string"/>
	</xs:simpleType>

</xs:schema>
