Как перечислить все свойства в пользовательском экземпляре Wikibase

#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 ).