<docbook><section><title>VirtTipsAndTricksSPARQL11Subquery</title><title>Virtuoso SPARQL 1.1.
 Subqueries Usage Examples</title>Virtuoso SPARQL 1.1.
 Subqueries Usage Examples
<para> </para>
<bridgehead class="http://www.w3.org/1999/xhtml:h2">What?</bridgehead>
 This guide contains Virtuoso SPARQL 1.1.
 Subqueries  Usage example queries which you can run against any SPARQL endpoint that supports SPARQL 1.1 and the ability to allow a verified user perform INSERT operations.<bridgehead class="http://www.w3.org/1999/xhtml:h2">Why?</bridgehead>
 Using subqueries provides good readability.
 Certain types of problems can be stated more concisely, and more efficiently, with subqueries.<bridgehead class="http://www.w3.org/1999/xhtml:h2">How?</bridgehead>
<para>Here are some examples showcasing Virtuoso&#39;s support for this functionality:</para>
<para> </para>
<orderedlist spacing="compact"><listitem>Assume the following Raw Data Representation in Turtle: <programlisting>&lt;http://people.example/alice&gt; &lt;http://people.example/name&gt; &quot;Alice&quot;, 
                                                           &quot;Alice Foo&quot;, 
                                                           &quot;A. Foo&quot; . 
&lt;http://people.example/alice&gt; &lt;http://people.example/knows&gt; &lt;http://people.example/bob&gt; ,  
                                                            &lt;http://people.example/carol&gt; . 
&lt;http://people.example/bob&gt;   &lt;http://people.example/name&gt; &quot;Bob&quot;, 
                                                           &quot;Bob Bar&quot;,  
                                                           &quot;B. Bar&quot; .  
&lt;http://people.example/carol&gt; &lt;http://people.example/name&gt; &quot;Carol&quot;,  
                                                           &quot;Carol Baz&quot;,  
                                                           &quot;C. Baz&quot; . 
</programlisting></listitem>
<listitem>Beautified Raw Data Representation in Turtle (from above) using Namespace Prefix: <programlisting>&lt;#alice&gt; &lt;#name&gt; &quot;Alice&quot; . 
&lt;#alice&gt; &lt;#name&gt; &quot;Alice Foo&quot; . 
&lt;#alice&gt; &lt;#name&gt; &quot;A. Foo&quot; . 
&lt;#alice&gt; &lt;http://xmlns.com/foaf/0.1/knows&gt; &lt;#bob&gt;, &lt;#carol&gt; . 
&lt;#bob&gt;   &lt;#name&gt; &quot;Bob&quot; . 
&lt;#bob&gt;   &lt;#name&gt; &quot;Bob Bar&quot; . 
&lt;#bob&gt;   &lt;#name&gt; &quot;B. Bar&quot; . 
&lt;#carol&gt; &lt;#name&gt; &quot;Carol&quot; . 
&lt;#carol&gt; &lt;#name&gt; &quot;Carol Baz&quot; . 
&lt;#carol&gt; &lt;#name&gt; &quot;C. Baz&quot; . 
</programlisting></listitem>
<listitem>Load the sample data: <programlisting>INSERT { 
         GRAPH &lt;urn:sparql:tests:subquery&gt; 
           { 
             &lt;#alice&gt; &lt;#name&gt; &quot;Alice&quot; . 
             &lt;#alice&gt; &lt;#name&gt; &quot;Alice Foo&quot; . 
             &lt;#alice&gt; &lt;#name&gt;  &quot;A. Foo&quot; . 
             &lt;#alice&gt; &lt;http://xmlns.com/foaf/0.1/knows&gt; &lt;#bob&gt;, &lt;#carol&gt; . 
             &lt;#bob&gt;   &lt;#name&gt; &quot;Bob&quot; . 
             &lt;#bob&gt;   &lt;#name&gt; &quot;Bob Bar&quot; . 
             &lt;#bob&gt;   &lt;#name&gt; &quot;B. Bar&quot; . 
             &lt;#carol&gt; &lt;#name&gt; &quot;Carol&quot; . 
             &lt;#carol&gt; &lt;#name&gt; &quot;Carol Baz&quot; . 
             &lt;#carol&gt; &lt;#name&gt; &quot;C. Baz&quot; . 
           } 
       }
</programlisting></listitem>
<listitem>Query the graph data by using a sub-query in the SPARQL query statement: <programlisting>SELECT ?y ?minName
WHERE 
  {
    &lt;#alice&gt; &lt;http://xmlns.com/foaf/0.1/knows&gt; ?y .
    {
      SELECT ?y (MIN(?name) AS ?minName)
      WHERE 
        {
          ?y &lt;#name&gt; ?name .
        } 
      GROUP BY ?y
    }
  }
</programlisting></listitem>
<listitem><ulink url="http://bit.ly/YohiXp">View the SPARQL Query Definition via SPARQL Protocol URL</ulink>; </listitem>
<listitem><ulink url="http://bit.ly/11eCdM5">View the SPARQL Query Results via SPARQL Protocol URL</ulink></listitem>
</orderedlist><bridgehead class="http://www.w3.org/1999/xhtml:h2">Related</bridgehead>
<itemizedlist mark="bullet" spacing="compact"><listitem><ulink url="http://www.w3.org/TR/2010/WD-sparql11-query-20100126/#subqueries">SPARQL 1.1 Subqueries</ulink> </listitem>
<listitem><ulink url="http://www.w3.org/TR/rdf-sparql-protocol/">SPARQL Protocol (HTTP based Query Service)</ulink> </listitem>
<listitem><ulink url="VirtTipsAndTricksGuide">Virtuoso Tips and Tricks Collection</ulink> </listitem>
<listitem><ulink url="VirtTipsAndTricksSPARQL11FeaturesExamplesCollection">Virtuoso SPARQL 1.1 Usage Examples Collection</ulink> </listitem>
<listitem><ulink url="http://virtuoso.openlinksw.com/tutorials/sparql/SPARQL_Tutorials_Part_9/SPARQL_Tutorials_Part_9.html">Virtuoso SPARQL 1.1 Syntax Tutorial</ulink> </listitem>
<listitem><ulink url="http://docs.openlinksw.com/virtuoso/rdfsparql.html">Virtuoso Documentation</ulink> </listitem>
</itemizedlist></section></docbook>