Uso de rdflib de Python: ¿cómo incluir literales en consultas de sparql?

Puedo incluir URI y variables en mis consultas, pero no puedo incluir literales en mis consultas.

Aquí, tengo un código que lee con éxito un archivo RDF, encuentra todos los triples RDF con skos: prefLabels, los cuenta y luego identifica un par de específicos de un conjunto de palabras clave:

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

Como era de esperar, este código se imprime:

2299
Jackknifing
Technology-mapping

ya que Jackknifing y Technology-mapping son prefLabels en el archivo.

Lo que realmente quiero hacer es construir y ejecutar una consulta Sparql para buscar cada palabra clave a su vez. Pero aquí es donde me desprendo, porque no puedo poner una cadena en la consulta. He intentado esto, por ejemplo:

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

pero qres esta vacio También he intentado poner un literal explícitamente en la consulta, por ejemplo,

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

pero eso también devuelve un resultado vacío.

¿Cómo se incluyen los literales en una consulta?

Respuestas a la pregunta(1)

Su respuesta a la pregunta