<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema attributeFormDefault="qualified" elementFormDefault="qualified"
	targetNamespace="http://www.gridforum.org/2003/ur-wg"
	xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:urwg="http://www.gridforum.org/2003/ur-wg"
	xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<xsd:annotation>
		<xsd:documentation xml:lang="en">Usage Record Working Group XML Schema definition</xsd:documentation>
	</xsd:annotation>
	<xsd:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd"/>
	<xsd:complexType name="UsageRecordType">
		<xsd:sequence>
			<xsd:element maxOccurs="1" minOccurs="1" ref="urwg:RecordIdentity"/>
			<xsd:element maxOccurs="1" minOccurs="0" ref="urwg:JobIdentity"/>
			<xsd:element maxOccurs="unbounded" minOccurs="0" ref="urwg:UserIdentity"/>
			<xsd:element maxOccurs="1" minOccurs="0" ref="urwg:JobName"/>
			<xsd:element maxOccurs="1" minOccurs="0" ref="urwg:Charge"/>
			<xsd:element maxOccurs="1" minOccurs="1" ref="urwg:Status"/>
			<xsd:choice maxOccurs="unbounded" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>The elements grouped together in this choice may be
						represented within a usage record multiple times. Each of these appearances
						must be differentiated by the metric and/or type associated with the element. </xsd:documentation>
				</xsd:annotation>
				<xsd:element ref="urwg:Disk"/>
				<xsd:element ref="urwg:Memory"/>
				<xsd:element ref="urwg:Swap"/>
				<xsd:element ref="urwg:Network"/>
				<xsd:element ref="urwg:TimeDuration"/>
				<xsd:element ref="urwg:TimeInstant"/>
				<xsd:element ref="urwg:ServiceLevel"/>
			</xsd:choice>
			<xsd:choice maxOccurs="unbounded" minOccurs="0">
				<xsd:element maxOccurs="1" minOccurs="0" ref="urwg:WallDuration"/>
				<xsd:sequence maxOccurs="1" minOccurs="0">
					<xsd:element maxOccurs="2" minOccurs="0" ref="urwg:CpuDuration"/>
				</xsd:sequence>
				<xsd:element maxOccurs="1" minOccurs="0" ref="urwg:NodeCount"/>
				<xsd:element maxOccurs="1" minOccurs="0" ref="urwg:Processors"/>
				<xsd:element maxOccurs="1" minOccurs="0" ref="urwg:EndTime"/>
				<xsd:element maxOccurs="1" minOccurs="0" ref="urwg:StartTime"/>
				<xsd:element maxOccurs="1" minOccurs="0" ref="urwg:MachineName"/>
				<xsd:element maxOccurs="1" minOccurs="0" ref="urwg:SubmitHost"/>
				<xsd:element maxOccurs="1" minOccurs="0" ref="urwg:Queue"/>
				<xsd:sequence maxOccurs="1" minOccurs="0">
					<xsd:element maxOccurs="unbounded" minOccurs="0" ref="urwg:ProjectName"/>
				</xsd:sequence>
				<xsd:sequence maxOccurs="1" minOccurs="0">
					<xsd:element maxOccurs="unbounded" minOccurs="0" ref="urwg:Host"/>
				</xsd:sequence>
				<xsd:sequence maxOccurs="1" minOccurs="0">
					<xsd:choice maxOccurs="unbounded" minOccurs="0">
						<xsd:element ref="urwg:PhaseResource"/>
						<xsd:element ref="urwg:VolumeResource"/>
						<xsd:element ref="urwg:Resource" />
						<xsd:element ref="urwg:ConsumableResource" />
					</xsd:choice>
				</xsd:sequence>
			</xsd:choice>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:element abstract="true" name="Usage" type="urwg:UsageRecordType"/>
	<xsd:element name="UsageRecord" substitutionGroup="urwg:Usage" type="urwg:UsageRecordType"/>
	<xsd:element name="JobUsageRecord" substitutionGroup="urwg:Usage">
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="urwg:UsageRecordType"/>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="UsageRecords">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element maxOccurs="unbounded" minOccurs="0" ref="urwg:Usage"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	<!-- Common properties that may be measured with several different metrics within the same usage record-->
	<xsd:element name="Network">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base="xsd:positiveInteger">
					<xsd:attribute ref="urwg:description" use="optional"/>
					<xsd:attributeGroup ref="urwg:intervallicVolume"/>
					<xsd:attribute default="total" ref="urwg:metric" use="optional"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="Disk">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base="xsd:positiveInteger">
					<xsd:attribute ref="urwg:description" use="optional"/>
					<xsd:attributeGroup ref="urwg:intervallicVolume"/>
					<xsd:attribute default="total" ref="urwg:metric" use="optional"/>
					<xsd:attribute ref="urwg:type" use="optional"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="Memory">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base="xsd:positiveInteger">
					<xsd:attribute ref="urwg:description" use="optional"/>
					<xsd:attributeGroup ref="urwg:intervallicVolume"/>
					<xsd:attribute default="total" ref="urwg:metric" use="optional"/>
					<xsd:attribute ref="urwg:type" use="optional"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="Swap">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base="xsd:positiveInteger">
					<xsd:attribute ref="urwg:description" use="optional"/>
					<xsd:attributeGroup ref="urwg:intervallicVolume"/>
					<xsd:attribute default="total" ref="urwg:metric" use="optional"/>
					<xsd:attribute ref="urwg:type" use="optional"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="NodeCount">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base="xsd:positiveInteger">
					<xsd:attribute ref="urwg:description" use="optional"/>
					<xsd:attribute default="total" ref="urwg:metric" use="optional"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="Processors">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base="xsd:positiveInteger">
					<xsd:attribute ref="urwg:description" use="optional"/>
					<xsd:attribute ref="urwg:metric" use="optional"/>
					<xsd:attribute name="consumptionRate" type="xsd:float" use="optional"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="TimeDuration">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base="xsd:duration">
					<xsd:attribute ref="urwg:type" use="optional"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="TimeInstant">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base="xsd:dateTime">
					<xsd:attribute ref="urwg:type" use="optional"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="ServiceLevel">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base="xsd:token">
					<xsd:attribute ref="urwg:type" use="optional"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>
	<!--This element should appear at most twice within a usage record, with differing values for usageType for each appearance-->
	<xsd:element name="CpuDuration">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base="xsd:duration">
					<xsd:attribute ref="urwg:description" use="optional"/>
					<xsd:attribute name="usageType">
						<xsd:simpleType>
							<xsd:restriction base="xsd:token">
								<xsd:enumeration value="user"/>
								<xsd:enumeration value="system"/>
							</xsd:restriction>
						</xsd:simpleType>
					</xsd:attribute>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>
	<!--These common properties should appear at most once within a usage record, rather that at most once per metric per usage record-->
	<xsd:element name="WallDuration">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base="xsd:duration">
					<xsd:attribute ref="urwg:description" use="optional"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="EndTime">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base="xsd:dateTime">
					<xsd:attribute ref="urwg:description" use="optional"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="StartTime">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base="xsd:dateTime">
					<xsd:attribute ref="urwg:description" use="optional"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="MachineName">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base="urwg:domainNameType">
					<xsd:attribute ref="urwg:description" use="optional"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="SubmitHost">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base="urwg:domainNameType">
					<xsd:attribute ref="urwg:description" use="optional"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="Host">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base="urwg:domainNameType">
					<xsd:attribute ref="urwg:description" use="optional"/>
					<xsd:attribute default="false" name="primary" type="xsd:boolean"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="Queue">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base="xsd:string">
					<xsd:attribute ref="urwg:description" use="optional"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="JobName">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base="xsd:string">
					<xsd:attribute ref="urwg:description" use="optional"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="ProjectName">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base="xsd:string">
					<xsd:attribute ref="urwg:description" use="optional"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="Status">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base="xsd:token">
					<xsd:attribute ref="urwg:description" use="optional"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="Charge">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base="xsd:float">
					<xsd:attribute ref="urwg:description" use="optional"/>
					<xsd:attribute ref="urwg:unit" use="optional"/>
					<xsd:attribute name="formula" type="xsd:string" use="optional"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>
	<!-- identity elements-->
	<xsd:element name="JobIdentity">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element maxOccurs="1" minOccurs="0" name="GlobalJobId" type="xsd:string"/>
				<xsd:element maxOccurs="1" minOccurs="0" name="LocalJobId" type="xsd:string"/>
				<xsd:sequence>
					<xsd:element maxOccurs="unbounded" minOccurs="0" name="ProcessId" type="xsd:string"/>
				</xsd:sequence>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="UserIdentity">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element maxOccurs="1" minOccurs="0" name="LocalUserId" type="xsd:string"/>
				<xsd:element maxOccurs="1" minOccurs="0" ref="ds:KeyInfo"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="RecordIdentity">
		<xsd:complexType>
			<xsd:sequence maxOccurs="1" minOccurs="0">
				<xsd:element ref="ds:KeyInfo"/>
			</xsd:sequence>
			<xsd:attribute name="recordId" type="xsd:token" use="required"/>
			<xsd:attribute name="createTime" type="xsd:dateTime" use="optional"/>
		</xsd:complexType>
	</xsd:element>
	<!--Extensibility Framework -->
	<xsd:element name="Resource" type="urwg:ResourceType"/>
	<xsd:element name="ConsumableResource" type="urwg:ConsumableResourceType"/>
	<xsd:element name="PhaseResource">
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="urwg:ConsumableResourceType">
					<xsd:attribute ref="urwg:phaseUnit" use="optional"/>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="VolumeResource">
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="urwg:ConsumableResourceType">
					<xsd:attribute ref="urwg:storageUnit" use="optional"/>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>
	<!--Create a generic consumable resource.  Carries the units attribute -->
	<xsd:complexType name="ConsumableResourceType">
		<xsd:simpleContent>
			<xsd:extension base="xsd:float">
				<xsd:attribute name="units" type="xsd:string" use="optional"/>
				<xsd:attribute ref="urwg:description" use="optional"/>
			</xsd:extension>
		</xsd:simpleContent>
	</xsd:complexType>
	<!-- Create a generic resource type-->
	<xsd:complexType name="ResourceType">
		<xsd:simpleContent>
			<xsd:extension base="xsd:string">
				<xsd:attribute ref="urwg:description" use="optional"/>
			</xsd:extension>
		</xsd:simpleContent>
	</xsd:complexType>
	<!-- Global Attribute Definitions -->
	<xsd:attribute name="description" type="xsd:string"/>
	<!--Units of measure attribute definitions-->
	<xsd:attribute name="unit" type="xsd:token"/>
	<xsd:attribute name="storageUnit">
		<xsd:simpleType>
			<xsd:restriction base="xsd:token">
				<xsd:enumeration value="b"/>
				<xsd:enumeration value="B"/>
				<xsd:enumeration value="KB"/>
				<xsd:enumeration value="MB"/>
				<xsd:enumeration value="GB"/>
				<xsd:enumeration value="PB"/>
				<xsd:enumeration value="EB"/>
				<xsd:enumeration value="Kb"/>
				<xsd:enumeration value="Mb"/>
				<xsd:enumeration value="Gb"/>
				<xsd:enumeration value="Pb"/>
				<xsd:enumeration value="Eb"/>
			</xsd:restriction>
		</xsd:simpleType>
	</xsd:attribute>
	<xsd:attribute name="phaseUnit" type="xsd:duration"/>
	<xsd:attributeGroup name="intervallicVolume">
		<xsd:attribute ref="urwg:storageUnit" use="optional"/>
		<xsd:attribute ref="urwg:phaseUnit" use="optional"/>
	</xsd:attributeGroup>
	<!--End units attributes -->
	<xsd:attribute name="metric" type="xsd:token"/>
	<xsd:attribute name="type" type="xsd:token"/>
	<!--Simple type definitions used to constrain values of attributes-->
	<xsd:simpleType name="domainNameType">
		<xsd:restriction base="xsd:string">
			<xsd:pattern value="([a-zA-Z0-9][a-zA-Z0-9'\-']*[a-zA-Z0-9]\.)*([a-zA-Z0-9][a-zA-Z0-9'\-']*[a-zA-Z0-9])?"/>
			<xsd:maxLength value="255"/>
		</xsd:restriction>
	</xsd:simpleType>
</xsd:schema>
