A SPARQL query — AllegroGraph Python client 104.2.0 documentation (original) (raw)
Example 3: A SPARQL query¶
SPARQL stands for the “SPARQL Protocol and RDF Query Language,” a recommendation of theWorld Wide Web Consortium (W3C) . SPARQL is a query language for retrieving RDF triples.
Our next example illustrates how to evaluate a SPARQL query. This is the simplest query, the one that returns all triples. Note that we will use the same triples that were used in Example 2: Asserting and retracting triples.
Let’s create the connection first:
from franz.openrdf.connect import ag_connect
conn = ag_connect("python-tutorial", create=True, clear=True)
And now we can add our data and define the query:
conn.addData(""" @base http://example.org/ .
<people/alice> a <ontology/Person> ;
<ontology/name> "Alice" .
<people/bob> a <ontology/Person> ;
<ontology/name> "Bob" .
""") query_string = "SELECT ?s ?p ?o WHERE {?s ?p ?o . } ORDER BY ?s ?p ?o"
The SELECT
clause returns the variables ?s
, ?p
and ?o
in the binding set. The variables are bound to the subject, predicate and objects values of each triple that satisfies the WHERE clause. In this case the WHERE clause is unconstrained. The dot (.
) in the fourth position signifies the end of the pattern. We use ORDER BY to return the results in a consistent order for demonstration purposes.
The connection object’s prepareTupleQuery() method creates a query object that can be evaluated one or more times. The results are returned in an iterator that yields a sequence of binding sets.
from franz.openrdf.query.query import QueryLanguage
tuple_query = conn.prepareTupleQuery(QueryLanguage.SPARQL, query_string) result = tuple_query.evaluate()
Below we illustrate one method for extracting the values from a binding set, indexed by the name of the corresponding column variable in the SELECT
clause.
with result: for binding_set in result: s = binding_set.getValue("s") p = binding_set.getValue("p") o = binding_set.getValue("o") print("%s %s %s" % (s, p, o))
http://example.org/people/alice http://example.org/ontology/name "Alice" http://example.org/people/alice http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.org/ontology/Person http://example.org/people/bob http://example.org/ontology/name "Bob" http://example.org/people/bob http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.org/ontology/Person
Note that we have wrapped the whole result processing in a with
statement. The reason is that result objects must be closed after processing to release resources. The most convenient way to ensure this is the with
statement, but it is also possible to explicitly call close()(e.g. in a finally
block).