<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2006 U (http://www.altova.com) by Gaurang Mehta (USC ISI) -->
<!-- edited with XMLSPY v2004 rel. 3 U (http://www.xmlspy.com) by Rebecca Y Jordan (UNIV OF SOUTHERN CALIF) -->
<xs:schema targetNamespace="http://pegasus.isi.edu/schema/sitecatalog" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://pegasus.isi.edu/schema/sitecatalog" elementFormDefault="qualified" attributeFormDefault="unqualified" version="3.0">
	<xs:simpleType name="ProfileNamespace">
		<xs:annotation>
			<xs:documentation>defines the legal namespaces of execution profiles.</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="pegasus"/>
			<xs:enumeration value="condor"/>
			<xs:enumeration value="dagman"/>
			<xs:enumeration value="env"/>
			<xs:enumeration value="hints"/>
			<xs:enumeration value="globus"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="SchedulerType">
		<xs:annotation>
			<xs:documentation>Different Schedulers on the Grid</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="Fork"/>
			<xs:enumeration value="PBS"/>
			<xs:enumeration value="LSF"/>
			<xs:enumeration value="Condor"/>
			<xs:enumeration value="SGE"/>
			<xs:enumeration value="unknown"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="GridType">
		<xs:annotation>
			<xs:documentation>Different Grid Type's Supported by Pegasus</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="gt2"/>
			<xs:enumeration value="gt4"/>
			<xs:enumeration value="gt5"/>
			<xs:enumeration value="condor"/>
			<xs:enumeration value="condor-c"/>
			<xs:enumeration value="pbs"/>
			<xs:enumeration value="lsf"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="JobType">
		<xs:annotation>
			<xs:documentation>Type of Jobs in the executable workflow this Grid Supports</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="compute"/>
			<xs:enumeration value="auxillary"/>
			<xs:enumeration value="transfer"/>
			<xs:enumeration value="register"/>
			<xs:enumeration value="cleanup"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:element name="sitecatalog">
		<xs:annotation>
			<xs:documentation>root element aggregating all sites information there is.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence maxOccurs="unbounded">
				<xs:element name="site">
					<xs:annotation>
						<xs:documentation>Describes a single site</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:sequence>
							<xs:element name="grid" minOccurs="0" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>Each site supports various (usually two) jobmanagers.</xs:documentation>
								</xs:annotation>
								<xs:complexType>
									<xs:attribute name="type" type="GridType" use="required">
										<xs:annotation>
											<xs:documentation>The universe name is actually the primary key for the jobmanager identification.</xs:documentation>
										</xs:annotation>
									</xs:attribute>
									<xs:attribute name="contact" type="xs:string" use="required">
										<xs:annotation>
											<xs:documentation>The contact string is the secondary key for any job manager.</xs:documentation>
										</xs:annotation>
									</xs:attribute>
									<xs:attribute name="scheduler" type="SchedulerType" use="required"/>
									<xs:attribute name="jobtype" type="JobType" use="optional"/>
									<xs:attribute name="free-mem" type="xs:string" use="optional"/>
									<xs:attribute name="total-mem" type="xs:string" use="optional"/>
									<xs:attribute name="max-count" type="xs:string" use="optional"/>
									<xs:attribute name="max-cpu-time" type="xs:string" use="optional"/>
									<xs:attribute name="running-jobs" type="xs:nonNegativeInteger" use="optional"/>
									<xs:attribute name="jobs-in-queue" type="xs:nonNegativeInteger" use="optional"/>
									<xs:attribute name="idle-nodes" type="xs:nonNegativeInteger" use="optional"/>
									<xs:attribute name="total-nodes" type="xs:nonNegativeInteger" use="optional"/>
									<xs:attributeGroup ref="SystemInformationGroup"/>
								</xs:complexType>
							</xs:element>
							<xs:element name="head-fs">
								<xs:complexType>
									<xs:sequence minOccurs="0">
										<xs:element name="scratch" type="StorageType" minOccurs="0"/>
										<xs:element name="storage" type="StorageType" minOccurs="0"/>
										<xs:element name="profile" minOccurs="0" maxOccurs="unbounded">
											<xs:annotation>
												<xs:documentation>Administrative profile defaults associated with a site.</xs:documentation>
											</xs:annotation>
											<xs:complexType>
												<xs:simpleContent>
													<xs:extension base="xs:string">
														<xs:attribute name="namespace" type="ProfileNamespace" use="required"/>
														<xs:attribute name="key" type="xs:string" use="required"/>
													</xs:extension>
												</xs:simpleContent>
											</xs:complexType>
										</xs:element>
									</xs:sequence>
								</xs:complexType>
							</xs:element>
							<xs:element name="worker-fs" minOccurs="0">
								<xs:complexType>
									<xs:sequence minOccurs="0">
										<xs:element name="scratch" minOccurs="0">
											<xs:complexType>
												<xs:complexContent>
													<xs:extension base="StorageType">
														<xs:sequence minOccurs="0">
															<xs:element name="wshared" type="DirectoryType" minOccurs="0">
																<xs:annotation>
																	<xs:documentation>Information about the shared directory on the Worker Nodes</xs:documentation>
																</xs:annotation>
															</xs:element>
														</xs:sequence>
													</xs:extension>
												</xs:complexContent>
											</xs:complexType>
										</xs:element>
										<xs:element name="storage" minOccurs="0">
											<xs:complexType>
												<xs:complexContent>
													<xs:extension base="StorageType">
														<xs:sequence minOccurs="0">
															<xs:element name="wshared" type="DirectoryType" minOccurs="0">
																<xs:annotation>
																	<xs:documentation>Information about the shared directory on the Worker Nodes</xs:documentation>
																</xs:annotation>
															</xs:element>
														</xs:sequence>
													</xs:extension>
												</xs:complexContent>
											</xs:complexType>
										</xs:element>
										<xs:element name="profile" minOccurs="0" maxOccurs="unbounded">
											<xs:annotation>
												<xs:documentation>Administrative profile defaults associated with a site.</xs:documentation>
											</xs:annotation>
											<xs:complexType>
												<xs:simpleContent>
													<xs:extension base="xs:string">
														<xs:attribute name="namespace" type="ProfileNamespace" use="required"/>
														<xs:attribute name="key" type="xs:string" use="required"/>
													</xs:extension>
												</xs:simpleContent>
											</xs:complexType>
										</xs:element>
									</xs:sequence>
								</xs:complexType>
							</xs:element>
							<xs:element name="replica-catalog" minOccurs="0" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>Each site may report to multiple LRCs.</xs:documentation>
								</xs:annotation>
								<xs:complexType>
									<xs:sequence>
										<xs:element name="alias" minOccurs="0" maxOccurs="unbounded">
											<xs:complexType>
												<xs:attribute name="name" type="xs:string" use="required"/>
											</xs:complexType>
										</xs:element>
										<xs:element name="connection" minOccurs="0" maxOccurs="unbounded">
											<xs:complexType>
												<xs:simpleContent>
													<xs:extension base="xs:string">
														<xs:attribute name="key" type="xs:string" use="required"/>
													</xs:extension>
												</xs:simpleContent>
											</xs:complexType>
										</xs:element>
									</xs:sequence>
									<xs:attribute name="type" type="xs:string" use="required"/>
									<xs:attribute name="url" type="xs:string" use="required"/>
								</xs:complexType>
							</xs:element>
							<xs:element name="profile" minOccurs="0" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>Administrative profile defaults associated with a site.</xs:documentation>
								</xs:annotation>
								<xs:complexType>
									<xs:simpleContent>
										<xs:extension base="xs:string">
											<xs:attribute name="namespace" type="ProfileNamespace" use="required"/>
											<xs:attribute name="key" type="xs:string" use="required"/>
										</xs:extension>
									</xs:simpleContent>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
						<xs:attribute name="handle" type="xs:ID" use="required"/>
						<xs:attributeGroup ref="SystemInformationGroup"/>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="version" type="xs:decimal" use="optional" default="3.0"/>
		</xs:complexType>
	</xs:element>
	<xs:complexType name="FileServerType">
		<xs:annotation>
			<xs:documentation>Describes the fileserver to access data from outside</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="profile" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>Administrative profile defaults associated with a site.</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:simpleContent>
						<xs:extension base="xs:string">
							<xs:attribute name="namespace" type="ProfileNamespace" use="required"/>
							<xs:attribute name="key" type="xs:string" use="required"/>
						</xs:extension>
					</xs:simpleContent>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="protocol" type="xs:string" use="required"/>
		<xs:attribute name="url" type="xs:anyURI" use="required"/>
		<xs:attribute name="mount-point" type="xs:string" use="required"/>
	</xs:complexType>
	<xs:complexType name="StorageType">
		<xs:annotation>
			<xs:documentation>Describes the filesystem layout (shared and local) on a site</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="local" type="DirectoryType" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Information about the local directory on a Node</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="shared" type="DirectoryType" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Information about the shared directory on the Cluster</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:simpleType name="ArchitectureType">
		<xs:annotation>
			<xs:documentation>Defines the valid architecture types</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:NMTOKENS">
			<xs:enumeration value="x86"/>
			<xs:enumeration value="x86_64"/>
			<xs:enumeration value="ppc"/>
			<xs:enumeration value="ppc_64"/>
			<xs:enumeration value="ia64"/>
			<xs:enumeration value="sparcv7"/>
			<xs:enumeration value="sparcv9"/>
			<xs:enumeration value="amd64"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="OSType">
		<xs:annotation>
			<xs:documentation>Defines the valid OS types</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:NMTOKENS">
			<xs:enumeration value="LINUX"/>
			<xs:enumeration value="SUNOS"/>
			<xs:enumeration value="AIX"/>
			<xs:enumeration value="MACOSX"/>
			<xs:enumeration value="WINDOWS"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:attributeGroup name="SystemInformationGroup">
		<xs:annotation>
			<xs:documentation>Defines the attributes to define system information</xs:documentation>
		</xs:annotation>
		<xs:attribute name="arch" type="ArchitectureType" use="optional" default="x86"/>
		<xs:attribute name="os" type="OSType" use="optional" default="LINUX"/>
		<xs:attribute name="osrelease" type="xs:string" use="optional"/>
		<xs:attribute name="osversion" type="xs:string" use="optional"/>
		<xs:attribute name="glibc" type="xs:string" use="optional"/>
	</xs:attributeGroup>
	<xs:complexType name="FileSystemType">
		<xs:annotation>
			<xs:documentation>Defines the interal  view/mount point and its characteristics</xs:documentation>
		</xs:annotation>
		<xs:attribute name="mount-point" type="xs:string" use="required"/>
		<xs:attribute name="free-size" type="xs:string" use="optional"/>
		<xs:attribute name="total-size" type="xs:string" use="optional"/>
	</xs:complexType>
	<xs:complexType name="DirectoryType">
		<xs:annotation>
			<xs:documentation>Defines a directory's external and internal view/mount-point and access parameters</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="file-server" type="FileServerType" maxOccurs="unbounded"/>
			<xs:element name="internal-mount-point" type="FileSystemType"/>
		</xs:sequence>
	</xs:complexType>
</xs:schema>
