<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
		   xmlns="http://schemas.openehr.org/v2" targetNamespace="http://schemas.openehr.org/v2" elementFormDefault="qualified"
		   id="EhrExtract.xsd" version="v1.0.4">
	<!-- dependencies -->
	<xs:include schemaLocation="DataStructures.xsd"/>
	<!-- common package -->
	<xs:complexType name="EXTRACT">
		<xs:complexContent>
			<xs:extension base="LOCATABLE">
				<xs:sequence>
					<xs:element name="request_id" type="HIER_OBJECT_ID" minOccurs="0"/>
					<xs:element name="time_created" type="DV_DATE_TIME"/>
					<xs:element name="system_id" type="HIER_OBJECT_ID"/>
					<xs:element name="participations" type="PARTICIPATION" minOccurs="0" maxOccurs="unbounded"/>
					<xs:element name="sequence_nr" type="xs:long"/>
					<xs:element name="chapters" type="EXTRACT_CHAPTER" minOccurs="0" maxOccurs="unbounded"/>
					<xs:element name="specification" type="EXTRACT_SPEC" minOccurs="0"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="EXTRACT_CHAPTER">
		<xs:complexContent>
			<xs:extension base="LOCATABLE">
				<xs:sequence>
					<xs:element name="items" type="EXTRACT_ITEM" minOccurs="0" maxOccurs="unbounded"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="EXTRACT_ENTITY_CHAPTER">
		<xs:complexContent>
			<xs:extension base="EXTRACT_CHAPTER">
				<xs:sequence>
					<xs:element name="extract_id_key" type="xs:string"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="EXTRACT_FOLDER">
		<xs:complexContent>
			<xs:extension base="EXTRACT_ITEM">
				<xs:sequence>
					<xs:element name="items" type="EXTRACT_ITEM" minOccurs="0" maxOccurs="unbounded"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="EXTRACT_CONTENT_ITEM" abstract="true">
		<xs:complexContent>
			<xs:extension base="EXTRACT_ITEM">
				<xs:sequence>
					<xs:element name="is_primary" type="xs:boolean"/>
					<xs:element name="is_changed" type="xs:boolean" minOccurs="0"/>
					<xs:element name="is_masked" type="xs:boolean" minOccurs="0"/>
					<!-- the following is only defined in the child class with a concrete implementation
					<xs:element name="item" type="xs:anyType" minOccurs="0"/>
					-->
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="EXTRACT_ITEM" abstract="true">
		<xs:complexContent>
			<xs:extension base="LOCATABLE">
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="EXTRACT_ENTITY_MANIFEST">
		<xs:sequence>
			<xs:element name="extract_id_key" type="xs:string"/>
			<xs:element name="ehr_id" type="xs:string" minOccurs="0"/>
			<xs:element name="subject_id" type="xs:string" minOccurs="0"/>
			<xs:element name="other_ids" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="item_list" type="OBJECT_REF" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="EXTRACT_MANIFEST">
		<xs:sequence>
			<xs:element name="entities" type="EXTRACT_ENTITY_MANIFEST" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="EXTRACT_SPEC">
		<xs:sequence>
			<xs:element name="extract_type" type="DV_CODED_TEXT"/>
			<xs:element name="includes_multimedia" type="xs:boolean"/>
			<xs:element name="link_depth" type="xs:int"/>
			<xs:element name="criteria" type="DV_PARSABLE" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="other_details" type="ITEM_STRUCTURE" minOccurs="0"/>
			<xs:element name="version_spec" type="EXTRACT_VERSION_SPEC" minOccurs="0"/>
			<xs:element name="manifest" type="EXTRACT_MANIFEST"/>
			<xs:element name="priority" type="xs:int"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="EXTRACT_VERSION_SPEC">
		<xs:sequence>
			<xs:element name="include_all_versions" type="xs:boolean"/>
			<xs:element name="commit_time_interval" type="DV_INTERVAL" minOccurs="0"/>
			<xs:element name="includes_revision_history" type="xs:boolean"/>
			<xs:element name="includes_data" type="xs:boolean"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="EXTRACT_REQUEST">
		<xs:complexContent>
			<xs:extension base="LOCATABLE">
				<xs:sequence>
					<xs:element name="extract_spec" type="EXTRACT_SPEC"/>
					<xs:element name="update_spec" type="EXTRACT_UPDATE_SPEC" minOccurs="0"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="EXTRACT_ACTION_REQUEST">
		<xs:complexContent>
			<xs:extension base="LOCATABLE">
				<xs:sequence>
					<xs:element name="request_id" type="OBJECT_REF"/>
					<xs:element name="action" type="DV_CODED_TEXT"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="EXTRACT_UPDATE_SPEC">
		<xs:sequence>
			<xs:element name="persist_in_server" type="xs:boolean"/>
			<xs:element name="repeat_period" type="DV_DURATION" minOccurs="0"/>
			<xs:element name="trigger_events" type="DV_CODED_TEXT" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="update_method" type="CODE_PHRASE"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="EXTRACT_PARTICIPATION">
		<xs:sequence>
			<xs:element name="time" type="DV_INTERVAL" minOccurs="0"/>
			<xs:element name="function" type="DV_TEXT"/>
			<xs:element name="mode" type="DV_CODED_TEXT" minOccurs="0"/>
			<xs:element name="performer" type="xs:string"/>
		</xs:sequence>
	</xs:complexType>
	<!-- openehr_extract package -->
	<xs:complexType name="OPENEHR_CONTENT_ITEM">
		<xs:complexContent>
			<xs:extension base="EXTRACT_CONTENT_ITEM">
				<xs:sequence>
					<xs:element name="item" type="X_VERSIONED_OBJECT" minOccurs="0"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="X_VERSIONED_OBJECT">
		<xs:sequence>
			<xs:element name="uid" type="HIER_OBJECT_ID"/>
			<xs:element name="owner_id" type="OBJECT_REF"/>
			<xs:element name="time_created" type="DV_DATE_TIME"/>
			<xs:element name="total_version_count" type="xs:int"/>
			<xs:element name="extract_version_count" type="xs:int"/>
			<xs:element name="revision_history" type="REVISION_HISTORY" minOccurs="0"/>
			<xs:element name="versions" type="ORIGINAL_VERSION" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="X_VERSIONED_EHR_ACCESS">
		<xs:complexContent>
			<xs:extension base="X_VERSIONED_OBJECT"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="X_VERSIONED_EHR_STATUS">
		<xs:complexContent>
			<xs:extension base="X_VERSIONED_OBJECT"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="X_VERSIONED_COMPOSITION">
		<xs:complexContent>
			<xs:extension base="X_VERSIONED_OBJECT"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="X_VERSIONED_FOLDER">
		<xs:complexContent>
			<xs:extension base="X_VERSIONED_OBJECT"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="X_VERSIONED_PARTY">
		<xs:complexContent>
			<xs:extension base="X_VERSIONED_OBJECT"/>
		</xs:complexContent>
	</xs:complexType>
	<!-- generic_extract package -->
	<xs:complexType name="GENERIC_CONTENT_ITEM">
		<xs:complexContent>
			<xs:extension base="EXTRACT_CONTENT_ITEM">
				<xs:sequence>
					<xs:element name="item_type" type="DV_CODED_TEXT" minOccurs="0"/>
					<xs:element name="item_type_version" type="xs:string" minOccurs="0"/>
					<xs:element name="author" type="xs:string" minOccurs="0"/>
					<xs:element name="creation_time" type="Iso8601DateTime" minOccurs="0"/>
					<xs:element name="authoriser" type="xs:string" minOccurs="0"/>
					<xs:element name="authorisation_time" type="Iso8601DateTime" minOccurs="0"/>
					<xs:element name="item_status" type="DV_CODED_TEXT" minOccurs="0"/>
					<xs:element name="version_id" type="xs:string" minOccurs="0"/>
					<xs:element name="version_set_id" type="xs:string" minOccurs="0"/>
					<xs:element name="system_id" type="xs:string" minOccurs="0"/>
					<xs:element name="other_details" type="StringDictionaryItem" minOccurs="0" maxOccurs="unbounded"/>
					<xs:element name="item" type="LOCATABLE" minOccurs="0"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!-- sync_extract package -->
	<xs:complexType name="SYNC_EXTRACT_REQUEST">
		<xs:complexContent>
			<xs:extension base="MESSAGE_CONTENT">
				<xs:sequence>
					<xs:element name="specification" type="SYNC_EXTRACT_SPEC"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="SYNC_EXTRACT">
		<xs:complexContent>
			<xs:extension base="MESSAGE_CONTENT">
				<xs:sequence>
					<xs:element name="specification" type="SYNC_EXTRACT_SPEC"/>
					<xs:element name="items" type="X_CONTRIBUTION" minOccurs="0" maxOccurs="unbounded"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="SYNC_EXTRACT_SPEC">
		<xs:sequence>
			<xs:element name="includes_versions" type="xs:boolean"/>
			<xs:element name="contribution_list" type="HIER_OBJECT_ID" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="contributions_since" type="DV_DATE_TIME" minOccurs="0"/>
			<xs:element name="all_contributions" type="xs:boolean" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="X_CONTRIBUTION">
		<xs:sequence>
			<xs:element name="uid" type="HIER_OBJECT_ID"/>
			<xs:element name="audit" type="AUDIT_DETAILS"/>
			<xs:element name="versions" type="VERSION" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<!-- message package -->
	<xs:complexType name="ADDRESSED_MESSAGE">
		<xs:sequence>
			<xs:element name="sender" type="xs:string"/>
			<xs:element name="sender_reference" type="xs:string"/>
			<xs:element name="addressees" type="xs:string" maxOccurs="unbounded"/>
			<xs:element name="urgency" type="xs:int" minOccurs="0"/>
			<xs:element name="message" type="MESSAGE"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="MESSAGE_CONTENT" abstract="true"/>
	<xs:complexType name="MESSAGE">
		<xs:sequence>
			<xs:element name="author" type="PARTY_PROXY"/>
			<xs:element name="audit" type="AUDIT_DETAILS"/>
			<xs:element name="content" type="MESSAGE_CONTENT"/>
			<xs:element name="signature" type="xs:string" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
</xs:schema>
