<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://docs.oasis-open.org/wsdm/mows-2.xsd" 
        xmlns:mows="http://docs.oasis-open.org/wsdm/mows-2.xsd" 
        xmlns:muws2="http://docs.oasis-open.org/wsdm/muws2-2.xsd" 
        xmlns:muws1="http://docs.oasis-open.org/wsdm/muws1-2.xsd" 
        xmlns:wsa="http://www.w3.org/2005/08/addressing" 
        xmlns:xs="http://www.w3.org/2001/XMLSchema" 
             elementFormDefault="qualified" attributeFormDefault="unqualified">

	<xs:import namespace="http://docs.oasis-open.org/wsdm/muws1-2.xsd" schemaLocation="http://docs.oasis-open.org/wsdm/muws1-2.xsd"/>
	<xs:import namespace="http://docs.oasis-open.org/wsdm/muws2-2.xsd" schemaLocation="http://docs.oasis-open.org/wsdm/muws2-2.xsd"/>
	<xs:import namespace="http://www.w3.org/2005/08/addressing" schemaLocation="http://www.w3.org/2005/08/addressing/ws-addr.xsd"/>

	<!-- MOWS::ManageabilityReferences -->
	<xs:element name="GetManageabilityReferences"/>
	<xs:element name="GetManageabilityReferencesResponse">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="muws1:ManageabilityEndpointReference"
					maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>

	<!-- MOWS::Identification -->
	<xs:element name="EndpointReference" type="wsa:EndpointReferenceType"/>
	<xs:element name="EndpointDescriptions">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="description" type="xs:anyURI"
 					minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:anyAttribute namespace="##other" processContents="lax"/>
		</xs:complexType>
	</xs:element>

	<!--  Operation Properties Attribute Group  -->
	<xs:attributeGroup name="OperationNameGroup">
		<xs:attribute name="operationName" type="xs:NCName" use="required"/>
		<xs:attribute name="portType" type="xs:QName" use="optional"/>
	</xs:attributeGroup>

	<!--  MOWS Operation Operation Status Type   -->
            <xs:complexType name="OperationOperationalStatusType">
			<xs:sequence>
				<xs:element ref="muws2:OperationalStatus" />
				<xs:any namespace="##any" processContents="lax" 
					minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attributeGroup ref="OperationNameGroup"/>
			<xs:anyAttribute namespace="##other" processContents="lax"/>
            </xs:complexType>

	<xs:element name="OperationOperationalStatus" 
                                              type="OperationOperationalStatusType" />

	<!-- MOWS::Metrics -->
	<xs:complexType name="IntegerCounter">
		<xs:simpleContent>
			<xs:extension base="xs:nonNegativeInteger">
				<xs:attributeGroup ref="muws2:MetricAttributes"/>
				<xs:anyAttribute namespace="##other" processContents="lax"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>

	<xs:complexType name="DurationMetric">
		<xs:simpleContent>
			<xs:extension base="xs:duration">
				<xs:attributeGroup ref="muws2:MetricAttributes"/>
				<xs:anyAttribute namespace="##other" processContents="lax"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>

	<xs:complexType name="OperationIntegerCounter">
		<xs:simpleContent>
			<xs:extension base="mows:IntegerCounter">
				<xs:attributeGroup ref="OperationNameGroup"/>
			</xs:extension>
		</xs:simpleContent> 
	</xs:complexType>

	<xs:complexType name="OperationDurationMetric">
		<xs:simpleContent>
			<xs:extension base="mows:DurationMetric">
				<xs:attributeGroup ref="OperationNameGroup"/>
			</xs:extension>
		</xs:simpleContent> 
	</xs:complexType>

	<xs:element name="NumberOfRequests" type="mows:IntegerCounter"/>
	<xs:element name="NumberOfSuccessfulRequests" type="mows:IntegerCounter"/>
	<xs:element name="NumberOfFailedRequests" type="mows:IntegerCounter"/>
	<xs:element name="ServiceTime" type="mows:DurationMetric"/>
	<xs:element name="MaxResponseTime" type="mows:DurationMetric"/>
	<xs:element name="LastResponseTime" type="mows:DurationMetric"/>
	<xs:element name="MaxRequestSize" type="mows:IntegerCounter"/>
	<xs:element name="LastRequestSize" type="mows:IntegerCounter"/>
	<xs:element name="MaxReponseSize" type="mows:IntegerCounter"/>
	<xs:element name="LastReponseSize" type="mows:IntegerCounter"/>

	<!-- MOWS::Operation Metrics -->
	<xs:complexType name="OperationMetricType">
			<xs:sequence>
				<xs:element ref="NumberOfRequests" minOccurs="0"/>
				<xs:element ref="NumberOfSuccessfulRequests" 
					minOccurs="0"/>
				<xs:element ref="NumberofFailedRequests" minOccurs="0"/>
				<xs:element ref="ServiceTime" minOccurs="0"/>
				<xs:element ref="MaxResponseTime" minOccurs="0"/>
				<xs:element ref="LastResponseTime" minOccurs="0"/>
				<xs:element ref="MaxRequestSize" minOccurs="0"/>
				<xs:element ref="LastRequestSize" minOccurs="0"/>
				<xs:element ref="MaxResponseSize" minOccurs="0"/>
				<xs:element ref="LastResponseSize" minOccurs="0"/>
				<xs:any namespace="##any" processContents="lax" 
					minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attributeGroup ref="OperationNameGroup" />
			<xs:anyAttribute namespace="##other" processContents="lax"/>
	</xs:complexType>

	<xs:element name="OperationMetrics" type="OperationMetricType"/>

	<!-- MOWS::OperationalState -->
	<xs:complexType name="OperationalStateType">
		<xs:complexContent>
			<xs:extension base="muws2:StateType"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:element name="UpState">
		<xs:complexType>
			<xs:complexContent>
				<xs:restriction base="mows:OperationalStateType"/>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="IdleState">
		<xs:complexType>
			<xs:complexContent>
				<xs:restriction base="mows:OperationalStateType">
					<xs:sequence>
						<xs:element ref="mows:UpState"/>
					</xs:sequence>
				</xs:restriction>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="BusyState">
		<xs:complexType>
			<xs:complexContent>
				<xs:restriction base="mows:OperationalStateType">
					<xs:sequence>
						<xs:element ref="mows:UpState"/>
					</xs:sequence>
				</xs:restriction>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="DownState">
		<xs:complexType>
			<xs:complexContent>
				<xs:restriction base="mows:OperationalStateType"/>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="StoppedState">
		<xs:complexType>
			<xs:complexContent>
				<xs:restriction base="mows:OperationalStateType">
					<xs:sequence>
						<xs:element ref="mows:DownState"/>
					</xs:sequence>
				</xs:restriction>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="CrashedState">
		<xs:complexType>
			<xs:complexContent>
				<xs:restriction base="mows:OperationalStateType">
					<xs:sequence>
						<xs:element ref="mows:DownState"/>
					</xs:sequence>
				</xs:restriction>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="SaturatedState">
		<xs:complexType>
			<xs:complexContent>
				<xs:restriction base="mows:OperationalStateType">
					<xs:sequence>
						<xs:element ref="mows:DownState"/>
					</xs:sequence>
				</xs:restriction>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>

	<xs:element name="CurrentOperationalState" type="mows:OperationalStateType"/>
	<xs:element name="LastOperationalStateTransition" 
		type="muws2:StateTransitionType"/>

	<!-- MOWS::RequestProcessingState -->
	<xs:complexType name="RequestProcessingStateType">
		<xs:complexContent>
			<xs:extension base="muws2:StateType"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:element name="RequestReceivedState">
		<xs:complexType>
			<xs:complexContent>
				<xs:restriction base="mows:RequestProcessingStateType"/>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="RequestProcessingState">
		<xs:complexType>
			<xs:complexContent>
				<xs:restriction base="mows:RequestProcessingStateType"/>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="RequestCompletedState">
		<xs:complexType>
			<xs:complexContent>
				<xs:restriction base="mows:RequestProcessingStateType"/>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="RequestFailedState">
		<xs:complexType>
			<xs:complexContent>
				<xs:restriction base="mows:RequestProcessingStateType"/>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:complexType name="MessageContentNotIncludedFlag"/>
	<xs:simpleType name="MessageSizeUnitType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="bit"/>
			<xs:enumeration value="byte"/>
			<xs:enumeration value="word"/>
			<xs:enumeration value="dword"/>
			<xs:enumeration value="qword"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="MessageContentSizeType">
		<xs:simpleContent>
			<xs:extension base="xs:positiveInteger">
				<xs:attribute name="Unit" 
					type="mows:MessageSizeUnitType" use="required"/>
				<xs:anyAttribute namespace="##other" processContents="lax"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<xs:complexType name="MessageContentType">
		<xs:sequence>
			<xs:element name="Size" 
				type="mows:MessageContentSizeType" minOccurs="0"/>
			<xs:choice>
				<xs:element name="NotIncluded" 
					type="mows:MessageContentNotIncludedFlag"/>
				<xs:element name="Text" type="xs:string"/>
				<xs:element name="Binary" type="xs:base64Binary"/>
				<xs:element name="Xml" 
					type="mows:AnyXmlContentsType"/>
			</xs:choice>
			<xs:any namespace="##other" processContents="lax" 
				minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:anyAttribute namespace="##other" processContents="lax"/>
	</xs:complexType>
	<xs:complexType name="AnyXmlContentsType">
		<xs:sequence>
			<xs:any namespace="##any" processContents="lax" 
				minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:anyAttribute namespace="##any" processContents="lax"/>
	</xs:complexType>
	<xs:complexType name="MessageInformationType">
		<xs:sequence>
			<xs:element name="TransportInformation" 
				type="mows:AnyXmlContentsType" minOccurs="0"/>
			<xs:element name="Message" type="mows:MessageContentType"/>
			<xs:any namespace="##any" processContents="lax" 
				minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:anyAttribute namespace="##any" processContents="lax"/>
	</xs:complexType>
	<xs:complexType name="RequestProcessingStateInformationType">
	  <xs:sequence>
	    <xs:element ref="muws2:StateTransition" maxOccurs="unbounded"/>
	  </xs:sequence>
	</xs:complexType>
	<xs:element name="RequestProcessingNotification">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Request" 
					type="mows:MessageInformationType"
					minOccurs="0"/>
				<xs:element name="Reply" 
					type="mows:MessageInformationType"
					minOccurs="0"/>
				<xs:element name="StateInformation" 
					type="mows:RequestProcessingStateInformationType"/>
				<xs:any namespace="##any" processContents="lax"
 					minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attribute name="CurrentTime" type="xs:dateTime" use="required"/>
			<xs:anyAttribute namespace="##any" processContents="lax"/>
		</xs:complexType>
	</xs:element>
	<xs:simpleType name="IPV4AddressType">
		<xs:restriction base="xs:hexBinary">
			<xs:length value="8" fixed="true"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:element name="IPV4Address" type="mows:IPV4AddressType"/>
	<xs:simpleType name="IPV6AddressType">
		<xs:restriction base="xs:hexBinary">
			<xs:length value="32" fixed="true"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:element name="IPV6Address" type="mows:IPV6AddressType"/>
	<xs:simpleType name="TcpIpDirectionType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="to"/>
			<xs:enumeration value="from"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="TcpIpProtocolType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="TCP"/>
			<xs:enumeration value="UDP"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:element name="TcpIpInfo">
		<xs:complexType>
			<xs:sequence>
				<xs:choice>
					<xs:element ref="mows:IPV4Address"/>
					<xs:element ref="mows:IPV6Address"/>
				</xs:choice>
				<xs:any namespace="##any" processContents="lax"
					 minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attribute name="Direction" type="mows:TcpIpDirectionType"
				 use="required"/>
			<xs:attribute name="Port" type="xs:positiveInteger" use="required"/>
			<xs:attribute name="Protocol" type="mows:TcpIpProtocolType"
				 use="required"/>
			<xs:anyAttribute namespace="##any" processContents="lax"/>
		</xs:complexType>
	</xs:element>
