Wikimedia Commons: получение названий подкатегорий (используя SPARQL или API MediaWiki)

Для определенной категории (например, https://commons.wikimedia.org/wiki/Category:Motorcycles) Я хочу получить имена всех подкатегорий рекурсивно, либо в SPARQL:

SELECT ?category ?entityLabel WHERE {
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
  #get sub categories of category wd:Q7025402
}
LIMIT 10000

или с помощью MediaWiki API:

https://commons.wikimedia.org/w/api.php?{get all subcategories of Category:Motorcycles}

Есть ли способ сделать это?


person Samantha    schedule 20.07.2018    source источник
comment
Да, есть способы сделать это. Что вы пробовали? И где вы планируете выполнить этот запрос (поскольку конечные точки важны для полезных ответов)? (Обратите внимание, что SparQL не существует. Это SPARQL — протокол SPARQL и язык запросов RDF. )   -  person TallTed    schedule 20.07.2018
comment
граф категорий поддерживается в пространстве имен categories, поэтому вы должны использовать https://query.wikidata.org/bigdata/namespace/categories/sparql в качестве конечной точки SPARQL.   -  person UninformedUser    schedule 20.07.2018
comment
сложный запрос: PREFIX gas: <http://www.bigdata.com/rdf/gas#> prefix mediawiki: <https://www.mediawiki.org/ontology#> SELECT * WHERE {SERVICE gas:service { gas:program gas:gasClass "com.bigdata.rdf.graph.analytics.BFS" . gas:program gas:linkType mediawiki:isInCategory . gas:program gas:traversalDirection "Reverse" . gas:program gas:in <https://en.wikipedia.org/wiki/Category:Motorcycles>. # one or more times, specifies the initial frontier. gas:program gas:out ?out . gas:program gas:out1 ?depth . gas:program gas:maxIterations 8 . } } ORDER BY ASC(?depth)   -  person UninformedUser    schedule 20.07.2018
comment
более простой запрос: SELECT ?out ?depth WHERE { SERVICE mediawiki:categoryTree { bd:serviceParam mediawiki:start <https://en.wikipedia.org/wiki/Category:Motorcycle> . bd:serviceParam mediawiki:direction "Reverse" . bd:serviceParam mediawiki:depth 5 . } } ORDER BY ASC(?depth)   -  person UninformedUser    schedule 20.07.2018


Ответы (2)


SPARQL

По состоянию на июль 2018 года структура категорий Commons Викимедиа не охвачено Викиданными:

Исключением является Commons, который имеет самый большой набор категорий, поэтому мы решили пока не освещать его, пока не удостоверимся, что все работает, как и планировалось, с меньшими наборами данных.

API MediaWiki

Невозможно, см. T37402.

Альтернативы

Используйте инструмент PetScan:

person Stanislav Kralin    schedule 21.07.2018
comment
Инструмент PetScan работал отлично. Большое спасибо :) Кроме того, я также использовал этот инструмент для получения названий медиафайлов, относящихся к этим категориям. Спасибо также за исправление вопроса и за предоставленные пояснения. - person Samantha; 27.07.2018

API:

https://commons.wikimedia.org/w/api.php?action=query&list=categorymembers&cmtitle=Category:Motorcycles&cmtype=subcat&utf8=1&format=json

SQL:

https://quarry.wmflabs.org/query/28793

(через инструмент Quarry или напрямую, если у вас есть учетная запись в Toolforge)

Но рекурсивно только через PetScan или вручную через API/SQL через цепочку запросов (запрос для каждой категории, где subcats не равен 0):

https://commons.wikimedia.org/w/api.php?action=query&generator=categorymembers&gcmtitle=Category:Motorcycles&gcmtype=subcat&prop=categoryinfo&utf8=1&format=json

https://quarry.wmflabs.org/query/28794
person Siarhei    schedule 06.08.2018