<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE spec SYSTEM "../shared/xmlspec.dtd" [
	<!ENTITY base.uri "http://www.w3.org/TR/2010/">
	<!ENTITY maturity.level "WD">
	<!ENTITY doc.shortname "sparql11-federated-query">
	<!ENTITY draft.year "2011">
	<!ENTITY draft.month.name "November">
	<!ENTITY draft.month "11">
	<!ENTITY draft.day "10">
	<!ENTITY iso6.doc.date "&draft.year;&draft.month;&draft.day;">
	<!ENTITY doc.ident "&maturity.level;-&doc.shortname;-&iso6.doc.date;">
	<!ENTITY this.version "&base.uri;&doc.ident;">
<!--	<!ENTITY xml.version "&doc.ident;.xml">
	<!ENTITY review.version "&doc.ident;-review.html">  
	<!ENTITY pdf.version "&doc.ident;.pdf">
	<!ENTITY errataloc "">
	<!ENTITY preverrataloc "">
	<!ENTITY translationloc "http://www.w3.org/2003/03/Translations/byTechnology?technology=&doc.shortname;">   -->
	<!ENTITY impreploc "">
	<!ENTITY versionOfSPARQL "1.1">
	<!ENTITY WebSGML "WebSGML Adaptations Annex to ISO 8879">
	<!ENTITY nbsp "&#160;">
	<!ENTITY ndash "&#x2013;">
	<!ENTITY mdash "&#x2014;">
	<!ENTITY eacute "&#xe9;">
	<!ENTITY aacute "&#xe1;">
	<!ENTITY udotdot "&#xfc;">
	<!ENTITY mu "&#x3bc;">
	<!ENTITY Psi "&#x3a8;">
	<!ENTITY Omega "&#x3a9;">
	<!ENTITY prime "&#x2032;">
	<!ENTITY cup "&#8746;">
	<!ENTITY magicents "<code>amp</code>,
<code>lt</code>,
<code>gt</code>,
<code>apos</code>,
<code>quot</code>">
	<!ENTITY may "may">
	<!ENTITY MAY "<rfc2119>MAY</rfc2119>">
	<!ENTITY SHOULD "<rfc2119>SHOULD</rfc2119>">
	<!ENTITY MUST "<rfc2119>MUST</rfc2119>">
	<!ENTITY % local.common.att "xml:lang    CDATA  #IMPLIED">
]>


<?xml-stylesheet type="text/xsl" href="../shared/REC-xml.xsl"?>
<spec w3c-doctype="wd" xml:lang="en">
<!--
Notes on preparation of SPARQL 1.1
	
-->
	<header>
		<title>SPARQL &versionOfSPARQL; Federated Query</title>
		<w3c-designation>&doc.ident;</w3c-designation>
		<w3c-doctype>W3C Working Draft</w3c-doctype>
    <pubdate>
      <day>&draft.day;</day>
      <month>&draft.month.name;</month>
      <year>&draft.year;</year>
    </pubdate>
    <publoc>
      <loc href="&this.version;/">&this.version;/</loc>
    </publoc>
    <latestloc>
      <loc href="http://www.w3.org/TR/&doc.shortname;/">http://www.w3.org/TR/&doc.shortname;/</loc>
    </latestloc>
		<prevlocs>
   <!-- @@FPWD loc href="http://www.w3.org/TR/2009/WD-rdf-sparql-query-20090915/">http://www.w3.org/TR/2009/WD-rdf-sparql-query-20090915/</loc 
			<loc href="http://www.w3.org/TR/2008/REC-rdf-sparql-query-20080115/">http://www.w3.org/TR/2008/REC-rdf-sparql-query-20080115/</loc>
			<loc href="http://www.w3.org/TR/2009/WD-sparql-federation-20091022/">http://www.w3.org/TR/2009/WD-sparql-federation-20091022/</loc> -->
<!--loc href="http://www.w3.org/TR/2010/WD-sparql11-federated-query-20111025/">http://www.w3.org/TR/2011/WD-sparql11-federated-query-20111110/</loc-->


<loc href="http://www.w3.org/TR/2010/WD-sparql11-federated-query-20100601/">http://www.w3.org/TR/2010/WD-sparql11-federated-query-20100601/</loc>		
<!-- loc href="http://www.w3.org/TR/2010/WD-sparql11-federated-query-20110607/">http://www.w3.org/TR/2010/WD-sparql11-federated-query-20110607/</loc-->
</prevlocs>
		<authlist>
			<author role="Editor">
				<name>Eric Prud'hommeaux</name>
				<affiliation>W3C</affiliation>
				<email href="mailto:eric@w3.org">eric@w3.org</email>
			</author>
			<author role="Editor">
				<name>Carlos Buil-Aranda</name>
				<affiliation>Universidad Polit&eacute;cnica de Madrid</affiliation>
				<email href="mailto:cbuil@fi.upm.es">cbuil@delicias.dia.fi.upm.es</email>
			</author>
			<author role="Contributor">
			  <name>Andy Seaborne</name>
			  <affiliation>The Apache Software Foundation</affiliation>
			</author>
			<author role="Contributor">
                <name>Axel Polleres</name>
				<affiliation>Siemens AG</affiliation>
				<email href="mailto:axel.polleres@siemens.com">axel.polleres@siemens.com</email>
            </author> 
			<author role="Contributor">
				<name>Lee Feigenbaum</name>
				<affiliation>Cambridge Semantics</affiliation>
				<email href="mailto:lee@thefigtrees.net">lee@thefigtrees.net</email>
			</author>
			<author role="Contributor">
				<name>Gregory Todd Williams</name>
				<affiliation>Rensselaer Polytechnic Institute</affiliation>
				<email href="mailto:greg@evilfunhouse.com">greg@evilfunhouse.com</email>
			</author>
		</authlist>
		<errataloc href="&errataloc;"/>
		<preverrataloc href="&preverrataloc;"/>
		<translationloc href="&translationloc;"/>
		<abstract>
      <p>
	RDF is a directed, labeled graph data format for representing information 
	in the Web. SPARQL can be used to express queries 
	across diverse data sources, whether the data is stored natively as RDF or 
	viewed as RDF via middleware. This specification defines the syntax and semantics of SPARQL 1.1
