Użycie Pythona rdflib: jak włączyć literały w zapytaniach sparql?

W zapytaniach mogę zawierać identyfikatory URI i zmienne, ale nie mogę dołączać literałów do zapytań.

Mam tutaj kod, który z powodzeniem odczytuje plik RDF, znajduje wszystkie trójki RDF za pomocą skos: prefLabels, zlicza je, a następnie identyfikuje kilka konkretnych z zestawu słów kluczowych:

import rdflib.plugins.sparql as sparql
import rdflib
import rdflib.graph as g

graph = g.Graph()
# Read the RDF file
graph.parse(
   'h:\......SKOSTaxonomy.rdf',
   format='xml')

# Build and execute the query
q = sparql.prepareQuery('SELECT ?s ?p ?o WHERE { ?s ?p ?o .}')
p = rdflib.URIRef("http://www.w3.org/2004/02/skos/core#prefLabel")
qres = graph.query(q, initBindings = {'p' : p})

print len(qres)

# Look for keywords among the results
keywords = set([u'Jackknifing', 'Technology-mapping', 'Something random'])

for (subj, pred, obj) in qres:
    if obj.value in keywords:
        print obj.value

Zgodnie z oczekiwaniami kod ten drukuje:

2299
Jackknifing
Technology-mapping

ponieważ mapowanie Jackknifing i Technology to prefabrykaty w pliku.

To, co naprawdę chcę zrobić, to skonstruować i wykonać zapytanie Sparql, aby po kolei szukać każdego słowa kluczowego. Ale w tym miejscu dochodzę do wniosku, że nie mogę umieścić ciągu w zapytaniu. Próbowałem tego, na przykład:

o = rdflib.Literal(u'Jackknifing')
qres = graph.query(q, initBindings = {'p' : p, 'o' : o})

ale qres jest pusty. Próbowałem również umieścić dosłownie w zapytaniu, np.

q = sparql.prepareQuery('SELECT ?s ?p WHERE { ?s ?p "Technology-mapping" .}')
qres = graph.query(q, initBindings = {'p' : p})

ale to również zwraca pusty wynik.

W jaki sposób zapytania są uwzględniane w zapytaniu?

questionAnswers(1)

yourAnswerToTheQuestion