<!-- ###################################################### -->
<!-- XML Schema specification of query languages supported  -->
<!-- by the firefish implementation of the 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"
	xmlns:firefish="http://dsd.lbl.gov/firefish-1.0"
	targetNamespace="http://dsd.lbl.gov/firefish-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:package name="gov.lbl.dsd.firefish.query.xml"/> -->
				<jxb:nameXmlTransform>
					<!-- 
					<jxb:typeName suffix="Generated"/>
					-->
					<jxb:elementName suffix="Element"/>
					<jxb:modelGroupName suffix="Generated"/>
				</jxb:nameXmlTransform>
			</jxb:schemaBindings>
		</xsd:appinfo>
	</xsd:annotation>
	
	<xsd:import namespace="http://dsd.lbl.gov/p2pio-1.0" schemaLocation="p2pio.xsd"/>
	<xsd:element name="xPathQuery" type="firefish:XPathQueryType"/>
	<xsd:element name="xQuery" type="firefish:XQueryType"/>
	<xsd:element name="listNumbersQuery" type="firefish:ListNumbersQueryType"/>
	<xsd:element name="publishQuery" type="firefish:PublishQueryType"/>
	<xsd:element name="regexQuery" type="firefish:RegexQueryType"/>
	<xsd:element name="multiQuery" type="firefish:MultiQueryType"/>
	<xsd:element name="p2pQuery" type="firefish:P2PQueryType"/>
	<xsd:element name="nameValueSet" type="firefish:NameValueSetType"/>
	<xsd:element name="nameValue" type="firefish:NameValueType"/>
	<xsd:element name="stringList" type="firefish:StringListType"/>
	
	<xsd:complexType name="XPathQueryType">
		<xsd:sequence>
			<xsd:element name="expression" type="xsd:string"/>
			<xsd:element name="namespaces" type="firefish:NameValueSetType" minOccurs="0"/>
		</xsd:sequence>
	</xsd:complexType>
	
	<xsd:complexType name="XQueryType">
		<xsd:sequence>
			<xsd:element name="expression" type="xsd:string"/>
			<xsd:element name="params" type="firefish:NameValueSetType" minOccurs="0"/>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="ListNumbersQueryType">
		<xsd:sequence>
			<xsd:element name="size" type="xsd:unsignedInt"/>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="PublishQueryType">
		<xsd:sequence>
			<xsd:element name="itemSet" type="p2pio:ItemSetType"/>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="RegexQueryType">
		<xsd:sequence>
			<xsd:element name="expression" type="xsd:string"/>
			<xsd:element name="groupNames" type="firefish:StringListType" minOccurs="0"/>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="MultiQueryType">
		<xsd:sequence>
			<xsd:element name="query" type="firefish:QueryType" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="NameValueSetType">
		<xsd:sequence>
			<xsd:element name="entry" type="firefish:NameValueType" minOccurs="0" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>
	
	<xsd:complexType name="NameValueType">
		<xsd:sequence>
			<xsd:element name="name" type="xsd:string"/>
			<xsd:element name="value" type="xsd:string"/>
		</xsd:sequence>
	</xsd:complexType>
	
	<xsd:complexType name="StringListType">
		<xsd:sequence>
			<xsd:element name="string" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>
	
	<xsd:complexType name="QueryType">
		<xsd:choice>
			<xsd:element ref="firefish:xPathQuery"/>
			<xsd:element ref="firefish:xQuery"/>
			<xsd:element ref="firefish:listNumbersQuery"/>
			<xsd:element ref="firefish:publishQuery"/>
			<xsd:element ref="firefish:regexQuery"/>
		</xsd:choice>
	</xsd:complexType>
	
	<xsd:complexType name="P2PQueryType">
		<xsd:sequence>
			<xsd:element name="dataSourceQuery" type="p2pio:AnyQueryType"/>
			<xsd:element name="streamQuery" type="p2pio:AnyQueryType" minOccurs="0"/>
			<xsd:element name="cgiCommand" type="xsd:string" minOccurs="0"/>
		</xsd:sequence>
		<xsd:attribute name="mergeOperator">
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:enumeration value="union"/>
					<xsd:enumeration value="concat"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
	</xsd:complexType>

	<!--
	<xsd:complexType name="XPathQueryType">
		<xsd:complexContent>
		   <xsd:extension base="firefish:QueryType">
			   <xsd:sequence>
				   <xsd:element name="expression" type="xsd:string"/>
				   <xsd:element name="namespaces" type="firefish:NameValueSetType" minOccurs="0"/>
			   </xsd:sequence>
		   </xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	-->
</xsd:schema>