Federated Query extension for executing queries distributed over different SPARQL endpoints. The <code>SERVICE</code> keyword extends SPARQL 1.1 to support queries that merge data distributed across the Web.

       </p>
		</abstract>
		<status>
      <p><em>This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the <a href="http://www.w3.org/TR/">W3C technical reports index</a> at http://www.w3.org/TR/.</em></p>

      <p>This document is a <a href="http://www.w3.org/2005/10/Process-20051014/tr.html#last-call">Last Call Working Draft</a>. Publication as a Last Call Working Draft indicates that the <a href="http://www.w3.org/2001/sw/DataAccess/">SPARQL Working Group</a> believes it has addressed all substantive issues and that the document is stable. The Working Group expects to advance this specification to <a href="http://www.w3.org/2004/02/Process-20040205/tr.html#RecsW3C">Recommendation Status</a>. Comments on this document should be sent to <a href="mailto:public-rdf-dawg-comments@w3.org">public-rdf-dawg-comments@w3.org</a>, a mailing list with a <a href="http://lists.w3.org/Archives/Public/public-rdf-dawg-comments">public archive</a>. Comments on this working draft are due on or before <strong>31 December 2011</strong></p>
	  

      <p>This publication describes the <code>SERVICE</code> extension to the SPARQL 1.1 Query specification.</p>

      <p>Questions and comments about SPARQL that are not related to this specification, including extensions and features, can be discussed on the mailing list <a href="mailto:public-sparql-dev@w3.org">public-sparql-dev@w3.org</a>, (<a href="http://lists.w3.org/Archives/Public/public-sparql-dev">public archive</a>).</p>

      <p>This document was produced by the <a href="http://www.w3.org/2001/sw/DataAccess/">SPARQL Working Group</a>, which is part of the <a href="http://www.w3.org/2001/sw/Activity">W3C Semantic Web Activity</a>. Publication as a Working Draft does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.</p>

      <p>This document was produced by a group operating under the <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/">5 February 2004 W3C Patent Policy</a>. W3C maintains a <a rel="disclosure" href="http://www.w3.org/2004/01/pp-impl/35463/status">public list of any patent disclosures</a> made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#def-essential">Essential Claim(s)</a> must disclose the information in accordance with <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure">section 6 of the W3C Patent Policy</a>.</p>
	  
	  <div id="changes-since-lc">
<p><b>Changes since Last Call</b></p>
<p>The following editorial changes have been made since <a href="http://www.w3.org/TR/2010/WD-sparql11-federated-query-20111110/">Last Call</a> publication of this document:</p>
<ol>
<li>Changed the word "BINDINGS" to "VALUES" to match change in Query Specification. </li>
</ol>
</div>
		</status>
		<pubstmt>
			<p>@@@ Chicago, Vancouver, Mountain View, Edinburgh, et al.: World-Wide Web Consortium, XML
Working Group, 1996, 1997, 2000, 2006, 2008.</p>
		</pubstmt>
		<sourcedesc>
			<p>Created in electronic form.</p>
		</sourcedesc>
		<langusage>
			<language id="EN">English</language>
			<language id="ebnf">Extended Backus-Naur Form (formal grammar)</language>
		</langusage>
		<revisiondesc>
			<p role="cvsid">$Id: service.xml,v 1.93 2013/03/20 17:54:52 sandro Exp $</p>
		</revisiondesc>
	</header>
	<body>
		<div1 id="introduction">
			<head>Introduction</head>

<p>

The growing number of SPARQL query services offer data consumers an opportunity to merge data distributed across the Web. This specification defines the syntax and semantics of the <code>SERVICE</code> extension to the SPARQL 1.1 Query Language. This extension allows a query author to direct a portion of a query to a particular SPARQL endpoint. Results are returned to the federated query processor and are combined with results from the rest of the query.
  <!--A <code>BINDINGS</code> keyword adds a compact syntax for tranfering results which constrain a query.
  The combination of these extensions allows one to compose a query which delegates parts of the query to a series of services.-->  
</p>


			<div2 id="docConventions">
				<head>Document Conventions</head>
				<div3 id="docNamespaces">
					<head>Namespaces</head>
<p>This document uses the same namespaces as from the <a class="inform" href="http://www.w3.org/TR/2011/WD-sparql11-query-20110512/#docNamespaces">SPARQL 1.1 Query document</a>.</p>
				</div3>
				<div3 id="docResultDesc">
					<head>Result Descriptions</head>
<p>Result sets are illustrated in tabular form as in the <a class="inform" href="http://www.w3.org/TR/2011/WD-sparql11-query-20110512/#docResultDesc">SPARQL 1.1 Query document</a>.
</p>
<div class="result">
  <table class="resultTable" id="table39">
    <tr>
      <th>x</th>
      <th>y</th>
      <th>z</th>
    </tr>
    <tr>
      <td>&quot;Alice&quot;</td>
      <td><code>&lt;http://example/a&gt;</code></td>
      <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </td>
    </tr>
  </table>

</div>

<p>A 'binding' is a pair (<a href="http://www.w3.org/TR/sparql11-query/#defn_QueryVariable">variable</a>,
<a href="http://www.w3.org/TR/sparql11-query/#defn_RDFTerm">RDF term</a>). There are three
variables:
<code>x</code>, <code>y</code> and <code>z</code> (shown as column headers). Each 
solution is shown as one row in the body of the table.&nbsp; Here, there is a single 
solution, in which variable <code>x</code> is bound to <code>&quot;Alice&quot;</code>, variable
<code>y</code> is bound to <code>http://example/a</code>, and variable <code>z</code> 
is not bound to an RDF term. Variables are not required to be bound in a 
solution.</p>

				</div3>
				<div3 id="docTerminology">
					<head>Terminology</head>

  
<p>The following terms are defined in
<a class="norm" href="http://www.w3.org/TR/sparql11-query/">SPARQL 1.1 Query Language</a> <a href="#SQRY">[SQRY]</a> and reused in this document:</p>

  <ul>
    <li><a class="type IRI             " href="http://www.w3.org/TR/2004/REC-rdf-concepts-20040210/#dfn-URI-reference"                                >IRI</a> (corresponds to the Concepts and Abstract Syntax term <code>RDF URI reference</code>)</li>
	<li><a class="type SolutionMapping " href="http://www.w3.org/TR/sparql11-query/#defn_sparqlSolutionMapping"     >Solution Mapping</a></li>
    <li><a class="type SolutionSequence" href=    "http://www.w3.org/TR/sparql11-query/#defn_sparqlSolutionSequence">Solution Sequence</a></li>
  </ul>
				</div3>
			</div2>
		</div1>

  <div1 id="service">
    <head>SPARQL 1.1 Federated Query Extension</head>
    <p>
The <code>SERVICE</code> keyword instructs a federated query processor to invoke a portion of a SPARQL query against a remote SPARQL endpoint. This section presents examples of how to use the <code>SERVICE</code> keyword. The following sections define the syntax and semantics of this extension.
</p> 
	  
	  
	  <div2 id="simpleService">
	<head>Simple query to a remote SPARQL endpoint</head>
	  
	  <div class="exampleGroup" id="fooService1">
  <p>This example shows how to query a remote SPARQL endpoint and join the returned data with the data from the local RDF Dataset. Consider a query to find the names of the people we know. Data about the names of various people is available at the <code>http://people.example.org/sparql</code> endpoint:</p>
  <pre class="data">
  @prefix foaf:  &lt;http://xmlns.com/foaf/0.1/&gt; .
  @prefix : &lt;http://example.org/&gt; .
  
  :people15  foaf:name     "Alice" .
  :people16  foaf:name     "Bob" .
  :people17  foaf:name     "Charles" .
  :people18  foaf:name     "Daisy" .</pre>
  and one wants to combine with a local FOAF file <code>http://example.org/myfoaf.rdf</code> that contains the single triple:

    <pre class="data">&lt;http://example.org/myfoaf/I&gt; &lt;http://xmlns.com/foaf/0.1/knows&gt;  &lt;http://example.org/people15&gt; . </pre>
  <div class="queryGroup">
    <p>Query:</p>
    <pre class="query">PREFIX foaf:   &lt;http://xmlns.com/foaf/0.1/&gt;
