繁体   English   中英

是否有一个带有RDFLib的SPARQL的Hello World示例?

[英]Is there a Hello World example for SPARQL with RDFLib?

我希望尽可能小,但仍然是自我一致的,并且使用RDFLib中的SPARQL。 我有RDFLib版本'4.0.1'。

我想有一个代码执行以下操作

  1. 导入RDFLib。
  2. 创建一个简单的图形(从2到4关系)
  3. 将此图形写入rdf格式的文件中。
  4. 从文件中读取图形。
  5. 使用SPARQL从图中提取内容。

添加

我自己尝试(首先没有写入和读取文件),我无法做到。 这就是我所拥有的:

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

结果我得到:

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)

有几个问题:

  1. 命名以http://开头的资源
  2. SPARQL查询中的URL需要<>
  3. 使用简单的Graph而不是ConjunctiveGraph
  4. 您可以使用Graph.serializeGraph.parse方法来保存和读取文件(请参阅代码)

尝试对示例代码进行以下修改:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM