Semantic MediaWiki

Semantic MediaWiki — это расширение, ради которого стоит ставить MediaWiki: оно помогает бороться с бардаком и хаосом, который рано или поздно воцаряется в любой вики-системе.

  • Оно позволяет поддерживать согласованность данных на вики.
  • С его помощью можно обращаться с вики как с базой данных.
  • С его помощью можно генерировать красивые графики, диаграммы и графы на основе вики-данных.
  • Оно позволяет пользователям возможность вводить данные с помощью форм, а не вики-разметки, понижая тем самым порог вхождения для пользователей.

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

Про семантические вики

Cемантических вики-движков существует довольно много. Многие из них были созданы учёными из Европы во времена, когда употребление слова «семантический» гарантировало субсидии, гранты, контракты с крупными компаниями, каждая из которых старалась быть семантичнее остальных, и публикацию в солидных журналах. Так и жили эти движки от гранта до гранта, а как только деньги на разработку заканчивались, репозитории тут же зарастали вереском и хвощом, и только стоны случайных пользователей нарушали тишину их багтрекеров. Насколько мне известно, лишь Semantic MediaWiki, OntoWiki и Information Workbench избежали этой участи, всё благодаря созданному пользовательскому сообществу и участию в разработке коммерческих компаний.

Семантические вики позволяют добавлять к вики-страницам кусочки структурированной информации, а затем дают возможность с этой информацией работать: строить запросы, выводить данные в виде различных визуализаций и даже осуществлять логический вывод (reasoning, inference). Конкретно Semantic MediaWiki (SMW) для связывания текста страницы со структурированными данными использует механизм, похожий на тэгирование, а для запросов вводит специальный язык, который будет нетрудно освоить медиавикоиду.

Категории, свойства и запросы

В основу SMW положена концепция семантических свойств (для создания данных) и семантических запросов (для использования данных). Пользователи аннотируют (тэгируют) статьи категориями и свойствами для того, чтобы информация становилась доступной для запросов. Рассмотрим пример: возьмем вики, посвященную путешествиям: в ней будут описаны некоторые города с их достопримечательностями и ресторанами. Страницы этой вики, соединенные гиперссылками, изобразим вот таким графом:

9c91b583ea1fbd237c538110567fe05d[1]

Категории

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

<code class="lua"><span class="string">Название_категории</span>
</code>

Например, в нашей вики можно выделить объекты, относящиеся к категориям Город, Страна, Населенная область, Ресторан, Достопримечательность.

Категории являются базовым механизмом структурирования контента в MediaWiki. После установки SMW, то вы можете делать динамические выборки по категориям, например, вывести все рестораны, которые также являются достопримечательностями. Такие выборки делаются с помощью #ask-запросов. Просто вставьте следующий код в любое место какой-нибудь вики статьи:

