<?xml version="1.0" encoding="UTF-8"?>
<!--
  
  RELAX NG Schema for SPARQL Variable Binding Results XML Format
  
  This XML schema is experimental and may change at any time.
  
  Dave Beckett 2004-12-08
  
  
-->
<grammar xmlns:res="http://www.w3.org/2001/sw/DataAccess/rf1/result" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  <start>
    <ref name="sparql"/>
  </start>
  <define name="xmllang">
    <attribute name="xml:lang"/>
  </define>
  <define name="sparql">
    <element name="res:sparql">
      <optional>
        <ref name="xmllang"/>
      </optional>
      <ref name="head"/>
      <ref name="results"/>
    </element>
  </define>
  <define name="head">
    <element name="res:head">
      <zeroOrMore>
        <ref name="varName"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="varName">
    <element name="res:variable">
      <ref name="nameAttr"/>
    </element>
  </define>
  <define name="nameAttr">
    <attribute name="name">
      <data type="NMTOKEN"/>
    </attribute>
  </define>
  <define name="results">
    <element name="res:results">
      <zeroOrMore>
        <ref name="result"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="result">
    <element name="res:result">
      <optional>
        <ref name="xmllang"/>
      </optional>
      <zeroOrMore>
        <ref name="var"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="var">
    <element>
      <nsName ns="http://www.w3.org/2001/sw/DataAccess/rf1/result"/>
      <optional>
        <ref name="xmllang"/>
      </optional>
      <optional>
        <ref name="uriAttr"/>
      </optional>
      <optional>
        <ref name="datatypeAttr"/>
      </optional>
      <optional>
        <ref name="bnodeidAttr"/>
      </optional>
      <optional>
        <ref name="boundAttr"/>
      </optional>
      <ref name="literal"/>
    </element>
  </define>
  <define name="uriAttr">
    <attribute name="uri">
      <ref name="URI-reference"/>
    </attribute>
  </define>
  <define name="datatypeAttr">
    <attribute name="datatype">
      <ref name="URI-reference"/>
    </attribute>
  </define>
  <define name="bnodeidAttr">
    <attribute name="bnodeid">
      <data type="NMTOKEN"/>
    </attribute>
  </define>
  <define name="boundAttr">
    <attribute name="bound">
      <value>false</value>
    </attribute>
  </define>
  <define name="URI-reference">
    <data type="anyURI"/>
  </define>
  <define name="literal">
    <data type="string" datatypeLibrary=""/>
  </define>
</grammar>
