Пустой результат запроса SPARQL - PullRequest
0 голосов
/ 24 октября 2019

Попытка выполнить запрос SPARQL для локального файла ttl. Я сделал это успешно раньше, но не этот. Я подозреваю, что это как-то связано с пространствами имен.

Попытка распечатать, что это был за запрос, и все, что я получаю, это "rdflib.plugins.sparql.processor.SPARQLResult at 0x1fbe05d3400", так что что-то там есть.

Вот файл ttl

 # filename: ex050.ttl

 @prefix foaf: <http://xmlns.com/foaf/0.1/> . 

 <http://www.learningsparql.com/ns/demo#i93234>
         foaf:nick "Dick" ;  
         foaf:givenname "Richard" ; 
         foaf:mbox "richard49@hotmail.com" ;
         foaf:surname "Mutt" ;
         foaf:workplaceHomepage <http://www.philamuseum.org/> ;
         foaf:aimChatID "bridesbachelor" . 

А вот код Python, запускающий запрос SPARQL

 filename = "C:/DataStuff/SemanticOntology/LearningSPARQLExamples/ex050.ttl" 
 import rdflib
 g = rdflib.Graph()

 result = g.parse(filename, format='ttl')
 query = """
 PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
 PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

 SELECT ?propertyLabel ?value 
 WHERE
 {
   ?s ?property ?value . 
   ?property rdfs:label ?propertyLabel . 
 }

 """

 results=g.query(query)
 print('Results!')
 for row in results:
     print(row)

Я знаю, что это что-то простое, что я облажался. Пожалуйста, помогите!

1 Ответ

1 голос
/ 24 октября 2019

Ладно - заливая спецификации RDFILB (https://buildmedia.readthedocs.org/media/pdf/rdflib/4.2.1/rdflib.pdf), Я обнаружил, что вы можете анализировать несколько файлов / URL-адресов один за другим. В результате получается объединенный файл. Поэтому, зная, что интересующий меня файл foaf можетбыть загруженным в http://www.xmlns.com/foaf/spec/index.rdf

Я получил файл, затем изменил программу на:

filename = "C:/DataStuff/SemanticOntology/LearningSPARQLExamples/ex050.ttl" 
filename2 = "C:/DataStuff/SemanticOntology/LearningSPARQLExamples/index.rdf"

g = rdflib.Graph()

g.parse(filename, format='ttl')
g.parse(filename2)
query = """
PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT ?propertyLabel ?value 
WHERE
{
  ?s ?property ?value . 
  ?property rdfs:label ?propertyLabel . 
}

"""

results=g.query(query)
print('Results!')
for row in results:
    print(row)

, которая затем сработала, распечатав:

Results!
(rdflib.term.Literal('Given name'), rdflib.term.Literal('Richard'))
(rdflib.term.Literal('Surname'), rdflib.term.Literal('Mutt'))
(rdflib.term.Literal('AIM chat ID'), rdflib.term.Literal('bridesbachelor'))
(rdflib.term.Literal('personal mailbox'), rdflib.term.Literal('richard49@hotmail.com'))
(rdflib.term.Literal('workplace homepage'), rdflib.term.URIRef('http://www.philamuseum.org/'))
(rdflib.term.Literal('nickname'), rdflib.term.Literal('Dick'))

распечаткаметки всех читаемых человеком свойств в моем исходном файле данных, хотя я не определял эти свойства.

Я предполагаю, что этап загрузки файла можно пропустить, напрямую используя URL во второмоператор parse. Однако я не могу сделать это, поскольку я нахожусь в корпоративной среде, и я не вижу способа использовать оператор parse с прокси.

...