SELECT ?name
FROM &lt;http://example.org/myfoaf.rdf&gt;
WHERE
{
  &lt;http://example.org/myfoaf/I&gt; foaf:knows ?person .
  SERVICE &lt;http://people.example.org/sparql&gt; { 
    ?person foaf:name ?name . } 
}</pre>
    <p>This query, on the data above, has one solution:</p>
    <p>Query Result:</p>
    <div class="result">
      <table class="resultTable" id="table1">
        <tr>
          <th>name</th>
        </tr>
        <tr>
          <td>&quot;Alice&quot;</td>
        </tr>
      </table>
    </div>
  </div>
</div>
</div2>

<div2 id="optionalTwoServices">
	<head>SPARQL query with OPTIONAL to two remote SPARQL endpoints</head>
    <p>
	Imagine we want to query people and optionally obtain their interests and the names of people they know. Imagine for instance, two endpoints containing data about people:</p> 
	  
	   <div class="exampleGroup" id="optionalService1">
  <p>Data in the default graph at remote SPARQL endpoint: <code>http://people.example.org/sparql</code></p>
  <pre class="data"> 
  @prefix foaf:  &lt;http://xmlns.com/foaf/0.1/&gt; .
  @prefix : &lt;http://example.org/&gt; .
  
  :people15  foaf:name     "Alice" .
  :people16  foaf:name     "Bob" .
  :people17  foaf:name     "Charles" .
  :people17  foaf:interest     &lt;http://www.w3.org/2001/sw/rdb2rdf/&gt; .
  </pre>
  
  <p>and data in the default graph the remote SPARQL endpoint: <code>http://people2.example.org/sparql</code></p>
  <pre class="data"> 
  @prefix foaf:  &lt;http://xmlns.com/foaf/0.1/&gt; .
  @prefix : &lt;http://example.org/&gt; .
  
  :people15  foaf:knows    :people18 . 
  :people18  foaf:name     "Mike" .
  :people17  foaf:knows    :people19 . 
  :people19  foaf:name     "Daisy" .
  </pre>
  <div class="queryGroup">
    <p>Query:</p>
    <pre class="query">PREFIX foaf:   &lt;http://xmlns.com/foaf/0.1/&gt;
SELECT ?person ?interest ?known
WHERE
{
  SERVICE &lt;http://people.example.org/sparql&gt; { 
    ?person foaf:name ?name .  
    OPTIONAL { 
      ?person foaf:interest ?interest .
      SERVICE &lt;http://people2.example.org/sparql&gt; { 
        ?person foaf:knows ?known . } }
  }    
}</pre>
    <p>This query, on the data above, has three solutions:</p>
    <p>Query Result:</p>
    <div class="result">
	<table class="resultTable" id="table03">
	      <tr>
		<th>person</th><th>interest</th><th>known</th>
	      </tr>
	      <tr>
		<td>&quot;Alice&quot;</td><td></td><td></td>
	      </tr>
		  <tr>
		<td>&quot;Bob&quot;</td><td></td><td></td>
	      </tr>
		  <tr>
		<td>&quot;Charles&quot;</td><td>&lt;http://www.w3.org/2001/sw/rdb2rdf/&gt;</td><td>&lt;http://example.org/people19&gt;</td>
	      </tr>
	    </table>
    </div>
  </div>
</div>

<p>Notice that in the query above there is a nested <code>SERVICE</code> in the <code>OPTIONAL</code> clause. This query requires the SPARQL query service at <code>http://people.example.org/sparql</code> to support basic federated query.</p>

</div2>




	  
	  <div2 id="serviceFailure">
	<head>Service Execution Failure</head>
	<p>
      The execution of a <code>SERVICE</code> pattern may fail due to several reasons: the remote service may be down, the service IRI may not be dereferenceable, or the endpoint may return an error to the query. Normally, under such circumstances the invoked query containing a <code>SERVICE</code> pattern fails as a whole. Queries may explicitly allow failed <code>SERVICE</code> requests with the use of the <code>SILENT</code> keyword. The <code>SILENT</code> keyword indicates that errors encountered while accessing a remote SPARQL endpoint should be ignored while processing the query. The failed <code>SERVICE</code> clause is treated as if it had a result of a single solution with no bindings.</p> 
	  
	  <p>
      In the following query the <code>SILENT</code> keyword is present. If the remote SPARQL endpoint is not available because the SPARQL endpoint does not exist, it is down or it is not accessible the query will return a solution sequence of one empty solution mapping. If the <code>SILENT</code> keyword is not present, the query will stop and return the error. </p> 
	  
	  <div class="exampleGroup" id="fooService2">
  <p>Data in <code>&lt;http://people.example.org/sparql&gt;</code> endpoint:</p>
  <pre class="data">
  &lt;http://example.org/people15&gt;  &lt;http://xmlns.com/foaf/0.1/name&gt;     "Charles" .</pre>
  <div class="queryGroup">
    <p>Query:</p>
    <pre class="query">PREFIX foaf:   &lt;http://xmlns.com/foaf/0.1/&gt;
SELECT ?name
WHERE
{
  SERVICE SILENT &lt;http://people.example.org/sparql&gt; { 
    &lt;http://example.org/people15&gt; foaf:name ?name . }
}</pre>
    
    <p>Query result if an error occurs while querying the remote SPARQL endpoint:</p>
    <div class="result">
      <table class="resultTable" id="table2">
        <tr>
          <th>name</th>
        </tr>
        <tr>
          <td>&nbsp;</td>
        </tr>
      </table>
    </div>
  </div>
</div>

	  
	</div2>

	<div2 id="values">
    <head>Interplay of SERVICE and VALUES (Informative)</head>
    <p>
      SPARQL 1.1 Query includes the <code>VALUES</code> clause (<a class="inform" href="http://www.w3.org/TR/sparql11-query/#inline-data">VALUES</a>), which can be used to provide an unordered solution sequence that is joined with the results of the query evaluation. Implementers of SPARQL 1.1 Federated Query may use the <code>VALUES</code> clause to constrain the results received from a remote endpoint based on solution bindings from evaluating other parts of the query.</p> 
	  
	  <p>The following example shows how <code>SERVICE</code> and <code>VALUES</code> can work together. Suppose a query that asks for all instances of foaf:Person in the default graph and also their known people in the remote endpoint <code>http://example.org/sparql</code>:</p>
	  
	  <p>Data in the default graph: </p>
