MediaWiki/Семантика

Материал из СисадминВики (SysadminWiki.ru)
Перейти к: навигация, поиск

Расширение Semantic MediaWiki позволяет добавить к движку Mediawiki семантику, т.е. определять на сайте объекты, их свойства и связи друг с другом, что даёт возможность с помощью специальных запросов динамически создавать списки страниц отвечающих требуемым параметрам запроса (т.е. содержащие нужные данные), а также подставлять в статью данные из других статей, не заботясь в дальнейшем о синхронизации изменений (например, во всех статьях, где указывается величина Эвереста подставлять значение из статьи об этой горе, вместо использования конкретных цифр).

Семантика также облегчает компьютерный поиск по сайту.


Расширение Semantic MediaWiki устанавливается через Composer (менеджер пакетов и зависимостей для приложений PHP).


Устанавливаем расширение Semantic MediaWiki

Официальная инструкция в кратком виде говорит следующее:

  • Переходим в корневой каталог сайта, где лежит в том числе файл composer.phar. Скачиваем все зависимости:
php composer.phar require mediawiki/semantic-media-wiki "~2.5" --update-no-dev

Если сайт использует PHP собственной версии, отличной от той, что установлена в ОС, то запускаем все команды с помощью нужной нам версии PHP. Например:

../cgi-bin/php-cli ./composer.phar require mediawiki/semantic-media-wiki "~2.5" --update-no-dev

Версию PHP можно узнать командой:

php -v
  • Обновляем движок:
php maintenance/update.php --skip-external-dependencies
# Semantic wiki
enableSemantics( 'https://mysite.ru' );
  • Проверяем успешно ли прошла установка на страницах Special:Version и Special:Browse. Немного подбробнее.

Доустанавливаем дополнительные расширения

Семантика проще всего добавляется на сайт через шаблоны. Добавив семантические свойства к элементам шаблона, мы затронем семантикой сразу много страниц. Шаблоны проще всего заполняются с помощью форм. Формы, используя списки значений, также помогают избавиться от опечаток и, если надо, ограничить возможные значения для некоторых параметров. В случае простых табличных представлений форм и шаблонов можно воспользоваться схемами, чтобы облегчить задачу обновления того и другого. Использование схемы также позволит автоматически создать все новые свойства, формы и шаблоны. Однако, для форм отличных от таблиц, схемы не подойдут.

  • Page Forms - для создания форм (заполнение шаблонов, создание единообразных страниц)
  • Page Schemas - для создания схем, по которым создаются и обновляются одновременно и формы и связанные с ними шаблоны. Большинство форм не используют схемы, поскольку те ограничивают их вид табличным представлением.

Если хостер позволяет использовать git, то для установки заходим в каталог с расширениями (extentions) и скачиваем последние версии расширений:

git clone https://gerrit.wikimedia.org/r/p/mediawiki/extensions/PageForms.git git clone https://gerrit.wikimedia.org/r/p/mediawiki/extensions/PageSchemas.git

Затем подключаем их в 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)
  • Email
  • URL
  • Annotation URI
  • Telephone number
  • Record
  • Quantity


Волшебные слова

С помощью волшебных слов __NOFACTBOX__ и __SHOWFACTBOX__ можно отключить или включить внизу страницы информацию об использовании на этой странице семантических свойств. Информация суммируется в таблице "Факты".


Окончательное удаление свойств

Если свойство было создано когда-то, то оно остаётся в списке на странице Служебная:Properties даже если больше нигде не используется. Для окончательного удаления неиспользуемых свойств нужно запустить из каталога /extensions/SemanticMediaWiki/maintenance скрипт rebuildData.php:

php rebuildData.php --shallow-update

или

php rebuildData.php --dispose-outdated

Если запустить с ключом -f запустится процедура полного обновления семантики (обнуление и заполнение БД заново), в результате чего семантические свойства могут пропасть надолго. Их принудительное восстановление (занесение в БД) возможно после ручного обновления (изменения и сохранения) страниц, где эти свойства были определены, либо запуском скрипта, который переберёт все страницы вики и если найдёт на них семантические данные, то внесёт их в БД. Команда для автоматического обновления данных:

php rebuildData.php -v -d 50

Если не все данные обновились, то см. ниже раздел "Работа над ошибками".

Примеры

Показать свойство из статьи

Показывает население в Берлине, считывая свойство "имеет население" в статье "Берлин":

В Берлине проживает {{#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:

php ./rebuildData.php --namespace="NS_TALK" --wiki=lib

Обновление самого ПО

Обновление Semantic MediaWiki делается вместе с остальными расширениями с помощью команды Composer, а затем обновления базы данных:

php composer.phar update php maintenance/update.php

Работа над ошибками

Ошибки базы данных

Если после установки или обновления Semantic MediaWiki возникли ошибки при обращении к базе данных, то стоит зайти на страницу административную страницу Special:SemanticMediaWiki и в разделе "Установка и обновление базы данных" нажать кнопку "Инициализировать или обновить таблицы".


Исчезли свойства

Если на служебных страницах свойств исчезли значения (например после обновления), то нужно обновить данные в таблицах семантики

cd ./extensions/SemanticMediaWiki/maintenance/ php rebuildData.php -v -d 50

Так как хостер может накладывать ограничение на время выполнения скрипта и степень нагрузки процессора, то обновление большого сайта может не уложиться в установленные ограничения и аварийно прерваться. Поэтому можно настроить обновление по расписанию или обновлять диапазонами. Например, обновление статей с номером от 2000 до 4000:

php rebuildData.php -v -s 2000 -e 4000

Для обновления свойств из статей только определённой категории:

php rebuildData.php --query='[[Категория: Имя категории]]' -v -d 50

или только одной страницы:

php rebuildData.php --query='[[Название страницы]]' -v -d 50

Подробнее на официальном сайте об обновлении семантических данных и починке БД.

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 указать явным образом требуемую версию. т.е. заменить строку:

"mediawiki/semantic-media-wiki": "~2.5"

на:

"mediawiki/semantic-media-wiki": "2.5.6"

и запустить обновление ещё раз.

Полезные ссылки

Пользователю:

Администратору: