- Оно позволяет поддерживать согласованность данных на вики.
- С его помощью можно обращаться с вики как с базой данных.
- С его помощью можно генерировать красивые графики, диаграммы и графы на основе вики-данных.
- Оно позволяет пользователям возможность вводить данные с помощью форм, а не вики-разметки, понижая тем самым порог вхождения для пользователей.
SMW позволяет использовать вики как составную часть системы управления знаниями, с его помощью можно создавать коммерческие системы, которые сочетают простоту вики, четкость коллаборативных баз данных, и лучшее из мира Semantic Web. В общем, это вещь, более чем достойная пристального внимания и подробного обзора.
Про семантические вики
Семантические вики позволяют добавлять к вики-страницам кусочки структурированной информации, а затем дают возможность с этой информацией работать: строить запросы, выводить данные в виде различных визуализаций и даже осуществлять логический вывод (reasoning, inference). Конкретно Semantic MediaWiki (SMW) для связывания текста страницы со структурированными данными использует механизм, похожий на тэгирование, а для запросов вводит специальный язык, который будет нетрудно освоить медиавикоиду.
Категории, свойства и запросы
В основу SMW положена концепция
Категории
С помощью
<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 используются
Запрос | Результат |
---|---|
<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>
|
Обратите внимание, что условия поиска в запросе пишутся точно так же, как соответствующие свойства задавались в тексте вики-статьи. Технически запрос реализован как
<code class="bash">{{<span class="comment">#название функции:парам1|парам2|парам3}}</span></code>
Все, что касается отбора страниц записываются в первый параметр функции.
Типы свойств
Свойство "Находится в
" указывает на вики-страницу, иными словами, это свойство типа “Страница
". В SMW есть и другие типы. Например, тип "Дата
" пригодится нам, когда мы будем указывать время возникновения той или иной достопримечательности, тип Географические координаты
применяется для разметки геоинформации. Конечно же, нам доступен и тип “Число
", он пригодится при указании населения городов и среднесуточного количества драк в ресторанах. Обновим нашу картинку, добавив туда два свойства городов: Координаты
и Население
.
Можно написать несколько запросов, связанных с городами. Через прямую черту добавим еще пару параметров:
Запрос | Результат |
---|---|
<code class="lua">У нас есть маленькие города, например {{#ask: <span class="string">Городએ</span> <span class="string">население::<20000એ</span> | limit=<span class="number">4</span> }}. </code>
|
У нас есть маленькие города, например Туусниеми, Калуга, Веезе, Винчи. |
<code class="lua">У нас есть средние города, например {{#ask: <span class="string">Городએ</span> <span class="string">население::>20000એ</span> <span class="string">население::<1000000એ</span> | limit=<span class="number">4</span> | format=ol }} </code>
|
У нас есть средние города, например
|
<code class="lua">А вот наш список городов-миллионеров, возраста более пятисот лет: {{#ask: <span class="string">Городએ</span> <span class="string">население::>1000000એ</span> <span class="string">время основания::<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>
Информация о страницах
Порой нас интересуют не столько названия страниц, отвечающих условиям запросов, сколько информация, на этих страницах представленная. Иными словами, нам хочется узнать значения каких-то семантических свойств этих страниц. Для этого можно использовать
<code class="lua">{{#ask: <span class="string">Ресторанએ</span> | ?Количество мест | ?Время создания |?Кухня }}</code>
Это выдаст нам симпатичную таблицу примерно такого вида:
Количество мест | Время создания | Кухня | |
---|---|---|---|
Le Chateaubriand | 100 | 1792 | Французская |
Curry 36 | 50 | 1955 | Интернациональная |
Пир.О.Г.И | 60 | 2001 | Интернациональная |
С принтаутами можно делать много разных интересностей, например выводить с учетом единиц измерения, на ходу конвертируя дюймы в сантиметры, а литры в галлоны. В нашем примере каждый принтаут выводится в виде отдельного столбца, но ведь результатом запроса может быть не только таблица…
Форматы вывода
Данные — они и есть данные, а как их выводить пользователю — решать вам. По умолчанию SMW выводит данные в виде таблиц и списков, но у вас в арсенале есть еще несколько десятков других
Данные типа “Дата" можно выводить в виде
Геоданные можно отображать в виде
Некоторые форматы вывода интерактивны, например filtered
позволяет пользователям
Существует еще много форматов, да и написать свой не так уж сложно самому.
В следующий раз
Кто же захочет заставлять своих пользователей учить лишнюю вики-разметку, сколь проста бы она ни была? К счастью, это не обязательно, и вполне можно получить все плюшки семантической вики так, чтобы пользователи даже и не знали, что в конфигурации вики что-то поменялось. Для этого применяются семантические шаблоны и семантические формы. Пожалуй, расскажем о них в следующей статье.
Ссылки
Все рисунки публикую под лицензией
Semantic MediaWiki, опубликовано waksoft, лицензия — Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International.