<div class="exampleGroup" id="bindingsService1">
  <pre class="data">   
  @prefix foaf:  &lt;http://xmlns.com/foaf/0.1/&gt; .
  @prefix : &lt;http://example.org/&gt; .
  
  :a a foaf:Person  ;
     foaf:name     "Alan" ;
     foaf:mbox;     "alan@example.org" .
  :b a foaf:Person  ;
     foaf:name     "Bob" ;
     foaf:mbox     "bob@example.org" .
  </pre>
  
  <p>and data in the default graph the remote SPARQL endpoint <code>http://example.org/sparql</code>:</p>
  <pre class="data"> 
  @prefix foaf:  &lt;http://xmlns.com/foaf/0.1/&gt; .
  @prefix : &lt;http://example.org/&gt; .
  
  :a  foaf:knows     :b . 
  :b  foaf:knows     :c .
  :c  foaf:knows     :a .
  :a  foaf:interest  "SPARQL 1.1 Basic Federated Query" . 
  :b  foaf:interest  "SPARQL 1.1 Query" .
  :c  foaf:interest  "RDB2RDF Direct mapping" .
  </pre>
  
  <p>Query:</p>
    <pre class="query">PREFIX foaf:   &lt;http://xmlns.com/foaf/0.1/&gt;
SELECT ?s
{
  ?s a foaf:Person .
  SERVICE &lt;http://example.org/sparql&gt; {?s foaf:knows ?o }
}
</pre>
	  </div>
	  <p> When the original query is executed naively, with an unconstrained service call the endpoint may return more results than necessary. It may also happen that the SPARQL endpoint will not return all of them. Many existing SPARQL endpoints have restrictions in the number of results they return and may miss the ones matching subjects <code>?s</code> from the local default graph. Thus, an implementation of a query planner for federated queries may decide to decompose the query into two queries instead, where first the bindings from the local default graph are evaluated:</p>

<div class="exampleGroup" id="bindingsService2">
    <p>Query:</p>
  <pre class="query">PREFIX : &lt;http://example.org/&gt;
PREFIX foaf:   &lt;http://xmlns.com/foaf/0.1/&gt;
SELECT ?s
{
  ?s a foaf:Person
} 
</pre>
    <p>This query, on the data above, has two solutions:</p>
    <p>Query Result:</p>
    <div class="result">
	<table class="resultTable" id="table04a">
	      <tr>
		<th>s</th>
	      </tr>
		  <tr>
		  <td>&lt;http://example.org/a&gt;</td>
	      </tr>
		  <tr>
		<td>&lt;http://example.org/b&gt;</td>
	      </tr>
	    </table>
    </div>
  </div>

	  <p>Next, dispatch to the remote endpoint &lt;http://example.org/sparql&gt; a constrained query with the solutions for <code>?s</code>: </p>
	  
	   <pre class="query">PREFIX foaf:   &lt;http://xmlns.com/foaf/0.1/&gt;
PREFIX : &lt;http://example.org/&gt;
SELECT * {?s foaf:knows ?o } VALUES (?s) { (:a) (:b) }</pre>

<p>The query process involving <code>SERVICE</code> limits the data returned to the data it needs for the overall query: </p>	  
  
  <div class="queryGroup">
    <p>Query:</p>
  <pre class="query">PREFIX foaf:   &lt;http://xmlns.com/foaf/0.1/&gt;
SELECT ?s ?o
{
  ?s a foaf:Person
  SERVICE &lt;http://example.org/sparql&gt; {?s foaf:knows ?o }
} 
</pre>
    <p>This query, on the data above using <code>VALUES</code>, has the expected two solutions to the overall query:</p>
    <p>Query Result:</p>
    <div class="result">
	<table class="resultTable" id="table04b">
	      <tr>
		<th>s</th><th>o</th>
	      </tr>
		  <tr>
		  <td>&lt;http://example.org/a&gt;</td><td>&lt;http://example.org/b&gt;</td>
	      </tr>
		  <tr>
		<td>&lt;http://example.org/b&gt;</td><td>&lt;http://example.org/c&gt;</td>
	      </tr>

	    </table>
    </div>
  </div>

	  

  </div2>
  
  </div1>


  <div1 id="fedSemantics">
    <head>SPARQL 1.1 Simple Federation Extension: semantics</head>

    <div2 id="defn_service">
      <head>Translation to the SPARQL Algebra</head>
      <p>The <code>SERVICE</code> extension is defined as an additional type of GroupGraphPattern, with an accompanying addition to SPARQL Query 1.1's <a href="http://www.w3.org/TR/sparql11-query/#convertGraphPattern">Transform (syntax form)</a>:</p>
  <blockquote>
    <p style="background-color: #777;">If the form is <code class="gRuleBody"><a href="http://www.w3.org/TR/sparql11-query/#rGroupGraphPattern">GroupGraphPattern</a></code></p>
    <blockquote>
      <p>From the <a href="http://www.w3.org/TR/sparql11-query/#sparqlTranslateGraphPatterns">Translate Graph Patterns section</a> of [<a class="inform" href="http://www.w3.org/TR/sparql11-query/">SPARQL 1.1 Query Language</a>] we extend the transformation of GroupGraphPattern to define the transformation of <code>SERVICE</code> patterns:</p>
      
    </blockquote>
</blockquote>

      <pre class="codeBlock">Let FS := the empty set
Let G := the empty pattern, Z, a basic graph pattern which is the empty set.
Let SilentOp := boolean, indicating SERVICE error behavior.

For each element E in the GroupGraphPattern
    If E is of the form FILTER(expr)
        FS := FS &cup; {expr}
        End

    If E is of the form OPTIONAL{P} 
        Let A := Transform(P)
        If A is of the form Filter(F, A2)
            G := LeftJoin(G, A2, F)
        Else 
            G := LeftJoin(G, A, true)
            End
        End

    If E is of the form MINUS{P}
        G := Minus(G, Transform(P))
        End

    If E is of the form BIND(expr AS var)
        G := Extend(G, var, expr)
        End

    If E is any other form 
        Let A := Transform(E)
        G := Join(G, A)
        End

    <strong>If E is of the form SERVICE [SILENT] IRI {P}
        Let G := Join(G, Service(IRI, Transform(P), SilentOp))
        End</strong>
   
   End
   
If FS is not empty:
  Let X := Conjunction of expressions in FS
  G := Filter(X, G)

The result is G.
            </pre>
			
			
</div2>
<div2 id="algebra_service">
      <head>SPARQL 1.1 Simple Federation Extension Algebra</head>
	  
	  <p>The evaluation of <code>SERVICE</code> is defined in terms of the <a class="inform" href="http://www.w3.org/TR/rdf-sparql-XMLres/">SPARQL Results</a> [<a href="#RESULTS">RESULTS</a>] returned by a SPARQL Protocol [<a href="#SPROT">SPROT</a>] execution of the nested graph pattern:</p>

	  <div class="defn">
	<p><strong>Definition: <a id="defn_evalService" name="defn_evalService">Evaluation of a Service Pattern</a></strong></p>
