Получение всех статей со свойством «Момент времени» в SPARQL

#sparql #wikidata

Вопрос:

Я хотел бы запросить все статьи Википедии, которые имеют свойство P585 (момент времени). К сожалению, некоторые из них очень неясны и находятся в под-под свойствах, как на картинке. Я хотел бы иметь возможность фильтровать эти даты, независимо от того, в какой собственности они находятся.

введите описание изображения здесь

Запрос: «?элемент p:P585/ps:P585 ?свидание. «возвращает результаты только там, где точка во времени является корневой категорией, и, что бы я ни пытался, я не могу получить все статьи, в которых где-то есть «точка во времени». Или, если это невозможно, по крайней мере, я хотел бы иметь возможность указать «значительное событие/*/момент времени»…

Спасибо!

Ответ №1:

Проблема в том, что вы хотите, чтобы «момент времени» был квалифицируемым свойством, а не свойством заявления, как вы написали в данный момент. Позвольте мне уточнить, что я имею в виду, рассматривая следующий вопрос о Q76 (Бараке Обаме) и P26 (супруге):

 SELECT *
WHERE {
  wd:Q76 p:P26 ?statement .
  ?statement ?p ?o
     }
 

ps:P26 говорит нам, кто является объектом заявления, то есть Мишель Обама.

Примечание: Часто вы обнаружите, что для каждого ?a p:Px/ps:Px ?b есть ?a wdt:Px ?b (это зависит от ранга заявления, например, есть два заявления о месте рождения Обамы, в котором он указан как Гавайи, другое-как Кения, но только заявление, в котором перечислены Гавайи, занимает достаточно высокое место, чтобы гарантировать прямую связь с wdt ).

Однако, если мы хотим найти определяющие свойства в заявлении (например, когда Обамы были женаты, где и т. Д.), Тогда нам нужно другое пространство имен, в данном случае pq , где » q » означает определитель.

Как это тогда соотносится с вашим примером? В вашем примере «основное» свойство, которое вы ищете, — это «значимое событие», поэтому P793 и квалификатор P585 .

Таким образом, ваш запрос должен быть таким:

 SELECT *
WHERE {
?subject p:P793 ?statement .
?statement pq:P585 ?date .
}
 

Или для краткости:

 SELECT *
WHERE {
?subject p:P793/pq:P585 ?date .
}
 

Если вас дополнительно интересует объект значимого события (в вашем примере это «запуск ракеты» Q797476 ), то вы можете указать это следующим образом:

 SELECT *
WHERE {
?subject p:P793 ?statement .
?statement pq:P585 ?date ;
           ps:P793 wd:Q797476 .
}
 

Обратите внимание на роль, которую играют пространства имен и номера свойств.

Комментарии:

1. Большое вам спасибо за подробное объяснение, это помогает!