Semantic MediaWiki: Как сделать запрос для страниц с промежуточными отношениями?

Предположим, я хотел бы связать несколько вики-страниц в "графе знаний". Допустим, вот краткий список географических объектов от большего к меньшему, где стрелки обозначают прямую ссылку MediaWiki:

Continent:Europe
^__Country:Netherlands
   ^__City:Amsterdam
      ^__Venue:Heineken Music Hall

Страницы выше имеют следующее содержание:

Континент: Европа

{{#set: | self:name = Europe }}
[[Category:Continents]]

Страна: Нидерланды

{{#set: | ref:continent = Continent:Europe | self:name = Netherlands }}
[[Category:Countries]]

Город: Амстердам

{{#set: | ref:country = Country:Netherlands | self:name = Amsterdam }}
[[Category:Cities]]

Место проведения:Heineken Music Hall

{{#set: | ref:city = City:Amsterdam | self:name = Heineken Music Hall }}
[[Category:Venues]]

Свойства объявлены со следующими типами:

  • self:name: [[has type::text]]
  • ref:continent, ref:country, ref:city: [[has type::page]]

Насколько я понимаю, как работает Semantic MediaWiki, #ask Функция работает на одном уровне. Скажем, {{#ask: [[self:name::+]] }} можно получить все 4 страницы, потому что все страницы имеют self:name набор свойств. Я также могу сузить результаты поиска, отфильтровав определенную категорию: {{#ask: [[Category:Venues]] [[ref:city::City:Amsterdam]] }}, Это позволяет сразу получить связанные страницы (и это легко, так как Venue:Heineken Music Hall страница связана с City:Amsterdam страница напрямую).

Теперь, скажем, я хотел бы показать все места, которые расположены в Continent:Europe, так Country:Netherlands а также City:Amsterdam следует рассматривать как-то неявно. {{#ask: [[Category:Venues]] [[ref:continent::Continent:Europe]] }} не может работать, потому что запрос объединяет два свойства, которые никогда не появляются вместе на одной странице. Итак, есть ли у Semantic MediaWiki какой-либо синтаксис / возможность запроса, позволяющая указать промежуточные отношения, чтобы он мог "сканировать" и "внутреннее соединение", предоставляя все места в Европе?

Возможно ли сделать запрос на нескольких страницах, указав промежуточные отношения? Или SMW предназначен только для "плоских" / помеченных отношений?


Обновить

Я не был очень конкретным о том, что я хочу получить. Допустим, вы должны описать событие, которое может быть преобразовано в удобочитаемую форму. В настоящее время в неструктурированной вики вы можете использовать собственный шаблон, подобный следующему:

{{Event
| date = 2012-12-03
| country = Netherlands
| city = Amsterdam
| venue = Heineken Music Hall
}}

со следующим сгенерированным результатом:

Выступление 3 декабря 2012 года состоялось в концертном зале Heineken Music Hall в Амстердаме, Нидерланды.

Я ищу то, что позволило бы создать следующий шаблон в Semantic MediaWiki:

{{Event
| date = 2012-12-03
| ref:venue = Venue:Heineken Music Hall
}}

Таким образом, страна и город могут быть получены автоматически, имея отношения, определенные как-то выше, но все же давая результат: представление на..., Нидерланды.

1 ответ

Решение

Во-первых, толстая кишка : кажется не очень безопасным в использовании. Я изменил это на пробел. Во-вторых, SMW поддерживает обратные свойства и подзапросы, поэтому следующий код отвечает на вопросы в основном:

The performance took place at
{{#ask: [[Category:Venues]] [[Self name::Heineken Music Hall]]}},
{{#ask: [[Category:Cities]] [[-Ref city::<q>[[Self name::Heineken Music Hall]]</q>]]}},
{{#ask: [[Category:Countries]] [[-Ref country::<q>[[-Ref city::<q>[[Self name::Heineken Music Hall]]</q>]]</q>]]}},
{{#ask: [[Category:Continents]] [[-Ref continent::<q>[[-Ref country::<q>[[-Ref city::<q>[[Self name::Heineken Music Hall]]</q>]]</q>]]</q>]]}}

То же самое, но короче:

The performance took place at
{{#ask: [[Category:Venues]] [[Self name::Heineken Music Hall]]}},
{{#ask: [[Category:Cities]] [[-Ref city.Self name::Heineken Music Hall]]}},
{{#ask: [[Category:Countries]] [[-Ref country.-Ref city.Self name::Heineken Music Hall}},
{{#ask: [[Category:Continents]] [[-Ref continent.-Ref country.-Ref city.Self name::Heineken Music Hall}}

Выход:

Спектакль состоялся в концертном зале Heineken Music Hall, Амстердам, Нидерланды, Европа.

Другие вопросы по тегам