<!-- <code>vars</code> is the set of variables in-scope in pattern P, &Omega;<sub>0</sub> a solution set with one empty solution and an <a hred="http://www.w3.org/TR/2011/WD-sparql11-query-20110512/#QSynIRI">IRI</a>.
	<pre class="defn">
if IRI
  eval(D(G), Service(IRI,P,SilentOp)) = Invocation( IRI, vars, P, SilentOp )
else
  if(!SilentOp)
    execution fails.
  else
    return <code>&Omega;<sub>0</sub>.</code>

	where: Invocation(IRI, S, P, SilentOp) is an implementation of the SPARQL protocol <ul>
	<li>against endpoint IRI,</li>
	<li>with a SELECT of S, WHERE pattern P</li>
	<li>with SilentOp a boolean variable to indicate the SERVICE execution to ignore errors when true.</li>
	</ul> -->
	
	Let <ul>
	<li>iri be an IRI,</li>
	<li><code>&Omega;<sub>0</sub></code> the solution set with one empty solution, and</li>
	<li>SilentOp be a boolean variable to indicate that SERVICE execution should ignore errors when true.</li>
	</ul>
	<p>then:
</p>
<div class="defn">eval(D(G), Service(IRI,P,SilentOp)) = Invocation( iri, P, SilentOp )</div>
	where:  Invocation(IRI, P, SilentOp) is <ul>
	<li>the multiset of solution mappings corresponding to the results of executing query <code>SELECT * WHERE Q</code> against the service endpoint with IRI iri where Q is the serialization of P in SPARQL syntax, in case of a successful service invocation according to the SPARQL protocol, and otherwise</li>
	<li><code>&Omega;<sub>0</sub>.</code> in case SilentOp is true, and otherwise</li>
	<li>error.</li>
	</ul>
	</div>
	<div3 id="algebra_service_examples">
      <head>SERVICE Examples</head>
	  <p>In the folowing section we introduce two examples showing the evaluation of <code>SERVICE</code> patterns in the SPARQL algebra:</p>
      <p>Example: a <code>SERVICE</code> graph pattern in a series of joins:</p>

      <div class="algExample">

	<div class="algExample1">
	  ... WHERE { { ?s :p1 ?v1 } SERVICE &lt;srvc&gt; {?s :p2 ?v2 } { ?s :p3 ?v2 } }
	</div>

	<div class="algExample2">
	  Join( Service( &lt;srvc&gt;, <br/>
	  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BGP( ?s :p2 ?v2 ), false ),<br/>
	  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BGP( ?s :p3 ?v2 ) )
	</div>
      </div>
	  
	  <p>Example: a <code>SERVICE SILENT</code> graph pattern in a series of joins:</p>
	  
	  <div class="algExample">

	<div class="algExample1">
	  ... WHERE { { ?s :p1 ?v1 } SERVICE SILENT &lt;srvc&gt; {?s :p2 ?v2 } { ?s :p3 ?v2 } }
	</div>

	<div class="algExample2">
	  Join( Service( &lt;srvc&gt;, <br/>
	  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BGP( ?s :p2 ?v2 ), true ),<br/>
	  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BGP( ?s :p3 ?v2 ) )
	</div>
      </div>

</div3>
	  
    </div2>
	
	
  </div1>

  <div1 id="variableService">
	<head>SERVICE Variables (Informative)</head>

	<p>In the this section we do not present official evaluation semantics for the SPARQL pattern <code>SERVICE VAR</code>. We only provide indications about how the evaluation of the SPARQL pattern <code>SERVICE VAR</code> can be evaluated.</p> 
	<p>A variable used in place of a service IRI indicates that the service call for any solution depends on that variable's binding in that solution. For instance, the default graph may contain data about which services contain data about project endpoints. We assume the following data on various projects that contains information about SPARQL endpoints where data about these projects (using the <a href="https://github.com/edumbill/doap/wiki">DOAP vocabulary</a>) can be queried from: </p>
	<pre class="data">
@prefix void:    &lt;http://rdfs.org/ns/void#&gt; .
@prefix dc: &lt;http://purl.org/dc/elements/1.1/&gt; .
@prefix doap: &lt;http://usefulinc.com/ns/doap#&gt; .

[] dc:subject "Querying RDF" ;
   void:sparqlEndpoint &lt;http://projects1.example.org/sparql&gt; .
[] dc:subject "Querying RDF remotely" ;
   void:sparqlEndpoint &lt;http://projects2.example.org/sparql&gt; .
[] dc:subject "Updating RDF remotely"  ;
   void:sparqlEndpoint &lt;http://projects3.example.org/sparql&gt; .

</pre>

<p>Data in the default graph at remote SPARQL endpoint http://projects2.example.org/sparql: </p>
<pre class="data">
_:project1  doap:name    "Query remote RDF Data" .
_:project1  doap:created "2011-02-12"^^xsd:date .
_:project2  doap:name    "Querying multiple SPARQL endpoints" .
_:project2  doap:created "2011-02-13"^^xsd:date .
</pre>

<p>Data in the default graph at remote SPARQL endpoint http://projects3.example.org/sparql: </p>
<pre class="data">
_:project3  doap:name    "Update remote RDF Data" .
_:project3  doap:created "2011-02-14"^^xsd:date .
</pre>
	  <p>We now want to query the project names of projects on the subject "remote":</p>
	  <div class="queryGroup">
	    <pre class="query">PREFIX  void: &lt;http://rdfs.org/ns/void#&gt;
PREFIX  dc:   &lt;http://purl.org/dc/elements/1.1/&gt;
PREFIX  doap: &lt;http://usefulinc.com/ns/doap#&gt; 

SELECT ?service ?projectName
WHERE {
  # Find the service with subject "remote".
  ?p dc:subject ?projectSubject ;
     void:sparqlEndpoint ?service .
     FILTER regex(?projectSubject, "remote")

  # Query that service projects.
  SERVICE ?service {
     ?project  doap:name ?projectName . } 
}

</pre>
 <p>In the following table we present the intuitive solutions for this query with the data above:</p>
    <p>Query Result:</p>
    <div class="result">
      <table class="resultTable" id="tableResultsVarEndpoint">
	      <tr>
		<th>service</th><th>title</th>
	      </tr>
	      <tr>
		<td>&lt;http://projects2.example.org/sparql&gt;</td><td>&quot;Query remote RDF Data&quot;</td>
	      </tr>
		  <tr>
		<td>&lt;http://projects2.example.org/sparql&gt;</td><td>&quot;Querying multiple SPARQL endpoints&quot;</td>
	      </tr>
		  <tr>
		<td>&lt;http://projects3.example.org/sparql&gt;</td><td>&quot;Update remote RDF Data&quot;</td>
	      </tr>
	    </table>
</div>
</div>

<p>A <code>SERVICE</code> clause involving a variable can be executed as a series of separate invocations of SPARQL query services. The results of each invocation are combined using union. </p>

