#sparql #mediawiki-api #wikibase
#sparql #mediawiki-api #wikibase
Вопрос:
Я пытаюсь перечислить все свойства, созданные в установленной мной wikibase, используя docker-compose, на основе этой установки.
Теперь я хочу перечислить все свойства, доступные в этой wikibase, аналогично получению этого списка через:
<wikibase.url>wiki/Special:ListProperties
Я также извлек этот список через SPARQL со следующим запросом SPARQL:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX schema: <http://schema.org/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT DISTINCT
?property
?propertyType
?propertyLabel
?propertyAltLabel
WHERE {
?property a wikibase:Property ;
rdfs:label ?propertyLabel ;
wikibase:propertyType ?propertyType .
OPTIONAL {?property skos:altLabel ?propertyAltLabel .}
}
Выполнение этого запроса SPARQL обходится дорого, и мне нужно часто запускать этот запрос, поэтому я бы очень хотел получить этот список свойств в основном API wikibase.
Возможно ли это?
Ответ №1:
Если вы знаете номер пространства имен для свойств в целевой вики (обычно это 122, если в вики есть пространство имен Item:, или 120, если, как в викиданных, элементы находятся в основном пространстве имен), вы можете использовать core allpages API: https://www.wikidata.org/w/api.php?action=queryamp;list=allpagesamp;apnamespace=120
Чтобы одновременно получать метки, используйте его в качестве генератора и объедините с API entityterms (новый в 1.35; похоже, он еще не задокументирован, но см. T257658): https://www.wikidata.org/w/api.php?action=queryamp;generator=allpagesamp;gapnamespace=120amp;prop=entitytermsamp;wbetterms=label
Комментарии:
1. Возможно, я ошибаюсь, но разве этот вызов API не просто возвращает 10 лучших результатов? Что, если пользователь не знает верхний предел
aplimit
параметра feed, и что, если свойства содержат более 500 элементов?2. Если результатов больше, используйте продолжение ( mediawiki.org/wiki/API:Query#Example_4:_Continuing_queries ), например .get(…, продолжение=True) в mwapi ( pythonhosted.org/mwapi/session.html#mwapi.Session.get ).