</xs:schema>

<!--   
                                       SCHEMA COPY Material
Copy and paste element references below into the schema of a resource properties document.
These references insure that the correct minOccurs/maxOccurs attributes are specified in a resource property document schema.

NOTE: You must import the MOWS schema namespace (mows).

        **    Endpoint Identification Properties    **
	<xs:element ref="mows:EndpointReference"/>
	<xs:element ref="mows:EndpointDescriptions" minOccurs="0"/>

       **    MOWS Metric Properties    **
	<xs:element ref="mows:NumberOfRequests" minOccurs="0"/>
	<xs:element ref="mows:NumberOfFailedRequests" minOccurs="0"/>
	<xs:element ref="mows:NumberOfSuccessfulRequests"  minOccurs="0"/>
	<xs:element ref="mows:ServiceTime" minOccurs="0"/>
	<xs:element ref="mows:MaxResponseTime" minOccurs="0"/>
	<xs:element ref="mows:LastResponseTime" minOccurs="0"/>
	<xs:element ref="mows:MaxRequestSize" minOccurs="0"/>
	<xs:element ref="mows:LastRequestSize" minOccurs="0"/>
	<xs:element ref="mows:MaxResponseSize" minOccurs="0"/>
	<xs:element ref="mows:LastResponseSize" minOccurs="0"/>

       **    MOWS Operation Metric Property    **
	<xs:element ref="mows:OperationMetrics" minOccurs="0" maxOccurs="unbounded"/>

       **    MOWS Operation Operational Status Property    **
	<xs:element ref="mows:OperationOperationalStatus" 
                                         minOccurs="0" maxOccurs="unbounded"/>

       **     Operational State Properties    **
<xs:element ref="mows:CurrentOperationalState"/>
	<xs:element ref="mows:LastOperationalStateTransition" minOccurs="0"/>

-->


