<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: sparqlx.xsd,v 1.1 2005/03/24 17:25:21 kclark Exp $ -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
  targetNamespace="http://www.w3.org/2001/sw/DataAccess/sparql-xml-syntax/"
  xmlns:s="http://www.w3.org/2001/sw/DataAccess/sparql-xml-syntax/">
  <xs:element name="rdf-query">
    <xs:complexType>
      <xs:sequence>
        <xs:choice>
          <xs:element ref="s:ask"></xs:element>
          <xs:element ref="s:construct"></xs:element>
          <xs:element ref="s:describe"></xs:element>
          <xs:element ref="s:select-all"></xs:element>
          <xs:element ref="s:select"></xs:element>
        </xs:choice>
        <xs:element minOccurs="0" ref="s:query-pattern"></xs:element>
        <xs:element minOccurs="0" ref="s:order-by"></xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="ask">
    <xs:complexType></xs:complexType>
  </xs:element>
  <xs:element name="construct">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="s:triple-pattern"></xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="describe">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="s:variable"></xs:element>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="s:uri"></xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="select-all">
    <xs:complexType>
      <xs:attribute name="distinct" type="xs:boolean"></xs:attribute>
      <xs:attribute name="limit" type="xs:int"></xs:attribute>
      <xs:attribute name="offset" type="xs:int"></xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:element name="select">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="s:variable"></xs:element>
      </xs:sequence>
      <xs:attribute name="distinct" type="xs:boolean"></xs:attribute>
      <xs:attribute name="limit" type="xs:int"></xs:attribute>
      <xs:attribute name="offset" type="xs:int"></xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:element name="query-pattern">
    <xs:complexType>
      <xs:sequence minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="s:triple-pattern"></xs:element>
        <xs:element ref="s:optional"></xs:element>
        <xs:element ref="s:union"></xs:element>
        <xs:element ref="s:dataset-constraint"></xs:element>
        <xs:element ref="s:filter"></xs:element>
        <xs:element ref="s:query-pattern"></xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="optional">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="s:query-pattern"></xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="union">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="s:query-pattern"></xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="dataset-constraint">
    <xs:complexType>
      <xs:sequence>
        <xs:choice>
          <xs:element ref="s:uri"></xs:element>
          <xs:element ref="s:variable"></xs:element>
          <xs:element ref="s:bnode"></xs:element>
        </xs:choice>
        <xs:element ref="s:query-pattern"></xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="variable">
    <xs:complexType>
      <xs:attribute name="name" use="required" type="xs:NCName"></xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:element name="uri" type="xs:anyURI"></xs:element>
  <xs:element name="triple-pattern">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="s:subject"></xs:element>
        <xs:element ref="s:predicate"></xs:element>
        <xs:element ref="s:object"></xs:element>
        <xs:element minOccurs="0" ref="s:filter"></xs:element>
      </xs:sequence>
      <xs:attribute name="optional" type="xs:boolean"></xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:element name="subject">
    <xs:complexType>
      <xs:choice>
        <xs:element ref="s:bnode"></xs:element>
        <xs:element ref="s:uri"></xs:element>
        <xs:element ref="s:variable"></xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="predicate">
    <xs:complexType>
      <xs:choice>
        <xs:element ref="s:bnode"></xs:element>
        <xs:element ref="s:uri"></xs:element>
        <xs:element ref="s:variable"></xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="object">
    <xs:complexType>
      <xs:choice>
        <xs:element ref="s:bnode"></xs:element>
        <xs:element ref="s:uri"></xs:element>
        <xs:element ref="s:variable"></xs:element>
        <xs:element ref="s:literal"></xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="literal">
    <xs:complexType mixed="true">
      <xs:attribute name="datatype" type="xs:anyURI"></xs:attribute>
      <xs:attribute name="lang" type="xs:NCName"></xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:element name="order-by">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="s:order-condition"></xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="bnode">
    <xs:complexType>
      <xs:attribute name="id" use="required" type="xs:NCName"></xs:attribute>
    </xs:complexType>
  </xs:element>
  <!-- this is temporary until sorting gets sorted out and accepted -->
  <xs:element name="order-condition" type="xs:string"></xs:element>
  <xs:element name="filter" type="s:expression"></xs:element>
  <!-- this is just a temporary stub... it won't be a text element -->
  <xs:complexType name="expression">
    <xs:sequence>
      <xs:element ref="s:expression"></xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="expression" type="xs:string"></xs:element>
</xs:schema>
