Virtuoso SPARQL 1.1. Subqueries Usage Examples

What?

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.

Why?

Using subqueries provides good readability. Certain types of problems can be stated more concisely, and more efficiently, with subqueries.

How?

Here are some examples showcasing Virtuoso's support for this functionality:

  1. Assume the following Raw Data Representation in Turtle:

    <http://people.example/alice> <http://people.example/name> "Alice", "Alice Foo", "A. Foo" . <http://people.example/alice> <http://people.example/knows> <http://people.example/bob> , <http://people.example/carol> . <http://people.example/bob> <http://people.example/name> "Bob", "Bob Bar", "B. Bar" . <http://people.example/carol> <http://people.example/name> "Carol", "Carol Baz", "C. Baz" .

  2. Beautified Raw Data Representation in Turtle (from above) using Namespace Prefix:

    <#alice> <#name> "Alice" . <#alice> <#name> "Alice Foo" . <#alice> <#name> "A. Foo" . <#alice> <http://xmlns.com/foaf/0.1/knows> <#bob>, <#carol> . <#bob> <#name> "Bob" . <#bob> <#name> "Bob Bar" . <#bob> <#name> "B. Bar" . <#carol> <#name> "Carol" . <#carol> <#name> "Carol Baz" . <#carol> <#name> "C. Baz" .

  3. Load the sample data:

    INSERT { GRAPH <urn:sparql:tests:subquery> { <#alice> <#name> "Alice" . <#alice> <#name> "Alice Foo" . <#alice> <#name> "A. Foo" . <#alice> <http://xmlns.com/foaf/0.1/knows> <#bob>, <#carol> . <#bob> <#name> "Bob" . <#bob> <#name> "Bob Bar" . <#bob> <#name> "B. Bar" . <#carol> <#name> "Carol" . <#carol> <#name> "Carol Baz" . <#carol> <#name> "C. Baz" . } }

  4. Query the graph data by using a sub-query in the SPARQL query statement:

    SELECT ?y ?minName WHERE { <#alice> <http://xmlns.com/foaf/0.1/knows> ?y . { SELECT ?y (MIN(?name) AS ?minName) WHERE { ?y <#name> ?name . } GROUP BY ?y } }

  5. View the SPARQL Query Definition via SPARQL Protocol URL;
  6. View the SPARQL Query Results via SPARQL Protocol URL

Related