<!-- ############################################### -->
<!-- XML Schema specification of P2PIO protocol      -->
<!-- $Author: hoschek3 $, $Revision: 1.2 $, $Date: 2004/01/30 01:01:05 $ -->
<!-- ############################################### -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
	xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns:p2pio="http://dsd.lbl.gov/p2pio-1.0"
	targetNamespace="http://dsd.lbl.gov/p2pio-1.0" elementFormDefault="qualified"
	jxb:extensionBindingPrefixes="xjc" jxb:version="1.0">
		
	<xsd:annotation>
		<xsd:appinfo>
			<jxb:schemaBindings>
				<jxb:package name="gov.lbl.dsd.p2pio.jaxb"/>
				<jxb:nameXmlTransform>
					<!-- 
					<jxb:typeName suffix="Generated"/>
					-->
					<jxb:elementName suffix="Element"/>
					<jxb:modelGroupName suffix="Generated"/>
				</jxb:nameXmlTransform>
			</jxb:schemaBindings>
		</xsd:appinfo>
	</xsd:annotation>
	
	<xsd:element name="open" type="p2pio:OpenType"/>
	<xsd:element name="receive" type="p2pio:ReceiveType"/>
	<xsd:element name="send" type="p2pio:SendType"/>
	<xsd:element name="finalSend" type="p2pio:FinalSendType"/>
	<xsd:element name="close" type="p2pio:CloseType"/>
	<xsd:element name="invite" type="p2pio:InviteType"/>
	<xsd:element name="ok" type="p2pio:OkType"/>
	<xsd:element name="error" type="p2pio:ErrorType"/>
	<xsd:element name="itemSet" type="p2pio:ItemSetType"/>
	<xsd:element name="scope" type="p2pio:ScopeType"/>
	<xsd:element name="stillOpen" type="p2pio:StillOpenType"/>
	<xsd:element name="transactionID" type="xsd:string"/>
	
	<xsd:complexType name="OpenType">
		<xsd:sequence>
			<xsd:element name="transactionID" type="xsd:string"/>
			<xsd:element name="query" type="p2pio:AnyQueryType">
				<!--
				<xsd:complexType>
					<xsd:sequence>
						<xsd:any processContents="lax" maxOccurs="unbounded">
							<xsd:annotation>
								<xsd:appinfo>
									<xjc:dom/>
								</xsd:appinfo>
							</xsd:annotation>
						</xsd:any>
					</xsd:sequence>
				</xsd:complexType>
				-->
			</xsd:element>
			<xsd:element name="scope" type="p2pio:ScopeType"/>
			<xsd:element name="responseMode" type="p2pio:ResponseModeType"/>
		</xsd:sequence>
	</xsd:complexType>
	
	<xsd:complexType name="AnyQueryType">
		<xsd:sequence>
			<xsd:any processContents="lax">
				<xsd:annotation>
					<xsd:appinfo>
						<xjc:dom/>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:any>
		</xsd:sequence>
	</xsd:complexType>
	
	<xsd:complexType name="ResponseModeType">
		<xsd:choice>
			<xsd:element name="routedResponseMode">
				<xsd:complexType/>
			</xsd:element>
			<xsd:element name="directResponseMode">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="locator" type="p2pio:LocatorType"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
		</xsd:choice>
	</xsd:complexType>
	
	<xsd:complexType name="ReceiveType">
		<xsd:sequence>
			<xsd:element name="transactionID" type="xsd:string"/>
			<xsd:element name="min" type="xsd:positiveInteger"/>
			<xsd:element name="max" type="xsd:positiveInteger"/>
			<xsd:element name="timeout" type="xsd:dateTime" minOccurs="0"/>
		</xsd:sequence>
		<xsd:attribute name="mode">
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:enumeration value="single"/>
					<xsd:enumeration value="multi"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
	</xsd:complexType>
	
	<xsd:complexType name="SendType">
		<xsd:sequence>
			<xsd:element name="transactionID" type="xsd:string"/>
			<xsd:element name="itemSet" type="p2pio:ItemSetType"/>
		</xsd:sequence>
	</xsd:complexType>
	
	<xsd:complexType name="FinalSendType">
		<xsd:sequence>
			<xsd:element name="transactionID" type="xsd:string"/>
			<xsd:element name="itemSet" type="p2pio:ItemSetType"/>
			<xsd:element name="isStillOpen" type="p2pio:StillOpenType" minOccurs="0"/>
		</xsd:sequence>
	</xsd:complexType>
	
	<xsd:complexType name="CloseType">
		<xsd:sequence>
			<xsd:element name="transactionID" type="xsd:string"/>
		</xsd:sequence>
	</xsd:complexType>
	
	<xsd:complexType name="InviteType">
		<xsd:sequence>
			<xsd:element name="transactionID" type="xsd:string"/>
			<xsd:element name="locator" type="p2pio:LocatorType" minOccurs="0"/>
			<xsd:element name="isStillOpen" type="p2pio:StillOpenType"/>
		</xsd:sequence>
	</xsd:complexType>
	
	<xsd:complexType name="OkType">
		<xsd:sequence>
			<xsd:element name="transactionID" type="xsd:string"/>
		</xsd:sequence>
	</xsd:complexType>
	
	<xsd:complexType name="ErrorType">
		<xsd:sequence>
			<xsd:element name="transactionID" type="xsd:string"/>
			<xsd:element name="code" type="p2pio:ErrorCodeType"/>
			<xsd:element name="codeAsText" type="xsd:string"/>
			<xsd:element name="cause" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>
	
	<xsd:complexType name="ItemSetType">
		<xsd:sequence>
			<xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:appinfo>
						<xjc:dom/>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:any>
			<!--
			<xsd:any minOccurs="0" maxOccurs="unbounded"/>
			<xsd:element name="any" type="xsd:anyType" minOccurs="0" maxOccurs="unbounded"/>
			-->
		</xsd:sequence>
	</xsd:complexType>
	
	<!--
	<xsd:complexType name="NeighborSelectionType">
		<xsd:sequence>
			<xsd:any processContents="lax" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:appinfo>
						<xjc:dom/>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:any>
		</xsd:sequence>
	</xsd:complexType>
	-->
		
	<xsd:complexType name="ExtensionType">
		<xsd:sequence>
			<xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:appinfo>
						<xjc:dom/>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:any>
		</xsd:sequence>
	</xsd:complexType>
	
	<xsd:complexType name="ScopeType">
		<xsd:sequence>
			<xsd:element name="timeout" type="xsd:dateTime"/>
			<xsd:element name="maxHops" type="xsd:unsignedInt"/>
			<xsd:element name="neighborSelection" type="p2pio:AnyQueryType" minOccurs="0">
				<!--
				<xsd:complexType>
					<xsd:sequence>
						<xsd:any processContents="lax" maxOccurs="unbounded">
							<xsd:annotation>
								<xsd:appinfo>
									<xjc:dom/>
								</xsd:appinfo>
							</xsd:annotation>
						</xsd:any>
					</xsd:sequence>
				</xsd:complexType>
				-->
			</xsd:element>
			<xsd:element name="extension" type="p2pio:ExtensionType">
				<!--
				<xsd:complexType>
					<xsd:sequence>
						<xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded">
							<xsd:annotation>
								<xsd:appinfo>
									<xjc:dom/>
								</xsd:appinfo>
							</xsd:annotation>
						</xsd:any>
					</xsd:sequence>
				</xsd:complexType>
				-->
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>
	
	<xsd:complexType name="LocatorType">
		<xsd:sequence>
			<xsd:element name="endpoint" type="xsd:anyURI" minOccurs="1" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>
	
	<xsd:complexType name="StillOpenType">
		<xsd:sequence>
			<xsd:element name="locallyAvailable" type="xsd:unsignedInt" minOccurs="0"/>
			<xsd:element name="globallyAvailable" type="xsd:unsignedInt" minOccurs="0"/>
		</xsd:sequence>
	</xsd:complexType>
	
	<xsd:simpleType name="ErrorCodeType">
		<xsd:restriction base="xsd:unsignedInt">
			<xsd:minInclusive value="100"/>
			<xsd:maxInclusive value="999"/>
		</xsd:restriction>
	</xsd:simpleType>
	
</xsd:schema>
