我想尽可能小,但仍然是使用 RDFLib 中的 SPARQL 的自洽和工作示例。我有 RDFLib 版本“4.0.1”。

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

  • 导入 RDFLib。
  • 创建一个简单的图(从 2 到 4 个关系)
  • 将此图写入 rdf 格式的文件中。
  • 从文件中读取图形。
  • 使用 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)
    

    最佳答案

    有几个问题:

  • http://
  • 开头命名您的资源
    SPARQL 查询中的
  • URL 需要 <> 围绕它们
  • 使用简单的 Graph 而不是 ConjunctiveGraph
  • 你可以使用 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)
    

    关于python - 是否有带有 RDFLib 的 SPARQL 的 Hello World 示例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16829351/

    10-11 01:55