<!--
<div class="defn">
	<p><b>Definition: <a id="defn_evalServiceVar" name="defn_evalServiceVar">Evaluation of a Service Pattern with Variables</a></b></p>
	If <code>vars</code> is the set of variables in-scope in pattern P, &Omega; the set of all possible solutions, &Omega;<sub>0</sub> a solution set with one empty solution.
	<pre class="defn">
eval(D(G), Service(var,G,P,SilentOp)) =
  Let R be the empty multiset
  foreach i in &Omega;(?var-&gt;i)
    if i is an IRI
      R := Union(R, Join( Invocation( i, vars, P, Bindings(G, vars), SilentOp ) , &Omega;(?var-&gt;i) ) )
    else
      if(!SilentOp)
        execution fails.
      else
        return <code>&Omega;<sub>0</sub>.</code>
    the result is R
</pre>
	where: Invocation(IRI, S, P, B, SilentOp) is an implementation of the SPARQL protocol <ul>
	<li>against endpoint or GRAPH IRI,</li>
	<li>with a SELECT of S, WHERE pattern P, and BINDINGS B,</li>
	<li>with no <code>default-graph-uri</code> or <code>named-graph-uri</code> (see SPARQL Protocol [<a href="#SPROT">SPROT</a>] section <a href="http://www.w3.org/TR/sparql11-protocol/#query-In-Message">2.1.1.1</a>),</li>
	<li>with SilentOp a boolean variable to indicate the <code>SERVICE</code> execution to ignore errors when true for each <code>SERVICE</code> or <code>GRAPH</code> invocation.</li>
	</ul>
	
      </div> -->

	  <p>The query engine must determine the possible target SPARQL query services. The exact mechanism for doing this is not defined in this document. Execution order may also be used to determine the list of services to to be tried. The example above suggests a specific order of execution: evaluating the basic graph pattern and filter outside the <code>SERVICE</code> block first will yield bindings for <code>?service</code> which may then be used to evaluate the <code>SERVICE</code> block:</p>
<pre class="query">?p dc:subject ?projectSubject ;
   void:sparqlEndpoint ?service
   FILTER regex(?projectSubject, "remote")</pre> 

<p>Once <code>?service</code> has been evaluated it is possible to execute <code>SERVICE</code> for each value of <code>?service</code>:</p>
<pre class="query">SERVICE ?service {
?project doap:name ?projectName . }</pre>

<p>Note that blank nodes are unique to any document which serializes them. Also, <code>SERVICE</code> calls depend on the SPARQL Protocol [<a href="#SPROT">SPROT</a>] which transfers serialized RDF documents making blank nodes unique between service calls. </p>
</div1>

  <div1 id="conformance">
    <head>Conformance</head>
    <p>See section 4 <a href="http://www.w3.org/TR/sparql11-query/#grammar">SPARQL 1.1 Federated Query Grammar</a> regarding conformance of
    <a href="http://www.w3.org/TR/sparql11-query/#defn_SPARQLQueryString">SPARQL Query strings</a> that include the SPARQL 1.1 Federated Query Extensions. See section 3.1 <a href="#defn_service">Definition of SERVICE</a> for conformance of query results for the <code>SERVICE</code> keyword.</p>
	
	<p>This specification is intended for use in conjunction with the <a href="http://www.w3.org/TR/sparql11-query/"> SPARQL 1.1 Query Language</a>. See that specification for its conformance criteria.</p>
  </div1>


  <div1 id="security">
    <head>Security Considerations (Informative)</head>
    <p>SPARQL queries using <code>SERVICE</code> imply that a URI will
    be dereferenced, and that the result will be incorporated into a working data set. All of the security issues 
    of <a class="norm" href="http://www.w3.org/TR/sparql11-protocol/#policy-security">SPARQL Protocol 1.1</a> [<a href="#SPROT">SPROT</a>] Section 3.1
    <a class="norm" href="http://www.w3.org/TR/sparql11-query/#security">SPARQL 1.1 Query</a> [<a href="#SQRY">SQRY</a>] Section 21, and
    <a class="norm" href="http://www.ietf.org/rfc/rfc3986.txt">Uniform Resource Identifier 
    (URI): Generic Syntax</a> [<a href="#rfc3986">RFC3986</a>] Section 7 should be considered. </p>
  </div1>


	</body>
	<back>
		<!-- &SGML; -->
		<!-- &Biblio; -->
		<div1 id="sec-bibliography">
			<head>References</head>
			<div2 id="sec-normative-refs">
				<head>Normative References</head>

	<dl class="bib">
		<dt><a id="SQRY" name="SQRY">[SQRY]</a></dt>

		<dd>@@ref-query</dd>

		<dt><a id="SPROT" name="SPROT">[SPROT]</a></dt>

		<dd>@@ref-protocol</dd> 

		<dt><a name="CHARMOD" id="CHARMOD">[CHARMOD]</a></dt>
		<dd><cite>
		<a href="http://www.w3.org/TR/2005/REC-charmod-20050215/">Character
      Model for the World Wide Web 1.0: Fundamentals</a></cite>,
      R. Ishida, F. Yergeau, M. J. D&udotdot;st, M. Wolf, T. Texin,
      Editors, W3C Recommendation, 15 February 2005,
      http://www.w3.org/TR/2005/REC-charmod-20050215/ . 
		<a href="http://www.w3.org/TR/charmod/" title="Latest version of Character Model for the World Wide Web 1.0: Fundamentals">Latest version</a> available at http://www.w3.org/TR/charmod/
      .</dd>

		<dt><a name="rfc3629" id="rfc3629">[RFC3629]</a></dt>
		<dd>RFC 3629 <cite>
		<a href="http://www.ietf.org/rfc/rfc3629.txt">UTF-8, a transformation
      format of ISO 10646</a></cite>, F. Yergeau November 2003</dd>

		<dt><a name="rfc3986" id="rfc3986">[RFC3986]</a></dt>
		<dd>RFC 3986 <cite>
		<a href="http://www.ietf.org/rfc/rfc3986.txt">Uniform Resource
      Identifier (URI): Generic Syntax</a></cite>, T. Berners-Lee,
      R. Fielding, L. Masinter January 2005</dd>
		<dt><a name="rfc3987" id="rfc3987">[RFC3987]</a></dt>
		<dd><a href="http://www.ietf.org/rfc/rfc3987.txt">RFC
      3987</a>, "Internationalized Resource Identifiers (IRIs)", M.
      D&udotdot;rst , M. Suignard</dd>

		<dt><a name="UNICODE" id="UNICODE">[UNICODE]</a></dt>
		<dd><cite>The Unicode Standard, Version 4</cite>. ISBN
      0-321-18578-1, as updated from time to time by the
      publication of new versions. The latest version of Unicode
      and additional information on versions of the standard and of
      the Unicode Character Database is available at 
		<a href="http://www.unicode.org/unicode/standard/versions/">http://www.unicode.org/unicode/standard/versions/</a>.</dd>
		<dt><a name="XML11" id="XML11">[XML11]</a></dt>
		<dd><cite>
		<a href="http://www.w3.org/TR/2004/REC-xml11-20040204/">Extensible
      Markup Language (XML) 1.1</a></cite>, J. Cowan, J. Paoli, E.
      Maler, C. M. Sperberg-McQueen, F. Yergeau, T. Bray, Editors,
      W3C Recommendation, 4 February 2004,
      http://www.w3.org/TR/2004/REC-xml11-20040204/ . 
		<a href="http://www.w3.org/TR/xml11/" title="Latest version of Extensible Markup Language (XML) 1.1">Latest
      version</a> available at http://www.w3.org/TR/xml11/ .</dd>

	<dt><a name="BCP47" id="BCP47">[BCP47]</a></dt>
	<dd><cite><a href="http://www.rfc-editor.org/rfc/bcp/bcp47.txt">Best Common Practice 47</a></cite>, P. V. Biron, A. Malhotra, Editors, W3C Recommendation, 28 October 2004, http://www.rfc-editor.org/rfc/bcp/bcp47.txt .</dd>
	</dl>

			</div2>
			<div2 id="sec-non-normative-refs">
				<head>Other References</head>
	<dl class="bib">
		<dt><a name="RESULTS" id="RESULTS">[RESULTS]</a></dt>
		<dd>@@ref-rdf-sparql-XMLres</dd> 

		<dt><a name="TURTLE" id="TURTLE">[TURTLE]</a></dt>
		<dd>@@ref-turtle</dd>

