用字符串连接参数化的Sparql查询

问题描述 投票:0回答:1

我想编写一个Sparql查询来获取有关特定维基百科文章的信息。我是sparql的新手,可以像使用.format在python中一样,将zlist用作参数并将其传递给文章列表,以使用一些见解。

SELECT DISTINCT ?lemma ?item 
WHERE {
  ?sitelink schema:about ?item;
    schema:isPartOf <https://de.wikipedia.org/>;
    schema:name ?lemma.
  FILTER (?lemma IN (zlist@de))
}

例如,我尝试不成功:

from SPARQLWrapper import SPARQLWrapper, JSON
import pandas as pd
sparql = SPARQLWrapper("https://query.wikidata.org/sparql")
sparql.setReturnFormat(JSON)
mylist = "Prato della Valle"

sparql.setQuery("""
SELECT DISTINCT ?item ?lemma ?instance_of 
WHERE {
  ?item wdt:P31 ?instance_of.    
  ?sitelink schema:about ?item;
    schema:isPartOf <https://de.wikipedia.org/>;
    schema:name ?lemma.
    FILTER (?lemma IN ( { %s }@de))
}                  
"""%mylist) 

results = sparql.query().convert()
results_df = pd.io.json.json_normalize(results['results']['bindings'])
print(results_df)

但是,我能够使它们正常工作:

from SPARQLWrapper import SPARQLWrapper, JSON
import pandas as pd

mylist = ["word2vec"]
mystring = '"' + '" "'.join(mylist) + '"'
# mystring = (' '.join('"{0}"'.format(v) for v in mylist) )

sparql = SPARQLWrapper("https://query.wikidata.org/sparql")

sparql.setQuery("""
    SELECT DISTINCT ?item {
    VALUES ?searchTerm { %s }
    SERVICE wikibase:mwapi {
        bd:serviceParam wikibase:api "EntitySearch".
        bd:serviceParam wikibase:endpoint "www.wikidata.org".
        bd:serviceParam mwapi:search ?searchTerm.
        bd:serviceParam mwapi:language "en".
        ?item wikibase:apiOutputItem mwapi:item.
        ?num wikibase:apiOrdinal true.
    }
    ?item (wdt:P279|wdt:P31) ?type
    }
    ORDER BY ?searchTerm ?num                    
""" % mystring ) 
sparql.setReturnFormat(JSON)
results = sparql.query().convert()
results_df = pd.io.json.json_normalize(results['results']['bindings'])
print(results_df)
from SPARQLWrapper import SPARQLWrapper, JSON
sparql = SPARQLWrapper("http://live.dbpedia.org/sparql")
sparql.setReturnFormat(JSON)

my_variable = 'dbc:Meteorological_concepts'

sparql.setQuery(" ASK {{ {}  skos:broader{{1,7}} dbc:Medicine }} ".format(my_variable))
results = sparql.query().convert()
print(results['boolean'])
from SPARQLWrapper import SPARQLWrapper, JSON
from string import Template

sparql = SPARQLWrapper("http://dbpedia.org/sparql")

query = Template("""
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    SELECT ?label
    WHERE { $uri rdfs:label ?label }
""")

sparql.setQuery(query.substitute(uri='<http://dbpedia.org/resource/Asturias>'))
sparql.setReturnFormat(JSON)
results = sparql.query().convert()
for result in results["results"]["bindings"]:
    print (result["label"]["value"])

注意:This stackoverflow answerthisalso this and this以及此Github issuethis one最为有用。

python-3.x sparql rdflib sparqlwrapper
1个回答
0
投票

在这种情况下,我的列表项必须用单引号引起来。并且必须删除FILTER行中变量周围的{}。

from SPARQLWrapper import SPARQLWrapper, JSON
import pandas as pd
sparql = SPARQLWrapper("https://query.wikidata.org/sparql")
sparql.setReturnFormat(JSON)
mylist = 'Prato della Valle'

sparql.setQuery("""
SELECT DISTINCT ?item ?lemma ?instance_of 
WHERE {
  ?item wdt:P31 ?instance_of.    
  ?sitelink schema:about ?item;
    schema:isPartOf <https://de.wikipedia.org/>;
    schema:name ?lemma.
    FILTER (?lemma IN ( %s @de))
}                  
"""%mylist) 

results = sparql.query().convert()
results_df = pd.io.json.json_normalize(results['results']['bindings'])
print(results_df)
© www.soinside.com 2019 - 2024. All rights reserved.