【问题标题】:How to create a parameterised query in SPARQLWrapper in python如何在 python 的 SPARQLWrapper 中创建参数化查询
【发布时间】:2019-02-22 12:21:17
【问题描述】:

我正在使用以下使用 SPARQLWrapper 的 sparql 查询,如下所示。

from SPARQLWrapper import SPARQLWrapper, JSON
sparql = SPARQLWrapper("http://live.dbpedia.org/sparql")
sparql.setReturnFormat(JSON)
sparql.setQuery(" ASK { dbc:Meteorological_concepts skos:broader{1,7} dbc:Medicine } ")
results = sparql.query().convert()
print(results['boolean'])

此查询返回正确的输出False

我尝试通过将查询转换为参数化查询来修改上述代码(通过使用category name 的变量,如下所示)。

from SPARQLWrapper import SPARQLWrapper, JSON
sparql = SPARQLWrapper("http://live.dbpedia.org/sparql")
sparql.setReturnFormat(JSON)

my_variable = 'dbc:Meteorological_concepts'

sparql.setQuery(" ASK { ?my_variable skos:broader{1,7} dbc:Medicine } ")
results = sparql.query().convert()
print(results['boolean'])

做了这个修改后,现在代码返回True,这是不正确的。只是想知道我的代码哪里出错了。

如果需要,我很乐意提供更多详细信息。

【问题讨论】:

标签: python sparql sparqlwrapper


【解决方案1】:

如果你使用 Python 3.6+,你可以使用 f-strings:

f" ASK {{ {my_variable}  skos:broader{{1,7}} dbc:Medicine }} "

将会

' ASK { dbc:Meteorological_concepts  skos:broader{1,7} dbc:Medicine } '

对于旧版本,您可以使用format

" ASK {{ {}  skos:broader{{1,7}} dbc:Medicine }} ".format(my_variable)

产生相同的输出。

【讨论】:

    【解决方案2】:

    因为要引入变量的值,所以必须要出字符串。并且您不要使用? 来执行此操作,而是使用字符串开头 + your_variable + 字符串结尾的串联来执行此操作。

    from SPARQLWrapper import SPARQLWrapper, JSON
    sparql = SPARQLWrapper("http://live.dbpedia.org/sparql")
    sparql.setReturnFormat(JSON)
    
    my_variable = 'dbc:Meteorological_concepts'
    
    sparql.setQuery(" ASK { "+my_variable+" skos:broader{1,7} dbc:Medicine } ")
    results = sparql.query().convert()
    print(results['boolean'])
    

    【讨论】:

      【解决方案3】:

      这段代码应该可以解决你的问题,检查一下。

      from SPARQLWrapper import SPARQLWrapper, JSON
      sparql = SPARQLWrapper("http://dbpedia.org/sparql")
      sparql.setQuery("\n"
                          "    PREFIX dbpedia: <http://dbpedia.org/resource/>"
                          " PREFIX dbo: <http://dbpedia.org/ontology/>"
                          "PREFIX dbp: <http://dbpedia.org/property/>\n"
                          "PREFIX foaf: <http://xmlns.com/foaf/0.1/>\n"
                          "PREFIX rdfs:   <http://www.w3.org/2000/01/rdf-schema#>\n"
                          "PREFIX dct:    <http://purl.org/dc/terms/>\n"
                          "SELECT DISTINCT ?name  ?birthDate   WHERE {\n"
                         "dbpedia:"+d+" foaf:name ?name\n"
                          "}\n"
                          "                   ")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-11
        • 1970-01-01
        • 1970-01-01
        • 2016-08-19
        • 2022-01-06
        • 2021-05-28
        相关资源
        最近更新 更多