Я пытался запросить данные OWL с помощью RDFlib (SPARQL), но я не понял, почему это не работает. Я тестировал тот же запрос в Protege (запрос SPARQL), и он отлично работает! Это мой код:Почему мой запрос не работает с использованием RDFlib
import rdflib
from rdflib import plugin
from rdflib.graph import Graph
g = Graph()
g.parse("/localPath/a.owl")
from rdflib.namespace import Namespace
ns = Namespace("http://oaei.ontologymatching.org/2011/benchmarks/101/onto.rdf#")
plugin.register(
'sparql', rdflib.query.Processor,
'rdfextras.sparql.processor', 'Processor')
plugin.register(
'sparql', rdflib.query.Result,
'rdfextras.sparql.query', 'SPARQLQueryResult')
#
qres = g.query(
"""
SELECT DISTINCT ?varClass ?varSubClass ?varSubClassComment ?varProperty ?varPropComment
WHERE {
{
?varClass rdf:type owl:Class .
?varProperty rdf:type owl:ObjectProperty ; rdfs:domain ?varClass . OPTIONAL{?varProperty rdfs:comment ?varPropComment} .
OPTIONAL{?varSubClass rdfs:subClassOf ?varClass ; rdfs:comment ?varSubClassComment} .
}
UNION
{
?varClass rdf:type owl:Class .
?varProperty rdf:type owl:DatatypeProperty ; rdfs:domain ?varClass . OPTIONAL{?varProperty rdfs:comment ?varPropComment}.
}
}
"""
, initNs=dict(
ns=Namespace("http://oaei.ontologymatching.org/2011/benchmarks/101/onto.rdf#")
)
)
for row in qres.result:
#print ("%s %s %s %s %s" % row) # %s represent the fields selected in the query
print row
print (len(qres.result))
Мой результат ничего. Нет ошибки, но длина файла результата равна 0. Что я делаю неправильно? Кто-нибудь может мне помочь?
Что такое содержимое '/localPath/a.owl?'? Трудно диагностировать, почему вы не получаете никаких результатов, если мы не можем видеть данные, к которым вы обращаетесь. –
Какую версию rdflib вы используете? Я не из Pythonista, но я только что установил версию 4.0.1 и версию 0.4 rdfextras, и когда я запускаю ваш код (меняя путь к «a.owl», с «a.owl», который вы предоставили в текущем каталоге), я получаю массу результатов –
Спасибо Joshua! Да, проблема не в данных, а в rdflib и rdfextras устарела! Оба пакета были причиной ошибки. Я использовал python из Canopy (rdflib v3.0.1-1 и rdfextras 0.1-1). Я обновил оба пакета во встроенном python на mac osx и протестировал один и тот же код. Теперь это работает. – Marcelo