﻿<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://docs.oasis-open.org/wsdm/2004/12/mows/wsdm-mows.xsd" xmlns:mows-xs="http://docs.oasis-open.org/wsdm/2004/12/mows/wsdm-mows.xsd" xmlns:muws-xs2="http://docs.oasis-open.org/wsdm/2004/12/muws/wsdm-muws-part2.xsd" xmlns:muws-xs1="http://docs.oasis-open.org/wsdm/2004/12/muws/wsdm-muws-part1.xsd" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">

	<xs:import namespace="http://docs.oasis-open.org/wsdm/2004/12/muws/wsdm-muws-part1.xsd" schemaLocation="http://docs.oasis-open.org/wsdm/2004/12/muws/wsdm-muws-part1.xsd"/>
	<xs:import namespace="http://docs.oasis-open.org/wsdm/2004/12/muws/wsdm-muws-part2.xsd" schemaLocation="http://docs.oasis-open.org/wsdm/2004/12/muws/wsdm-muws-part2.xsd"/>
	<xs:import namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing" schemaLocation="http://schemas.xmlsoap.org/ws/2004/08/addressing"/>

	<!-- MOWS::ManageabilityReferences -->
	<xs:element name="GetManageabilityReferences"/>
	<xs:element name="GetManageabilityReferencesResponse">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="muws-xs1: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>

	<xs:complexType name="EndpointIdentificationPropertiesType">
		<xs:sequence>
			<xs:element ref="mows-xs:EndpointReference"/>
			<xs:element ref="mows-xs:EndpointDescriptions" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:element name="EndpointIdentificationProperties" 
		type="mows-xs:EndpointIdentificationPropertiesType"/>

	<!-- MOWS::Metrics -->
	<xs:complexType name="IntegerCounter">
		<xs:simpleContent>
			<xs:extension base="xs:nonNegativeInteger">
				<xs:attributeGroup ref="muws-xs2: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="muws-xs2:MetricAttributes"/>
				<xs:anyAttribute namespace="##other" processContents="lax"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>

	<xs:element name="NumberOfRequests" type="mows-xs:IntegerCounter"/>
	<xs:element name="NumberOfSuccessfulRequests" type="mows-xs:IntegerCounter"/>
	<xs:element name="NumberOfFailedRequests" type="mows-xs:IntegerCounter"/>
	<xs:element name="ServiceTime" type="mows-xs:DurationMetric"/>
	<xs:element name="MaxResponseTime" type="mows-xs:DurationMetric"/>
	<xs:element name="LastResponseTime" type="mows-xs:DurationMetric"/>

	<xs:complexType name="EndpointMetricsPropertiesType">
		<xs:sequence>
			<xs:element ref="mows-xs:NumberOfRequests" minOccurs="0"/>
			<xs:element ref="mows-xs:NumberOfFailedRequests" minOccurs="0"/>
			<xs:element ref="mows-xs:NumberOfSuccessfulRequests"
				 minOccurs="0"/>
			<xs:element ref="mows-xs:ServiceTime" minOccurs="0"/>
			<xs:element ref="mows-xs:MaxResponseTime" minOccurs="0"/>
			<xs:element ref="mows-xs:LastResponseTime" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:element name="EndpointMetricsProperties" 
		type="mows-xs:EndpointMetricsPropertiesType"/>

	<!-- MOWS::OperationalState -->
	<xs:complexType name="OperationalStateType">
		<xs:complexContent>
			<xs:extension base="muws-xs2:StateType"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:element name="UpState">
		<xs:complexType>
			<xs:complexContent>
				<xs:restriction base="mows-xs:OperationalStateType"/>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="IdleState">
		<xs:complexType>
			<xs:complexContent>
				<xs:restriction base="mows-xs:OperationalStateType">
					<xs:sequence>
						<xs:element ref="mows-xs:UpState"/>
					</xs:sequence>
				</xs:restriction>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="BusyState">
		<xs:complexType>
			<xs:complexContent>
				<xs:restriction base="mows-xs:OperationalStateType">
					<xs:sequence>
						<xs:element ref="mows-xs:UpState"/>
					</xs:sequence>
				</xs:restriction>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="DownState">
		<xs:complexType>
			<xs:complexContent>
				<xs:restriction base="mows-xs:OperationalStateType"/>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="StoppedState">
		<xs:complexType>
			<xs:complexContent>
				<xs:restriction base="mows-xs:OperationalStateType">
					<xs:sequence>
						<xs:element ref="mows-xs:DownState"/>
					</xs:sequence>
				</xs:restriction>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="CrashedState">
		<xs:complexType>
			<xs:complexContent>
				<xs:restriction base="mows-xs:OperationalStateType">
					<xs:sequence>
						<xs:element ref="mows-xs:DownState"/>
					</xs:sequence>
				</xs:restriction>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="SaturatedState">
		<xs:complexType>
			<xs:complexContent>
				<xs:restriction base="mows-xs:OperationalStateType">
					<xs:sequence>
						<xs:element ref="mows-xs:DownState"/>
					</xs:sequence>
				</xs:restriction>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>

	<xs:element name="CurrentOperationalState" type="mows-xs:OperationalStateType"/>
	<xs:element name="LastOperationalStateTransition" 
		type="muws-xs2:StateTransitionType"/>

	<xs:complexType name="EndpointOperationalStatePropertiesType">
		<xs:sequence>
			<xs:element ref="mows-xs:CurrentOperationalState"/>
			<xs:element ref="mows-xs:LastOperationalStateTransition"
				 minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:element name="EndpointOperationalStateProperties" 
		type="mows-xs:EndpointOperationalStatePropertiesType"/>

	<!-- MOWS::RequestProcessingState -->
	<xs:complexType name="RequestProcessingStateType">
		<xs:complexContent>
			<xs:extension base="muws-xs2:StateType"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:element name="RequestReceivedState">
		<xs:complexType>
			<xs:complexContent>
				<xs:restriction base="mows-xs:RequestProcessingStateType"/>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="RequestProcessingState">
		<xs:complexType>
			<xs:complexContent>
				<xs:restriction base="mows-xs:RequestProcessingStateType"/>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="RequestCompletedState">
		<xs:complexType>
			<xs:complexContent>
				<xs:restriction base="mows-xs:RequestProcessingStateType"/>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="RequestFailedState">
		<xs:complexType>
			<xs:complexContent>
				<xs:restriction base="mows-xs: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-xs: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-xs:MessageContentSizeType" minOccurs="0"/>
			<xs:choice>
				<xs:element name="NotIncluded" 
					type="mows-xs:MessageContentNotIncludedFlag"/>
				<xs:element name="Text" type="xs:string"/>
				<xs:element name="Binary" type="xs:base64Binary"/>
				<xs:element name="Xml" 
					type="mows-xs: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-xs:AnyXmlContentsType" minOccurs="0"/>
			<xs:element name="Message" type="mows-xs: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="muws-xs2:StateTransition" maxOccurs="unbounded"/>
	  </xs:sequence>
	</xs:complexType>
	<xs:element name="RequestProcessingNotification">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Request" 
					type="mows-xs:MessageInformationType"
					minOccurs="0"/>
				<xs:element name="Reply" 
					type="mows-xs:MessageInformationType"
					minOccurs="0"/>
				<xs:element name="StateInformation" 
					type="mows-xs: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-xs: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-xs: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-xs:IPV4Address"/>
					<xs:element ref="mows-xs:IPV6Address"/>
				</xs:choice>
				<xs:any namespace="##any" processContents="lax"
					 minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attribute name="Direction" type="mows-xs:TcpIpDirectionType"
				 use="required"/>
			<xs:attribute name="Port" type="xs:positiveInteger" use="required"/>
			<xs:attribute name="Protocol" type="mows-xs:TcpIpProtocolType"
				 use="required"/>
			<xs:anyAttribute namespace="##any" processContents="lax"/>
		</xs:complexType>
	</xs:element>
</xs:schema>