Запрос Результат
<code class="lua">Некоторые рестораны могут интересовать туристов и как достопримечательности:
{{#ask: <span class="string">Ресторан</span> <span class="string">Достопримечательность</span> }}. </code>

Некоторые рестораны могут интересовать туристов и как достопримечательности: Le Chateaubriand, Curry 36.

Свойства

Внутренние ссылки в любой вики создаются очень просто, например в MediaWiki для этого используются двойные квадратные скобки: Страница1, Страница2. Проблема ссылок заключается в том, что они несут крайне скудную информацию: один объект связан с другим объектом, вот и всё. SMW позволяет именовать ссылки. Ссылка между рестораном и городом, в котором он находится, будет называться "Находится в", а ссылку, ведущую со страницы ресторана на описание кухни, которую в оном подают, хорошо бы назвать "Кухня". В терминологии SMW такие именованные ссылки называются семантическими свойствами страницы.

Отредактируем статью, посвященную ресторану Le Chateaubriand из нашего примера и добавим туда следующий текст

Вики-разметка Результат
<code class="lua">Ресторан Le Chateaubriand находится в самом центре
 <span class="string"> Парижа</span>. 
Кухня, разумеется, <span class="string"> французская</span>.</code>

Ресторан Le Chateaubriand находится в самом центре Парижа.
Кухня, разумеется, французская.

Общая формула задания свойства в Semantic MediaWiki выглядит так:

что выводить в тексте статьи

Посмотрим на наш граф связей. Если мы используем свойства для наших статей между собой, то картинка приобретает такой вид:

Запросы

Теперь ссылки различимы, а значит мы можем формировать довольно интересные выборки. Например, давайте выберем все рестораны, которые находятся в Париже. Для этого в SMW используются #ask-запросы, а выглядят они примерно так:

Запрос Результат
<code class="lua">В Париже есть много замечательных ресторанов: 
{{#ask: <span class="string">Ресторан</span> <span class="string">Находится  в::Париж</span> }}</code>

<code class="matlab">В Париже есть много замечательных ресторанов:
 Bistrotters, Pizza Rossi, Le <span class="transposed_variable">Chateaubriand.</span>
</code>

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

<code class="bash">{{<span class="comment">#название функции:парам1|парам2|парам3}}</span></code>

Все, что касается отбора страниц записываются в первый параметр функции.

Типы свойств

Свойство "Находится в" указывает на вики-страницу, иными словами, это свойство типа “Страница". В SMW есть и другие типы. Например, тип "Дата" пригодится нам, когда мы будем указывать время возникновения той или иной достопримечательности, тип Географические координаты применяется для разметки геоинформации. Конечно же, нам доступен и тип “Число", он пригодится при указании населения городов и среднесуточного количества драк в ресторанах. Обновим нашу картинку, добавив туда два свойства городов: Координаты и Население.

Можно написать несколько запросов, связанных с городами. Через прямую черту добавим еще пару параметров:

Запрос Результат
<code class="lua">У нас есть маленькие города, например {{#ask:  <span class="string">Город</span> <span class="string">население::&lt;20000</span> | limit=<span class="number">4</span> }}.
</code>

У нас есть маленькие города, например Туусниеми, Калуга, Веезе, Винчи.
<code class="lua">У нас есть средние города, например 
{{#ask:  <span class="string">Город</span> 
         <span class="string">население::&gt;20000</span> <span class="string">население::&lt;1000000</span> 
| limit=<span class="number">4</span>
| format=ol
 }}
</code>

У нас есть средние города, например

  1. Ванкувер
  2. Амстердам
  3. Нюрнберг
  4. Кэмбридж

<code class="lua">А вот наш список городов-миллионеров, возраста более пятисот лет: 
{{#ask: <span class="string">Город</span> 
        <span class="string">население::&gt;1000000</span>
        <span class="string">время основания::&lt;1.01.1513</span>
| format=ul
}}
</code>

А вот наш список городов-миллионеров, возраста более пятисот лет:

  • Рим
  • Кёльн
  • Москва

Вот еще пример — простенький pattern-matching:

<code class="lua">Многие города в Мексике начинаются со слова Сан:
 {{#ask: <span class="string">Город</span> <span class="string">Страна::Мексика</span> <span class="string">Название::~Сан-*</span> }}
</code>

Информация о страницах

Порой нас интересуют не столько названия страниц, отвечающих условиям запросов, сколько информация, на этих страницах представленная. Иными словами, нам хочется узнать значения каких-то семантических свойств этих страниц. Для этого можно использовать принтауты (printout statements, буду рад вариантам перевода): после тела запроса перечислять интересующие нас свойства, предваряя их вопросительным знаком:

<code class="lua">{{#ask: <span class="string">Ресторан</span> | ?Количество мест | ?Время создания |?Кухня }}</code>

Это выдаст нам симпатичную таблицу примерно такого вида:

Количество мест Время создания Кухня
Le Chateaubriand 100 1792 Французская
Curry 36 50 1955 Интернациональная
Пир.О.Г.И 60 2001 Интернациональная

С принтаутами можно делать много разных интересностей, например выводить с учетом единиц измерения, на ходу конвертируя дюймы в сантиметры, а литры в галлоны. В нашем примере каждый принтаут выводится в виде отдельного столбца, но ведь результатом запроса может быть не только таблица…

Форматы вывода

Данные — они и есть данные, а как их выводить пользователю — решать вам. По умолчанию SMW выводит данные в виде таблиц и списков, но у вас в арсенале есть еще несколько десятков других форматов вывода. Так, численные данные можно представлять графиками и диаграммами.

Данные типа “Дата" можно выводить в виде календарей и таймлайнов:


Геоданные можно отображать в виде карт, а во всплывающих подсказках показывать значения свойств. Более того, семантически помечать можно не только точки, но и полигоны:


Некоторые форматы вывода интерактивны, например filtered позволяет пользователям фильтровать результаты по значениям семантических свойств.

Существует еще много форматов, да и написать свой не так уж сложно самому.

В следующий раз

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

Ссылки

Русская документация — буду рад помощи в переводе
Список рассылки админов SMW — очень дружественный. Сообщество меня вообще страшно радует, мы даже конференции организовываем (жду всех в Берлин).
Список рассылки программистов SMW
Конкурс «Вики месяца» — там можно посмотреть на красивые вики, использующие SMW

Все рисунки публикую под лицензией CC-BY 3.0

CC BY-NC-ND 4.0 Semantic MediaWiki, опубликовано waksoft, лицензия — Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *