Как использовать SPARQL для запроса локального ttl-файла?

#sparql #rdf #ttl

#sparql #rdf #ttl

Вопрос:

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

Вот пример ttl-файла, который я использовал.

 # File name : WikipediaGraph.ttl
@prefix ns1: <http://www.example.com/> .

<http://en.wikipedia.org/wiki/Abilene,_Texas> ns1:2010population "117063" ;
    ns1:2019population "123420" ;
    ns1:areaSqKm "276.4" ;
    ns1:areaSqMile "106.7" ;
    ns1:popChange "5.43" ;
    ns1:popPerSqKm "442" ;
    ns1:popPerSqMile "1146" ;
    ns1:state <http://en.wikipedia.org/wiki/Texas> .
 

Пример вопроса, на который я хочу получить ответ, приведен ниже.

  • В каком штате (штатах) больше всего городов в списке? *
  • В каком штате (штатах) больше всего населения в городах в списке? *
  • В каком штате (штатах) города в списке выросли больше всего? *

Поэтому я застрял с самого начала, так как не могу получить результат от простого запроса.

 import rdflib
from rdflib import Graph, URIRef, Literal, Namespace, RDF

g=rdflib.Graph()
g.parse("WikipediaGraph.ttl", format='turtle')

results = g.query("""
    PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
    PREFIX ns1: <http://www.example.com/>
    SELECT ?v
    WHERE {
    ?v rdf:type ns1:state .
    }
    ORDER BY ?NAME
""")

print('Results!')
for row in results:
    print(row)
 

Не могли бы вы посоветовать, как мне следует написать запрос на вышеуказанный вопрос?

Комментарии:

1. что не работает с вашим запросом? Я имею в виду, что это явно не соответствует данным примера. В rdf:type ваших данных нет тройки, верно? Более того, ns1:state это свойство, учитывая, что оно используется в тройном <http://en.wikipedia.org/wiki/Abilene,_Texas> ns1:state <http://en.wikipedia.org/wiki/Texas> . — так вот в чем проблема.

2. Получение всех городов с указанием их состояния было бы SELECT ?city ?state WHERE {?city ns1:state ?state .} — вот с чего вам следует начать. Остальное требует группирования и агрегирования функций и т. Д.

3. @UninformedUser Спасибо и извините, что я не совсем понимаю ваш первый ответ. Итак, я должен сначала исправить данные, прежде чем смогу правильно их запросить?

4. О, хорошо, я действительно получаю ответ, основанный на вашем совете. Поэтому я попробую другие запросы, чтобы получить правильный код. «‘ результаты = g.запрос(«»» ПРЕФИКС rdf: < w3.org/1999/02/22-rdf-syntax-ns # > ПРЕФИКС ns1: < example.com > ВЫБЕРИТЕ ?город ?штат , ГДЕ { ? город ns1: штат?штат . } «»») печать (результаты) для строки в результатах: печать (строка) «‘

5. Еще раз спасибо за ваше предложение, я постараюсь ответить на этот вопрос сейчас.