#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. Еще раз спасибо за ваше предложение, я постараюсь ответить на этот вопрос сейчас.