</dl>

			</div2>
			
			
		</div1> 
		
		
		<div1 id="sec-acknowledgements">
				<head>Acknowledgements</head>
	<p>The SPARQL &versionOfSPARQL; Federated Query document is a product of the whole of the <a href="http://www.w3.org/2009/sparql/wiki/Main_Page">W3C SPARQL Working Group</a>, and our thanks for discussions, comments and reviews go to all present and past members.</p>

<p>In addition, we have had comments and discussions with many people through the working group comments list. All comments go to making a better document. Carlos would also like to particularly thank Jorge P&eacute;rez, Oscar Corcho and Marcelo Arenas for their discussions on the syntax and semantics of the Federated query extension.</p>
			</div1>
			
			
		
		<div1 id="sec-cvsLog">
     <head>CVS History (Last Call and after)</head>
     
   </div1>
		<!--
		<div1 id="sec-cvsLog">
			<head>CVS History</head>
			<div2 id="sec-cvsLog-meat">
			  <pre>
$Log: service.xml,v $
Revision 1.93  2013/03/20 17:54:52  sandro
removed link to color-coded diffs

Revision 1.92  2013-03-20 17:46:25  sandro
add changes since PR

Revision 1.91  2013-01-03 14:15:00  apollere2
Fixed cml bug for undef entity by commenting out XML version.

Revision 1.90  2013-01-03 14:10:44  apollere2
Changed affiliation of Axel Polleres

Revision 1.89  2012-11-07 02:20:45  sandro
various little fixes to references and links for publication

Revision 1.88  2012/11/07 00:05:45  sandro
fix doap URL, make references dynamic

Revision 1.87  2012/11/01 18:26:16  cbuilara
moved the Changes Since LC section to the beginning of the document

Revision 1.86  2012/11/01 14:26:21  cbuilara
added Changes from Last Call section and changed #bindings achnor for #values

Revision 1.85  2012/09/03 11:42:42  cbuilara
changed bindings for values

Revision 1.84  2011/11/08 15:55:25  cbuilara
*** empty log message ***

Revision 1.83  2011/11/08 15:52:10  cbuilara
changed pub date

Revision 1.82  2011/10/25 13:11:58  cbuilara
fixed error with a link

Revision 1.81  2011/10/25 13:08:10  cbuilara
applied pub rules

Revision 1.80  2011/10/25 11:47:44  cbuilara
moved to beginning of the section that SERVICE VAR does not specify semantics

Revision 1.79  2011/10/17 21:28:04  cbuilara
added latest comment from Greg

Revision 1.78  2011/10/10 21:15:31  cbuilara
lastest changes from Greg's comments

Revision 1.77  2011/09/27 17:04:49  cbuilara
latest comments in http://lists.w3.org/Archives/Public/public-rdf-dawg/2011JulSep/0281.html

Revision 1.76  2011/09/26 20:22:49  cbuilara
changes according http://lists.w3.org/Archives/Public/public-rdf-dawg/2011JulSep/0263.html

Revision 1.75  2011/09/01 20:02:06  cbuilara
added changes to SERVICE VAR section

Revision 1.74  2011/08/19 12:42:12  cbuilara
latest changes from Greg's comments

Revision 1.73  2011/08/18 15:54:40  cbuilara
removed SERVICE VAR definition section, it is not needed

Revision 1.72  2011/08/09 15:39:40  cbuilara
added "? the set of all possible solutions" to SERVICE VAR semantics section

Revision 1.71  2011/08/09 14:58:47  cbuilara
changed according Alex review (ACTION-501)

Revision 1.70  2011/08/09 14:03:04  cbuilara
added latest minor changes

Revision 1.69  2011/08/04 14:17:12  cbuilara
changed datasets for making more comprehensible BINDINGS example

Revision 1.68  2011/08/01 20:29:53  cbuilara
added some explanatory comment to the SERVICE VAR section and completed ACTION-502. Email http://lists.w3.org/Archives/Public/public-rdf-dawg/2011JulSep/0085.html

Revision 1.67  2011/08/01 16:43:27  cbuilara
added Axel's comments: http://lists.w3.org/Archives/Public/public-rdf-dawg/2011JulSep/0067.html

Revision 1.66  2011/07/31 20:45:24  cbuilara
lst changes according to Andy's email: http://lists.w3.org/Archives/Public/public-rdf-dawg/2011JulSep/0081.html

Revision 1.65  2011/07/28 16:49:04  cbuilara
fixed wrong namespace

Revision 1.64  2011/07/27 20:00:43  cbuilara
fixed minor format issues in Andy's email: http://lists.w3.org/Archives/Public/public-rdf-dawg/2011JulSep/0065.html

Revision 1.63  2011/07/27 19:16:35  cbuilara
added Andy's comments and SERVICE with BINDINGS example

Revision 1.62  2011/07/26 14:22:35  cbuilara
Andy's comments

Revision 1.61  2011/07/25 17:36:08  cbuilara
fixed problem with the Markup Validation Service

Revision 1.60  2011/07/25 15:50:42  cbuilara
fixed a typo s/addtion/addition

Revision 1.59  2011/07/25 15:42:28  cbuilara
added changes for fixing Greg's comments in SERVICE VAR

Revision 1.58  2011/07/25 11:30:05  cbuilara
initial version of optional SERVICE VAR

Revision 1.57  2011/07/06 20:01:40  cbuilara
fixed wrong namespace in BINDINGS example

