Is there a Hello World example for SPARQL with RDFLib?

I would like to get the smallest, but still self-consistent and working example of using SPARQL from RDFLib. I have RDFLib version 4.0.1.

I would like to have code that executes the following

  • Import RDFLib.
  • Creates a simple graph (2 to 4 relationships)
  • Writes this graph to a rdf file.
  • Reads a graph from a file.
  • Use SPARQL to extract something from the chart.

ADDED

I tried it myself (at first without writing or reading from the file), and I could not do it. This is what I have:

import rdflib g = rdflib.ConjunctiveGraph() has_border_with = rdflib.URIRef('www.example.org/has_border_with') located_in = rdflib.URIRef('www.example.org/located_in') germany = rdflib.URIRef('www.example.org/country1') france = rdflib.URIRef('www.example.org/country2') china = rdflib.URIRef('www.example.org/country3') mongolia = rdflib.URIRef('www.example.org/country4') europa = rdflib.URIRef('www.example.org/part1') asia = rdflib.URIRef('www.example.org/part2') g.add((germany,has_border_with,france)) g.add((china,has_border_with,mongolia)) g.add((germany,located_in,europa)) g.add((france,located_in,europa)) g.add((china,located_in,asia)) g.add((mongolia,located_in,asia)) x = g.query("""select ?country where { ?country www.example.org/located_in www.example.org/part1 }""") print x 

As a result, I get:

 Traceback (most recent call last): File "hello_world.py", line 23, in <module> x = g.query("""select ?country where { ?country www.example.org/located_in www.example.org/part1 }""") File "/usr/local/lib/python2.7/dist-packages/rdflib-4.0.1-py2.7.egg/rdflib/graph.py", line 1045, in query query_object, initBindings, initNs, **kwargs)) File "/usr/local/lib/python2.7/dist-packages/rdflib-4.0.1-py2.7.egg/rdflib/plugins/sparql/processor.py", line 72, in query parsetree = parseQuery(strOrQuery) File "/usr/local/lib/python2.7/dist-packages/rdflib-4.0.1-py2.7.egg/rdflib/plugins/sparql/parser.py", line 1034, in parseQuery return Query.parseString(q, parseAll=True) File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 1032, in parseString raise exc pyparsing.ParseException: Expected "}" (at char 24), (line:1, col:25) 
+4
source share
1 answer

there are several problems:

  • specify resources starting with http://
  • URLs in SPARQL queries need <> around them
  • use simple Graph instead of ConjunctiveGraph
  • you can use the Graph.serialize and Graph.parse to save and read from a file (see code)

try the following changes to the sample code:

 import rdflib g = rdflib.Graph() has_border_with = rdflib.URIRef('http://www.example.org/has_border_with') located_in = rdflib.URIRef('http://www.example.org/located_in') germany = rdflib.URIRef('http://www.example.org/country1') france = rdflib.URIRef('http://www.example.org/country2') china = rdflib.URIRef('http://www.example.org/country3') mongolia = rdflib.URIRef('http://www.example.org/country4') europa = rdflib.URIRef('http://www.example.org/part1') asia = rdflib.URIRef('http://www.example.org/part2') g.add((germany,has_border_with,france)) g.add((china,has_border_with,mongolia)) g.add((germany,located_in,europa)) g.add((france,located_in,europa)) g.add((china,located_in,asia)) g.add((mongolia,located_in,asia)) q = "select ?country where { ?country <http://www.example.org/located_in> <http://www.example.org/part1> }" x = g.query(q) print list(x) # write graph to file, re-read it and query the newly created graph g.serialize("graph.rdf") g1 = rdflib.Graph() g1.parse("graph.rdf", format="xml") x1 = g1.query(q) print list(x1) 
+8
source

Source: https://habr.com/ru/post/1483520/


All Articles