SPARQL на примерах Wikidata: различия между версиями
D1g (обсуждение | вклад) |
Нет описания правки |
||
Строка 1: | Строка 1: | ||
{{Статья|Черновик|SPARQL-with-Wikidata}} | {{Статья|Черновик|SPARQL-with-Wikidata}} | ||
{{Аннотация|Wikidata это открытый проект, потенциально интересный в гео-проектах и доступный в виде публичной SPARQL точки}} | {{Аннотация|Wikidata - это открытый проект, потенциально интересный в гео-проектах и доступный в виде публичной SPARQL-точки}} | ||
== Инструментарий запросов == | == Инструментарий запросов == | ||
Строка 10: | Строка 10: | ||
https://query.wikidata.org - веб-интерфейс. | https://query.wikidata.org - веб-интерфейс. | ||
У этого инструмента есть целое руководство на английском https://www.mediawiki.org/wiki/Wikidata_query_service/User_Manual и репозиторий для разработчиков https://github.com/wikimedia/wikidata-query-rdf | У этого инструмента есть целое руководство на английском языке https://www.mediawiki.org/wiki/Wikidata_query_service/User_Manual и репозиторий для разработчиков https://github.com/wikimedia/wikidata-query-rdf. | ||
Обратите внимание что результаты запросы можно скачать в CSV | Обратите внимание, что результаты запросы можно скачать в формате CSV - хорошее подспорье для более серьёзной работы с помощью других инструментов. | ||
Также можно отфильтровать результаты используя поиск по "Moscow" | Также можно отфильтровать результаты, используя поиск по "Moscow". | ||
== Wikidata == | == Wikidata == | ||
Строка 33: | Строка 33: | ||
* 2 строка: выбираем субъекты (?item) у которых явно указано, что они в стране - ''Россия'' (Q159) | * 2 строка: выбираем субъекты (?item) у которых явно указано, что они в стране - ''Россия'' (Q159) | ||
* 3 строка: выбираем субъекты (?item) у которых явно указано, что они суть - ''города'' (Q515) | * 3 строка: выбираем субъекты (?item) у которых явно указано, что они суть - ''города'' (Q515) | ||
* 4-6 строка: т.к. значения предиката "код города" P402 могут быть просто не заполнены у отдельных объектов, такие объекты будут исключены из результатов. Это не интуитивно для людей | * 4-6 строка: т.к. значения предиката "код города" P402 могут быть просто не заполнены у отдельных объектов, такие объекты будут исключены из результатов. Это не совсем интуитивно понятно для людей, привыкших к SQL-запросам (где NULL-значения возвращаются в большинстве случаев). В SPARQL ''необязательные значения''<ref>https://www.w3.org/TR/sparql11-query/#optionals</ref> нужно включать в результаты вручную. | ||
* 7 строка: выбираем все возможные субъекты и объекты у предиката P473 (код города). Примечание о части "?localdialingcode": в Wikidata у [https://www.wikidata.org/wiki/Q649 Москвы] указано сразу два объекта "495" и "499" у предиката P473, поэтому вернутся 2 результата, а не один. В SQL пришлось бы писать JOIN на ровном месте, а в SPARQL его нет вообще. | * 7 строка: выбираем все возможные субъекты и объекты у предиката P473 (код города). Примечание о части "?localdialingcode": в Wikidata у [https://www.wikidata.org/wiki/Q649 Москвы] указано сразу два объекта "495" и "499" у предиката P473, поэтому вернутся 2 результата, а не один. В SQL пришлось бы писать JOIN на ровном месте, а в SPARQL его нет вообще. | ||
Версия от 20:16, 7 ноября 2016
Wikidata - это открытый проект, потенциально интересный в гео-проектах и доступный в виде публичной SPARQL-точки
Инструментарий запросов
Запросы к Wikidata можно составлять с помощью различных SPARQL клиентов, но ключевой особенностью Wikidata это общедоступный и публичный endpoint. Более того, был написан простой web интерфейс к нему.
query.wikidata.org
https://query.wikidata.org - веб-интерфейс.
У этого инструмента есть целое руководство на английском языке https://www.mediawiki.org/wiki/Wikidata_query_service/User_Manual и репозиторий для разработчиков https://github.com/wikimedia/wikidata-query-rdf.
Обратите внимание, что результаты запросы можно скачать в формате CSV - хорошее подспорье для более серьёзной работы с помощью других инструментов.
Также можно отфильтровать результаты, используя поиск по "Moscow".
Wikidata
В рамках gis-lab в первую очередь интересуют предикаты (свойства объектов) относящиеся к географическим свойствам.
Географические предикаты в Wikidata
- ID отношения из OpenStreetMap - https://www.wikidata.org/wiki/Property:P402
- принадлежность стране - https://www.wikidata.org/wiki/Property:P17
Географические объекты в Wikidata
Примеры запросов
Самый простой пример пока.
Города в России с телефонными кодами
- 1 строка: SELECT запросы[1] выбирают данные или их часть
- 2 строка: выбираем субъекты (?item) у которых явно указано, что они в стране - Россия (Q159)
- 3 строка: выбираем субъекты (?item) у которых явно указано, что они суть - города (Q515)
- 4-6 строка: т.к. значения предиката "код города" P402 могут быть просто не заполнены у отдельных объектов, такие объекты будут исключены из результатов. Это не совсем интуитивно понятно для людей, привыкших к SQL-запросам (где NULL-значения возвращаются в большинстве случаев). В SPARQL необязательные значения[2] нужно включать в результаты вручную.
- 7 строка: выбираем все возможные субъекты и объекты у предиката P473 (код города). Примечание о части "?localdialingcode": в Wikidata у Москвы указано сразу два объекта "495" и "499" у предиката P473, поэтому вернутся 2 результата, а не один. В SQL пришлось бы писать JOIN на ровном месте, а в SPARQL его нет вообще.
SELECT ?item ?relationid ?itemLabel ?localdialingcode WHERE {
?item wdt:P17 wd:Q159.
?item wdt:P31 wd:Q515.
OPTIONAL {
?item wdt:P402 ?relationid.
}
?item wdt:P473 ?localdialingcode.
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}