Revision 1.56  2011/07/06 19:50:32  cbuilara
fixed wrong table format

Revision 1.55  2011/07/06 17:51:25  cbuilara
fixed results in bindings example

Revision 1.54  2011/07/06 13:38:00  cbuilara
added BINDINGS and SERVICE example

Revision 1.53  2011/06/21 14:13:28  cbuilara
preparing for last call

Revision 1.52  2011/06/03 17:19:57  cbuilara
added Acknowledgements section

Revision 1.51  2011/05/31 12:16:11  eric
- redundant "SPARQL Query" in SOTD
~ s/section 3/section 3.1/ in Conformance

Revision 1.50  2011/05/30 21:37:10  cbuilara
preparing for last call

Revision 1.49  2011/05/30 20:06:05  cbuilara
preparing for last call

Revision 1.48  2011/05/30 19:55:45  cbuilara
preparing for last call

Revision 1.47  2011/05/30 19:35:53  cbuilara
preparing for last call

Revision 1.46  2011/05/24 06:18:10  lfeigenb
clarify note regarding implementations extending SERVICE ?v to guarantee a safe execution order

Revision 1.45  2011/05/22 21:06:48  cbuilara
added Olivier's last comments

Revision 1.44  2011/05/18 15:04:00  cbuilara
added Lee and Axel as contributors

Revision 1.43  2011/05/18 14:55:35  cbuilara
applied Olivier's comments

Revision 1.42  2011/05/17 14:22:55  cbuilara
removed media type section

Revision 1.41  2011/05/12 21:42:11  cbuilara
fixed grammar in ACTION-420

Revision 1.40  2011/05/12 20:48:59  cbuilara
added latest changes suggested by Lee, including conformance section

Revision 1.39  2011/05/12 13:03:13  lfeigenb
wordsmithing

Revision 1.38  2011/05/10 15:14:26  cbuilara
changes for LC

Revision 1.37  2011/05/10 14:12:31  cbuilara
changes for LC

Revision 1.36  2011/05/09 21:37:41  cbuilara
changes for LC

Revision 1.35  2011/05/09 21:26:47  cbuilara
*** empty log message ***

Revision 1.34  2011/05/09 21:24:20  cbuilara
changes for LC

Revision 1.33  2011/05/09 21:14:46  cbuilara
changes for LC

Revision 1.32  2011/05/09 20:30:52  cbuilara
changes for LC

Revision 1.31  2011/05/09 20:29:11  cbuilara
changes for LC

Revision 1.30  2011/05/09 20:07:19  cbuilara
latest version for LC

Revision 1.29  2011/05/03 14:24:37  cbuilara
last comment from Lee: removed BINDINGS example

Revision 1.28  2011/05/03 10:32:06  cbuilara
added changes from Lee's rereview

Revision 1.27  2011/03/14 20:52:56  cbuilara
added changes from Axel and Lee's reviews

Revision 1.26  2011/02/28 22:24:14  cbuilara
done most of teh changes suggested by Axel and Lee in their review

Revision 1.25  2011/02/01 16:50:27  cbuilara
added note about BINDINGS: it is going to be removed in the next daqys. It will only be present in the main query document

Revision 1.24  2011/01/28 19:11:49  cbuilara
fixed section numbering

Revision 1.23  2011/01/28 17:26:37  cbuilara
finished with Andy's comments in http://lists.w3.org/Archives/Public/public-rdf-dawg/2010OctDec/0480.html

Revision 1.22  2011/01/25 13:54:09  cbuilara
added empty solution to service semantics

Revision 1.21  2011/01/25 12:32:50  cbuilara
changed frq mime type

Revision 1.20  2011/01/24 20:48:30  cbuilara
added SILENT description to the grammar

Revision 1.19  2011/01/24 20:43:35  cbuilara
added SILENT description

Revision 1.18  2010/12/20 07:51:22  cbuilara
new version of Fed extension, changed document structure, added more examples, cleaned up, added BINDINGS semantics, to be discussed

Revision 1.17  2010/11/23 08:17:11  cbuilara
added minro changes, mainly typos correction

Revision 1.16  2010/11/13 16:39:23  cbuilara
modified explanation of examples

Revision 1.15  2010/11/13 16:14:41  cbuilara
Carlos Buil contribution to the document

Revision 1.14  2010/10/18 03:29:15  eric
~ refined <a href="#defn_service">Definition of SERVICE</a>

Revision 1.13  2010/08/06 12:06:52  aseaborne
Update contributor details

Revision 1.12  2010/06/05 16:02:48  eric
~ simplified VoID per mid:201006051530.35618.hartig@informatik.hu-berlin.de
~ s/void:sparqEndpoint/void:sparqlEndpoint/
~ s/GABABR/GABBR/

Revision 1.11  2010/06/05 08:48:51  eric
+ { ?dataset void:sparqEndpoint ?service } per 201006041437.16670.hartig@informatik.hu-berlin.de

Revision 1.10  2010/06/05 08:30:49  eric
~ s/\?human/\?species/ per AANLkTim__mpoMkz9OU1HCcZpvmJHmVuvdIBlt1I8Eszo@mail.gmail.com

Revision 1.9  2010/05/25 18:38:40  lfeigenb
remove invalid css attributes

Revision 1.8  2010/05/25 18:37:03  lfeigenb
remove linkindex params that validator complained about

Revision 1.7  2010/05/25 13:30:58  lfeigenb
move version in document title

Revision 1.6  2010/05/18 00:35:55  eric
- some extraneous references

Revision 1.5  2010/05/18 00:31:18  eric
per <a href="http://www.w3.org/mid/4BE9A3EA.7040201@thefigtrees.net">SPARQL Working Group feedback via LeeF</a>
  - BINDINGS and SPARQL Update section
  + <a href="#varService">Variable Services</a> section with ednote
  ~ copied grammar from <a href="http://www.w3.org/2009/sparql/docs/sparql-grammar-11">complete SPARQL grammar</a>

Revision 1.4  2010/03/31 12:40:33  eric
~ corrections from imikhailov@openlinksw.com mid:1269962023.3105.192.camel@octo.iv.dev.null

Revision 1.3  2010/03/29 16:23:36  eric
~ incorporated <a href="http://www.w3.org/mid/4BB0BF1A.4040309@talis.com">feedback from AndyS</a>

Revision 1.2  2010/03/27 03:32:47  eric
+ Bindings

Revision 1.1  2010/03/26 15:47:18  eric
CREATED


			  </pre>
			</div2>
		</div1> 
-->

<div>
  <h2 id="changelog">Change Log</h2>

    <h3 id="changes-since-pr">Changes since Proposed Recommendation</h3>

    <ul>
      <li>None</li>
    </ul>

    <h3 id="changes-since-lc">Changes since Last Call</h3>

    <ul>
      <li>Updated references, fix DOAP URL</li>
      <li>Changed the word "BINDINGS" to "VALUES" to match change in Query Specification.</li>
    </ul>


</div>

	</back>
</spec>
