MediaWiki/Семантика
Расширение Semantic MediaWiki позволяет добавить к движку Mediawiki семантику, т.е. определять на сайте объекты, их свойства и связи друг с другом, что даёт возможность с помощью специальных запросов динамически создавать списки страниц отвечающих требуемым параметрам запроса (т.е. содержащие нужные данные), а также подставлять в статью данные из других статей, не заботясь в дальнейшем о синхронизации изменений (например, во всех статьях, где указывается величина Эвереста подставлять значение из статьи об этой горе, вместо использования конкретных цифр).
Семантика также облегчает компьютерный поиск по сайту.
Расширение Semantic MediaWiki устанавливается через Composer (менеджер пакетов и зависимостей для приложений PHP).
Устанавливаем расширение Semantic MediaWiki
Официальная инструкция в кратком виде говорит следующее:
- Переходим в корневой каталог сайта, где лежит в том числе файл
composer.phar
. Скачиваем все зависимости:
Если сайт использует PHP собственной версии, отличной от той, что установлена в ОС, то запускаем все команды с помощью нужной нам версии PHP. Например:
Версию PHP можно узнать командой:
- Обновляем движок:
- Активируем семантику в LocalSettings.php (подробнее):
# Semantic wiki enableSemantics( 'https://mysite.ru' );
- Проверяем успешно ли прошла установка на страницах Special:Version и Special:Browse. Немного подбробнее.
Доустанавливаем дополнительные расширения
Семантика проще всего добавляется на сайт через шаблоны. Добавив семантические свойства к элементам шаблона, мы затронем семантикой сразу много страниц. Шаблоны проще всего заполняются с помощью форм. Формы, используя списки значений, также помогают избавиться от опечаток и, если надо, ограничить возможные значения для некоторых параметров. В случае простых табличных представлений форм и шаблонов можно воспользоваться схемами, чтобы облегчить задачу обновления того и другого. Использование схемы также позволит автоматически создать все новые свойства, формы и шаблоны. Однако, для форм отличных от таблиц, схемы не подойдут.
- Page Forms - для создания форм (заполнение шаблонов, создание единообразных страниц)
- Page Schemas - для создания схем, по которым создаются и обновляются одновременно и формы и связанные с ними шаблоны. Большинство форм не используют схемы, поскольку те ограничивают их вид табличным представлением.
Если хостер позволяет использовать git, то для установки заходим в каталог с расширениями (extentions) и скачиваем последние версии расширений:
Затем подключаем их в LocalSettings.php:
wfLoadExtension( 'PageForms' ); require_once "$IP/extensions/PageSchemas/PageSchemas.php"; $wgGroupPermissions['user']['generatepages'] = true;
Последний параметр позволяет всем зарегистрированным участникам создавать страницы с помощью схем. Иначе это могут делать только члены группы sysop.
Служебные страницы
- Special:Properties -- Все семантические свойства. Свойства - именованные ссылки с одних страниц на другие
- Special:Browse -- страница поиска
- Special:Ask -- страница запросов
- Special:CreateClass -- создание свойств, шаблона, формы и категории для одного класса
- Свойство:Has processing error -- список свойств с ошибкой
- &action=editschema -- создание схемы (форма+шаблон) для категории происходит со страницы категории, где в меню появляется пункт "Создать схему"
- Special:SemanticMediaWiki -- страница для администраторов вики: обновление БД, переиндексация и т.п.
Изменение служебных сообщений
Как и все остальные служебные сообщения движка MediaWiki, служебные сообщения Semantic MediaWiki хранятся в пространстве имён MediaWiki
и начинаются с префикса smw
. Таким образом указав этот префикс в фильтре на странице перечня всех служебный сообщений (Служебная:Системные_сообщения или ) получим список сообщений Semantic MediaWiki.
Например сообщение о продолжении списка запроса находится на странице MediaWiki:Smw_iq_moreresults
и по умолчанию содержит текст: "… следующие результаты". Изменив содержимое этой станицы, мы изменим и сообщение, выдаваемое системой. Кэш, как всегда может хранить ещё некоторое время предыдущее значение.
А сообщения MediaWiki:Smw-editpage-annotation-enabled и MediaWiki:Smw-editpage-annotation-disabled появляются на страницах редактирования. Удалив текст на этих страницах мы сделаем страницу более компактной.
Типы данных
Тип данных указывается на странице описания свойства служебным свойством "Имеет тип". Синтаксис такой же как для обычного свойства. Пример:
Это свойство типа [[Имеет тип::Текст]].
Тип может быть указан как на языке вики (по-русски), так и по-английски. Перечень типов:
- Страница (Page)
- Строка (String)
- Текст (Text)
- Код (Code)
- Boolean
- Число (Number)
- Geographic coordinates
- Temperature
- Дата (Date)
- URL
- Annotation URI
- Telephone number
- Record
- Quantity
Волшебные слова
С помощью волшебных слов __NOFACTBOX__ и __SHOWFACTBOX__ можно отключить или включить внизу страницы информацию об использовании на этой странице семантических свойств. Информация суммируется в таблице "Факты".
Окончательное удаление свойств
Если свойство было создано когда-то, то оно остаётся в списке на странице Служебная:Properties даже если больше нигде не используется. Для окончательного удаления неиспользуемых свойств нужно запустить из каталога /extensions/SemanticMediaWiki/maintenance скрипт rebuildData.php:
или
Если запустить с ключом -f запустится процедура полного обновления семантики (обнуление и заполнение БД заново), в результате чего семантические свойства могут пропасть надолго. Их принудительное восстановление (занесение в БД) возможно после ручного обновления (изменения и сохранения) страниц, где эти свойства были определены, либо запуском скрипта, который переберёт все страницы вики и если найдёт на них семантические данные, то внесёт их в БД. Команда для автоматического обновления данных:
Если не все данные обновились, то см. ниже раздел "Работа над ошибками".
Примеры
Показать свойство из статьи
Показывает население в Берлине, считывая свойство "имеет население" в статье "Берлин":
В Берлине проживает {{#show:Берлин|?имеет население}} человек.
Показать свойство из статьи, найденной по свойству
Найти статью, где указано определённое значение для Свойство1 и показать из неё значение Свойство2:
{{#show: {{#ask: [[Свойство1::Известное значение]] | ?Свойство2 | link=none }} |?Свойство2}}
Названия всех статей из категории
Вывести названия всех статей из категории "Linux" списком по 5 позиций без ссылок на статьи
{{#ask: [[Категория:Linux]] | format=ul | limit=5 | link=none }}
Отсортированный список значений свойства
Для сортировки списка понадобится расширение Arrays. Список создаётся по свойству "Штамп", без заголовка
{{#arraydefine: массив |{{#ask: [[Штамп::+]] |?Штамп |mainlabel=- |searchlabel= |headers=hide |sep=@ |limit=500 }} |@ |unique, sort=asc }} {{#arrayprint: массив| |@| <br/>}}
Вывод через шаблон
Результаты запроса могут быть оформлены с помощью шаблона (подробнее). Это самый гибкий вид оформления, позволяющий представить информацию как угодно.
Например запрос на построения списка статей может выглядеть так:
{| class="wikitable sortable" |- ! Название ! Автор ! Год первого издания ! Место издания {{#ask: [[Категория:Статьи]] |?Название |?Автор |?Ссылка на текст |?Ссылка на файл |?Год первого издания |?Место издания | mainlabel=- | format=template | template=Оформление вывода запроса | sort=Название | order=asc | limit=500 }} |}
Этот запрос создаст таблицу с четырьмя сортируемыми колонками, в которых поместит шесть свойств. Шаблону "Оформление вывода запроса" передаётся отсортированный список из шести параметров. Перед циклом вызовов шаблона результат запроса сортируется по полю "Название". Ограничение списка (limit) задаём заведомо больше, чем может быть результатов на запрос, чтобы все они поместились в таблицу. Заголовок таблицы можно вынести в отдельный шаблон, также как и некую информацию после таблицы:
{{#ask: [[Категория:Статьи]] |?Название |?Автор |?Ссылка на текст |?Ссылка на файл |?Год первого издания |?Место издания | mainlabel=- | format=template | template=Оформление вывода запроса | introtemplate = Заголовок таблицы | outrotemplate = Завершение таблицы | sort=Название | order=asc | limit=500 }}
Пример шаблона Оформление вывода запроса, оформляющего строки в таблице:
<noinclude>Этот шаблон используется для построения списка статей. '''Передаваемые параметры:''' # Название статьи # Автор статьи # Ссылки на тексты онлайн # Ссылки на файлы для скачивания # Год первого издания # Место издания [[Категория: Шаблоны для шаблонов]] </noinclude><includeonly>|-valign=top | [[{{{1|}}} - {{{2|}}} | {{{2|}}}]]<!-- -->{{#if: {{{3|}}} | <br><small>• читать: {{{3|}}}</small> |}}<!-- -->{{#if: {{{4|}}} | <br><small>• скачать: {{{4|}}}</small> |}} | {{{5|}}} | {{{6|}}} </includeonly>
Шаблон, использующий другой шаблон с именованными параметрами
- Текущий шаблон принимает параметры текст и вид и создаёт список с помощью другого шаблона.
- Выбор всех страниц, где определено семантическое свойство "Свойство для запроса"
- Запрос на этих страницах свойств "Название произведения" и "Автор произведения" и передача их в шаблон "Оформление произведения" с соответсвующими параметрами "название", "автор" и "вики страница".
- Передаём в шаблон два произвольных параметра, соединяя их символом @.
- Если запрос будет пустой, то отобразится значение параметра текст
{{#ask: [[Свойство для запроса::+]] |?Название произведения = название |?Автор произведения = автор |?# = вики страница | link = none | named args = yes | format = plainlist | template = Оформление произведения | userparam = {{{текст|}}}@{{{вид|подсказка}}} | default = {{{текст|}}} }}
Текст шаблона Оформление произведения (этот пример использует переменные, что позволяет делать расширение Variables):
<includeonly><!-- Выделяем из переданного параметра текст и вид; всё, что до символа @ считать за текст для отображения -->{{#vardefine:текст|{{#explode:{{{#userparam|}}}|@|0}}|}}<!-- а то, что после @ считать за вид подсказки; преобразовываем значение в нижний регистр -->{{#vardefine:вид|{{lc: {{#explode:{{{#userparam|}}}|@|1}}|}} }}<!-- теперь возвращаем согласно указанному виду; по умолчанию делаем всплывающую подсказку -->{{#switch: {{#var:вид}} | сноска = {{#var:текст}}<ref>'''{{{название|}}}''' {{#if: {{{автор|}}}| ({{{автор}}})|}} }}</ref> | скобки = {{#var:текст}} ({{{автор|}}}, {{{название|}}}) | #default = {{#tag:span|{{#var:текст}}|style=border-bottom:1px dotted gray; cursor:help;|title={{{автор|}}}, {{{название|}}}}} }}</includeonly>
Ссылки на внешние сайты с примерами
Обновление семантических данных
rebuildData.php -- скрипт для принудительного обновления данных. Обновлять можно не все данные сразу, а только для страницы, категории, пространства имён, определённой вики из семейства и т. п.
Команда для обновления данных в пространсве имён "Обсуждение" (Talk), только на одном сайте из вики-семейства, имеющем идентификатор lib:
Обновление самого ПО
Обновление Semantic MediaWiki делается вместе с остальными расширениями с помощью команды Composer, а затем обновления базы данных:
Работа над ошибками
Ошибки базы данных
Если после установки или обновления Semantic MediaWiki возникли ошибки при обращении к базе данных, то стоит зайти на страницу административную страницу Special:SemanticMediaWiki и в разделе "Установка и обновление базы данных" нажать кнопку "Инициализировать или обновить таблицы".
Исчезли свойства
Если на служебных страницах свойств исчезли значения (например после обновления), то нужно обновить данные в таблицах семантики
Так как хостер может накладывать ограничение на время выполнения скрипта и степень нагрузки процессора, то обновление большого сайта может не уложиться в установленные ограничения и аварийно прерваться. Поэтому можно настроить обновление по расписанию или обновлять диапазонами. Например, обновление статей с номером от 2000 до 4000:
Для обновления свойств из статей только определённой категории:
или только одной страницы:
Подробнее на официальном сайте об обновлении семантических данных и починке БД.
mediawiki/semantic-media-wiki: 2.5.6 installed, ~2.5 required
Причина: скрипт обновления не понял синтаксис описания подверсий в файле composer.json. Параметр "~2.5" означает, что composer должен установить последнюю подверсию 3-го уровня semantic-media-wiki, выпущенной для подверсии 2-го уровня 2.5.
Решение: в файле composer.json указать явным образом требуемую версию. т.е. заменить строку:
на:
и запустить обновление ещё раз.
Полезные ссылки
Пользователю:
- https://www.semantic-mediawiki.org/wiki/Help:Руководство_пользователя
- https://www.semantic-mediawiki.org/wiki/Help:Семантический_поиск
- https://www.semantic-mediawiki.org/wiki/Help:Встраиваемые_запросы
Администратору:
- https://www.semantic-mediawiki.org/wiki/Help:Настройка -- Настройка SMW
- https://www.mediawiki.org/wiki/Extension:Page_Forms -- Создание форм для заполнения участником
- https://habrahabr.ru/post/181474/ -- Пример Semantic Forms
- Словарь MediaWiki -- пример использования cемантических запросов.