<?xml version="1.0" encoding="UTF-8"?>
<!-- edited by Cui Lin on 26/11/08 -->
<!-- 编辑使用 XMLSpy v2006 U (http://www.altova.com) 由 any (any) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:dt="http://http://database.cs.wayne.edu/DPM/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
	<xs:element name="taskTemplate" type="taskTemplate_XMLElementType"/>
	<xs:complexType name="taskTemplate_XMLElementType">
		<xs:sequence>
			<xs:element name="taskInterface" type="taskInterface_XMLElementType"/>
			<xs:element name="taskComponents" type="taskComponents_XMLElementType"/>
			<xs:element name="mappings" type="mappings_XMLElementType"/>
			<xs:element name="taskInstances" type="taskInstances_XMLElementType"/>
		</xs:sequence>
		<xs:attribute name="version" type="xs:string" use="required"/>
	</xs:complexType>
	<xs:complexType name="taskInterface_XMLElementType">
		<xs:sequence>
			<xs:element name="taskName" type="xs:string"/>
			<xs:element name="taskDescription" type="xs:string"/>
			<xs:element name="inputPorts" type="inputPorts_XMLElementType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="outputPorts" type="outputPort_XMLElementType" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="id" type="xs:NMTOKEN" use="required"/>
	</xs:complexType>
	<xs:complexType name="inputPorts_XMLElementType">
		<xs:sequence>
			<xs:element name="port" type="port_XMLElementType" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="number" type="xs:NMTOKEN" use="required"/>
	</xs:complexType>
	<xs:complexType name="outputPort_XMLElementType">
		<xs:sequence>
			<xs:element name="port" type="port_XMLElementType" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="number" type="xs:int" use="required"/>
	</xs:complexType>
	<xs:complexType name="port_XMLElementType">
		<xs:sequence>
			<xs:element name="portType" type="xs:string"/>
			<xs:element name="portDescription" type="xs:string" minOccurs="0"/>
			<xs:element name="defaultPortValue" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute name="id" type="xs:NMTOKEN" use="required"/>
		<xs:attribute name="default" type="xs:NMTOKEN" use="optional"/>
	</xs:complexType>
	<xs:complexType name="taskComponents_XMLElementType">
		<xs:sequence>
			<xs:element ref="taskComponent" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:element name="taskComponent">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="taskType">
					<xs:simpleType>
						<xs:restriction base="xs:string">
							<xs:enumeration value="WebService"/>
							<xs:enumeration value="WindowsApplication"/>
							<xs:enumeration value="UnixApplication"/>
						</xs:restriction>
					</xs:simpleType>
				</xs:element>
				<xs:choice>
					<xs:group ref="WebServiceGroup"/>
					<xs:group ref="WindowsApplicationGroup"/>
					<xs:group ref="UnixApplicationGroup"/>
				</xs:choice>
				<xs:element name="taskInvocation" type="taskInvocation_XMLElementType"/>
				<xs:element name="inputs" type="inputs_XMLElementType"/>
				<xs:element name="outputs" type="outputs_XMLElementType"/>
			</xs:sequence>
			<xs:attribute name="id" type="xs:NMTOKEN" use="required"/>
			<xs:attribute name="default" type="xs:NMTOKEN" use="required"/>
			<xs:attribute ref="role" use="required"/>
		</xs:complexType>
	</xs:element>
	<xs:attribute name="role">
		<xs:simpleType>
			<xs:restriction base="xs:string">
				<xs:enumeration value="functional"/>
				<xs:enumeration value="shim"/>
			</xs:restriction>
		</xs:simpleType>
	</xs:attribute>
	<xs:group name="WebServiceGroup">
		<xs:sequence>
			<xs:element name="wsdlURI" type="xs:string"/>
			<xs:element name="serviceName" type="xs:string"/>
			<xs:element name="operationName" type="xs:string"/>
		</xs:sequence>
	</xs:group>
	<xs:group name="WindowsApplicationGroup">
		<xs:sequence>
			<xs:element name="executable" type="xs:string"/>
			<xs:element name="appName" type="xs:string"/>
		</xs:sequence>
	</xs:group>
	<xs:group name="UnixApplicationGroup">
		<xs:sequence>
			<xs:element name="directory" type="xs:string"/>
			<xs:element name="appName" type="xs:string"/>
		</xs:sequence>
	</xs:group>
	<xs:complexType name="taskInvocation_XMLElementType">
		<xs:sequence>
			<xs:element name="operatingSystem">
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:enumeration value="Windows"/>
						<xs:enumeration value="UNIX"/>
						<xs:enumeration value="LINUX"/>
						<xs:enumeration value="MAC"/>
						<xs:enumeration value="Unknown"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:element>
			<xs:element name="invocationMode">
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:enumeration value="Local"/>
						<xs:enumeration value="Remote"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:element>
			<xs:element name="interactionMode">
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:enumeration value="Yes"/>
						<xs:enumeration value="No"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:element>
			<xs:element ref="invocationAuthentication" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:element name="invocationAuthentication">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="hostName" type="xs:string"/>
				<xs:element name="userName" type="xs:string"/>
				<xs:element name="password" type="xs:string"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:complexType name="inputs_XMLElementType">
		<xs:sequence>
			<xs:element ref="input" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="outputs_XMLElementType">
		<xs:sequence>
			<xs:element ref="output" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:element name="input">
		<xs:complexType>
			<xs:attribute name="id" type="xs:NMTOKEN" use="required"/>
			<xs:attribute name="mode" type="xs:string" use="required"/>
			<xs:attribute name="name" type="xs:string" use="required"/>
			<xs:attribute name="type" type="xs:string" use="required"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="output">
		<xs:complexType>
			<xs:attribute name="id" type="xs:NMTOKEN" use="required"/>
			<xs:attribute name="mode" type="xs:string" use="required"/>
			<xs:attribute name="name" type="xs:string" use="required"/>
			<xs:attribute name="type" type="xs:string" use="required"/>
		</xs:complexType>
	</xs:element>
	<xs:complexType name="mappings_XMLElementType">
		<xs:sequence>
			<xs:element name="mapping" type="mapping_XMLElementType" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="mapping_XMLElementType">
		<xs:sequence>
			<xs:element name="inputmapping" type="inputmapping_XMLElementType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element ref="outputmapping" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element ref="assign" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="id" type="xs:NMTOKEN" use="required"/>
	</xs:complexType>
	<xs:complexType name="inputmapping_XMLElementType">
		<xs:sequence>
			<xs:element name="shims" type="shims_XMLElementType" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="from" type="xs:string" use="required"/>
		<xs:attribute name="to" type="xs:string" use="required"/>
		<xs:attribute ref="shimming" use="required"/>
	</xs:complexType>
	<xs:attribute name="shimming">
		<xs:simpleType>
			<xs:restriction base="xs:string">
				<xs:enumeration value="Yes"/>
				<xs:enumeration value="No"/>
			</xs:restriction>
		</xs:simpleType>
	</xs:attribute>
	<xs:complexType name="shims_XMLElementType">
		<xs:sequence>
			<xs:element ref="shimming"/>
		</xs:sequence>
		<xs:attribute name="id" type="xs:string" use="required"/>
	</xs:complexType>
	<xs:element name="shimming">
		<xs:complexType>
			<xs:attribute name="from" type="xs:string" use="required"/>
			<xs:attribute name="to" type="xs:string" use="required"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="outputmapping">
		<xs:complexType>
			<xs:attribute name="from" type="xs:string" use="required"/>
			<xs:attribute name="to" type="xs:string" use="required"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="assign">
		<xs:complexType>
			<xs:attribute name="from" type="xs:string" use="required"/>
			<xs:attribute name="to" type="xs:string" use="required"/>
		</xs:complexType>
	</xs:element>
	<xs:complexType name="taskInstances_XMLElementType">
		<xs:sequence>
			<xs:element name="taskInstance" type="taskInstance_XMLElementType" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="taskInstance_XMLElementType">
		<xs:sequence>
			<xs:element name="taskComponent" type="taskComponent_XMLElementType"/>
		</xs:sequence>
		<xs:attribute name="id" type="xs:NMTOKEN" use="required"/>
	</xs:complexType>
	<xs:complexType name="taskComponent_XMLElementType">
		<xs:attribute name="id" type="xs:int" use="required"/>
	</xs:complexType>
</xs:schema>
