Все кто хоть
раз заходил на сайт Википедии,
имеет представление о том, что такое
MediaWiki
— программный проект, на котором все и
крутится.
Оказывается,
если дополнить MediaWiki плагинами Semantic
Mediawiki и Semantic
Forms, то можно сделать не банальный
набор текстовых статей, а целую
структурированную базу данных,
информационную систему, в которую легко
вносить данные (через формы), в которой
легко искать эти данные и анализировать
их. Некая золотая середина между жесткой
структурой реляционных БД и абсолютно
произвольной структурой текстовых
статей.
Посмотрим на
примере:
Итак, требуется
очень-очень быстро сделать сайт, где
каждый пользователь может легко и просто
разместить информацию определенной
структуры. И чтобы эту информацию можно
было бы легко обрабатывать — показатели
всякие считать, списки-таблички строить.
Поиск, само собой, нужен, да не просто
текстовый, а с учётом структуры этой
самой информации.
…
Например, описание формы
заполнения информации о сотруднике
находится на странице
Form:Сотрудник
и в первом приближении выглядит так:<noinclude>Этот текст будет показан при просмотре страницы.
Обычно он содержит описание формы.
Само определение формы находится внутри тега includeonly.</noinclude>
<includeonly>
{{{for template|Сотрудник}}}
Должность: {{{field|Должность}}}
Отдел: {{{field|Отдел}}}
{{{end template}}}
</includeonly>
Теперь на какую-нибудь
страницу надо вставить специальный
вызов функции:
Введите Фамилию Имя Отчество сотрудника чтобы создать или редактировать его страницу:
{{#forminput:form=Сотрудник}}
Результатом будет поле ввода названия новой/редактируемой страницы и кнопка:
Как и ожидается, по нажатию на кнопку откроется страница с формой:
…
расширение Semantic Forms вывело
меня на Semantic
MediaWiki. Это расширение позволяет явным
образом определять семантические
аннотации. Для простоты понимания
программисты могут считать wiki-страницы
объектами, а семантические аннотации
— именованными свойствами этих объектов.
Я тоже в дальнейшем буду говорить о
свойствах. Синтаксис определения свойств
похож на синтаксис определения категорий
(принадлежность категории можно считать
свойством объекта):
[[Отдел::особый]]
В нашем шаблоне Должность и Отдел — естественные кандидаты на роль свойств. Зафиксируем это в шаблоне:
Должность: [[Должность::{{{Должность}}}]]
Отдел: [[Отдел::{{{Отдел}}}]]
[[Category:Сотрудник]]
Визуально практически ничего не изменилось — вместо определения свойства выводится его значение, то есть значение параметра шаблона
…
Осталось разобраться с
обработкой данных. Категории и свойства
можно использовать в запросах,
результаты запросов включать в текст
страниц. Вместо Hello, world! выведем таблицу
сотрудников:
{{#ask: [[Category:Сотрудник]]
|?Должность
|?Отдел
|format=table}}
Сначала пара слов для общего понимания синтаксиса:
{{#f: ... }}
— это
вызов функции с именем f. Функции
определяются в расширениях, я не пробовал
определять их. Вертикальные палки
разделяют параметры функции. То есть,
мы имеем вызов функции ask с четырьмя
параметрами.Этот запрос состоит их двух частей. Первая часть (первый параметр функции ask) выбирает страницы, удовлетворяющие определённому правилу. В данном случае — принадлежащие категории
Сотрудник
. Вторая часть
(остальные параметры) определяет способ
вывода результатов. В данном случае это
будет таблица с тремя столбцами:- Имя страницы. Столбец выводится по умолчанию, но это можно подавить при необходимости параметром
mainlabel=-
. - Должность. Этот уже мы задали.
- Отдел. И этот тоже мы.
...
И так далее
http://habrahabr.ru/post/177615/
Дополнительно:
original post http://vasnake.blogspot.com/2013/12/semantic-mediawiki.html
Комментариев нет:
Отправить комментарий