@@ -274,3 +274,45 @@ The documents saved above can now be loaded into single graph::
274
274
curr_graph.parse(file_B)
275
275
276
276
277
+ The graph is now ready to accept simple SPARQL queries. Queries need the odML RDF namespace though to process the odml specific entries::
278
+
279
+ from odml.tools.rdf_converter import ODML_NS
280
+
281
+ from rdflib import Namespace, RDF, RDFS
282
+ from rdflib.plugins.sparql import prepareQuery
283
+
284
+ # preparing the query namespace
285
+ NAMESPACE_MAP = {"odml": Namespace(ODML_NS), "rdf": RDF, "rdfs": RDFS}
286
+
287
+ # preparing a query requesting the name of all sections in the graph
288
+ q_string = "SELECT * WHERE {?s rdf:type odml:Section . ?s odml:hasName ?sec_name .}"
289
+ sec_query = prepareQuery(q_string, initNs=NAMESPACE_MAP)
290
+
291
+ for row in curr_graph.query(sec_query):
292
+ print("Section name: '%s'" % row.sec_name)
293
+
294
+ The query returns::
295
+
296
+ Section name: 'recording_A'
297
+ Section name: 'recording_B'
298
+ Section name: 'analysis_A'
299
+
300
+
301
+ This query returns all sections from the first file, since reasoning is not yet enabled. This can be changed by adding reasioning to the query::
302
+
303
+ from owlrl import DeductiveClosure, RDFS_Semantics
304
+
305
+ DeductiveClosure(RDFS_Semantics).expand(curr_graph)
306
+
307
+ for row in curr_graph.query(sec_query):
308
+ print("Section name: '%s'" % row.sec_name)
309
+
310
+
311
+ This query now returns the sections from both files::
312
+
313
+ Section name: 'recording_B'
314
+ Section name: 'recording_A'
315
+ Section name: 'recording_protocol_B'
316
+ Section name: 'recording_protocol_A'
317
+ Section name: 'analysis_A'
318
+
0 commit comments