Semantic MediaWiki

  • Tutorial

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

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

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

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


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

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

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


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



Категории


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

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



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

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


Свойства



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

Отредактируем статью, посвященную ресторану Le Chateaubriand из нашего примера и добавим туда следующий текст
Вики-разметка
Результат
Ресторан Le Chateaubriand находится в самом центре
 [[находится в::Париж | Парижа]]. 
Кухня, разумеется, [[Кухня::Французская кухня | французская]].

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


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

[[Название свойства::значение свойства | что выводить в тексте статьи]]

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



Запросы



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

В Париже есть много замечательных ресторанов:
 Bistrotters, Pizza Rossi, Le Chateaubriand.


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

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

Типы свойств


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



Можно написать несколько запросов, связанных с городами. Через прямую черту добавим еще пару параметров:
Запрос
Результат
У нас есть маленькие города, например {{#ask:  [[Категория:Город]] [[население::<20000]] | limit=4 }}.

У нас есть маленькие города, например Туусниеми, Калуга, Веезе, Винчи.
У нас есть средние города, например 
{{#ask:  [[Категория:Город]] 
         [[население::>20000]] [[население::<1000000]] 
| limit=4
| format=ol
 }}

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

А вот наш список городов-миллионеров, возраста более пятисот лет: 
{{#ask: [[Категория:Город]] 
        [[население::>1000000]]
        [[время основания::<1.01.1513]]
| format=ul
}}

А вот наш список городов-миллионеров, возраста более пятисот лет:
  • Рим
  • Кёльн
  • Москва


Вот еще пример — простенький pattern-matching:
Многие города в Мексике начинаются со слова Сан:
 {{#ask: [[Категория:Город]] [[Страна::Мексика]] [[Название::~Сан-*]] }}


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


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

{{#ask: [[Категория:Ресторан]] | ?Количество мест | ?Время создания |?Кухня }}


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

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


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

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


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



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




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




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



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

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


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

Ссылки


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

Все рисунки публикую под лицензией CC-BY 3.0
Поделиться публикацией
Комментарии 26
    +2
    Меня в свое время RelFinder впечатлил. Его можно прикрутить к SMW.
    Я правда так и не сдюжил.
      0
      RelFinder — это несколько другое, хотя для SMW есть форматы, позволяющие выводить разного рода графы. RelFinder сделан на основе данных Dbpedia, а их подход — это парсинг обычной MediaWiki-разметки, содержащейся в инфобоксах и категориях:
      Иллюстрации
      image
      image

        0
        вот идея прикрутить мне нравится, попробую
        +2
        Огромное спасибо!
        Как я понимаю — Это замечательное средство для коллективного сбора данных с последующим анализом!
        Я искал что то подобное совсем недавно.
          +1
          Самым впечатляющим свойством (для меня) Semantic является возможность использования вебформ для заполнения информации в карточке статьи, а далее использование информации из карточки для выполнения запросов. Вот что было бы неплохо со скриншотами прорекламировать :-)
            0
            надеюсь за недельку написать статью с акцентом на Semantic Forms и Page Schemas
            0
            Это опенсорсный датамайнинг — открытое общество. Круто.
              0
              Жаль, что в Википедии не включен плагин.
                +1
                В википедии есть Wikidata. В каком-то смысле это переизобретение колеса, но ребята из Германии очень упорно трудятся. Мы сейчас воюем за то, чтобы на MediaWiki.org включили, пока что из Wikimedia-проектов SMW включена только на есть только на Wikitech.
                  0
                  Ни в каком смысле это не переизобретение колеса, так как Викиданные — проект другого формата, нежели семантический MediaWiki. Вряд ли возможно путём этих расширений сделать межъязыковую базу данных, которые можно переводить на все языки Википедии и размещать интервики-ссылки лишь в одном проекте.
                  0
                  Можно попробовать экспериментировать на моей версии ru.semantic-wikipedia.org/, но там используется обычная SMWStore2, что на определенном количестве данных начнет существенно замедлять систему. Я бы сказал, что уже на нескольких десятках тысяч троек.
                  0
                  Скажите, есть ли русское сообщество медиавики? Сколько искал не нашёл
                    0
                    насколько мне известно, нет такого сообщества. Все обычно общаются в рассылке wikitech на английском.
                      0
                      имхо это не удобно… Есть ещё www.mwusers.com/forums/forum.php
                        0
                        хотите общаться по-русски — давайте вместе возродим вконтактовую или фейсбучную группу по MediaWiki
                          0
                          Вы серьёзно? Тогда уж лучше на руборде тему возродим.
                          Как вы представляете себе это в вк и фб?
                          Ну вот есть у меня какая-то проблема тыщу раз решенная кем-то другим. Мне листать бесконечную стену вконтакте? или бесконечный список тем вконтакте? там же ни поиска, ни рсс, фу!
                            0
                            да ну, главное — чтобы народа много было. Технические проблемы решаться будут, сейчас проблема в том, что каждый вики-владелец сидит себе в уголке и что-то точит.
                          0
                          Вот еще такой форум есть: mediawiki.ru/forum/
                            0
                            Ну да, но он тоже какой-то не живой
                      0
                      Спасибо за информацию! Не понял до конца из статьи, есть ли какое-то API для внешних систем (типа REST-сервиса), которое бы позволило читать такие структурированные семантические данные?
                        +1
                        Да. существует стандарт обмена в Wikipedia предоставляющий RDF версию фактов.
                        На сколько мне удалось его исследовать он достаточно некорректно работает на русских ресурсах,
                        но возможно я просто не соблюдаю какие-то современные соглашения (не до конца понял стандарт).
                          0
                          вы про Dbpedia и Freebase? Там всё очень-очень интересно, просто русский люд очень уж пассивен в использовании этих данных. Были где-то материалы со школ по семантиквебу, которые мы устраивали в Питере, погляжу, может быть они преобразуемы к статьям
                          +1
                          запросы в обычном виде можно передавать через GET и POST, вот так: semantic-mediawiki.org/wiki/Ask_API
                          0
                          Подскажите, пожалуйста, направление решения задачи в SMW (уверен, что решаемо). Есть набор страниц, каждой из которых соответствует картинка. Нужно сделать разводящую, на которой были бы представлены эти картинки.
                          Понимаю, как бы это сделал через свойства, но свойство вроде не может иметь тип файл/картинка (http://semantic-mediawiki.org/wiki/Help:Properties_and_types#List_of_datatypes)?
                            0
                            У свойства должен быть тип «страница». Если у вас есть свойство [[Картинка::File:myimage.jpg]], то в запросах она будет вполне корректно отображаться.
                            0
                            Спасибо! Как оказалось, все просто.

                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                            Самое читаемое