MediaWiki — это бесплатное и открытое программное обеспечение для вики, изначально разработанное Магнусом Манске для использования в Википедии 25 января 2002 года и улучшенное Ли Дэниелом Крокером [5] [ 6] , после чего разработка координировалась Фондом Викимедиа . Он поддерживает несколько веб-сайтов хостинга вики по всему Интернету, а также большинство веб-сайтов, размещенных Фондом Викимедиа, включая Википедию, Викисловарь , Викисклад , Викицитатник , Мета-Вики и Викиданные , которые определяют большую часть установленных требований к программному обеспечению. [7] Помимо использования на сайтах Викимедиа, MediaWiki использовалась в качестве системы управления знаниями и контентом на таких веб-сайтах, как Fandom , wikiHow и крупных внутренних установках, таких как Intellipedia и Diplopedia .
MediaWiki написан на языке программирования PHP и сохраняет весь текстовый контент в базе данных . Программное обеспечение оптимизировано для эффективной обработки больших проектов, которые могут иметь терабайты контента и сотни тысяч просмотров в секунду. [7] [8] Поскольку Wikipedia является одним из крупнейших и наиболее посещаемых веб-сайтов в мире, достижение масштабируемости с помощью нескольких уровней кэширования и репликации базы данных было главной заботой разработчиков. Другим важным аспектом MediaWiki является его интернационализация; его интерфейс доступен на более чем 400 языках. [9] Программное обеспечение имеет более 1000 настроек конфигурации [10] и более 1800 расширений, доступных для добавления или изменения различных функций. [11]
MediaWiki является бесплатным и открытым исходным кодом и распространяется на условиях GNU General Public License версии 2 или любой более поздней версии. Его документация, размещенная на его официальном сайте по адресу www.mediawiki.org, выпущена по лицензии Creative Commons BY-SA 4.0 и частично находится в общественном достоянии . [12] В частности, руководства и другой контент на MediaWiki.org лицензированы Creative Commons , в то время как набор страниц справки, предназначенных для свободного копирования в новые установки wiki и/или распространения с программным обеспечением MediaWiki, является общественным достоянием. Это было сделано для устранения юридических проблем, возникающих из-за импорта страниц справки в wiki с лицензиями, несовместимыми с лицензией Creative Commons. [13] Разработка MediaWiki в целом благоприятствовала использованию форматов медиа с открытым исходным кодом . [14]
MediaWiki имеет активное сообщество добровольцев для разработки и обслуживания. Пользователи, которые внесли значимый вклад в проект, отправляя исправления , как правило, по запросу получают доступ для внесения изменений в репозиторий Git / Gerrit проекта . [15] Также есть оплачиваемые программисты, которые в основном разрабатывают проекты для Wikimedia Foundation . Разработчики MediaWiki участвуют в Google Summer of Code , содействуя назначению наставников студентам, желающим работать над проектами ядра и расширений MediaWiki. [16] В течение года до ноября 2012 года было около двухсот разработчиков, которые внесли изменения в ядро или расширения MediaWiki. [17] Основные релизы MediaWiki генерируются примерно каждые шесть месяцев путем создания снимков ветви разработки, которая постоянно поддерживается в работоспособном состоянии; [18] второстепенные релизы , или точечные релизы , выпускаются по мере необходимости для исправления ошибок (особенно проблем безопасности). MediaWiki разрабатывается по модели непрерывной интеграции , в которой изменения программного обеспечения регулярно отправляются на сайты Wikimedia. [18] MediaWiki также имеет публичный баг -трекер, phabricator.wikimedia.org , который запускает Phabricator . Сайт также используется для запросов на функции и улучшения .
Когда Википедия была запущена в январе 2001 года, она работала на существующей системе программного обеспечения вики UseModWiki . UseModWiki написана на языке программирования Perl и хранит все страницы вики в текстовых файлах ( .txt ). Это программное обеспечение вскоре оказалось ограниченным как по функциональности, так и по производительности. В середине 2001 года Магнус Манске — разработчик и студент Кельнского университета , а также редактор Википедии — начал работать над новым программным обеспечением, которое должно было заменить UseModWiki, специально разработанным для использования Википедией. Это программное обеспечение было написано на языке сценариев PHP и хранило всю свою информацию в базе данных MySQL . Новое программное обеспечение было в основном разработано к 24 августа 2001 года, и вскоре после этого для него была создана тестовая вики.
Первой полной реализацией этого программного обеспечения стала новая Meta Wikipedia 9 ноября 2001 года. Было желание немедленно внедрить его в англоязычную Wikipedia. [19] Однако Манске опасался любых потенциальных ошибок, которые могли бы нанести вред зарождающемуся веб-сайту в период финальных экзаменов, которые он должен был сдать непосредственно перед Рождеством; [20] это привело к тому, что запуск англоязычной Wikipedia был отложен до 25 января 2002 года. Затем программное обеспечение постепенно было развернуто на всех сайтах Wikipedia того времени. Это программное обеспечение называлось «скриптом PHP» и «фазой II», а название «фаза I» задним числом было дано использованию UseModWiki.
Рост использования вскоре снова вызвал проблемы с нагрузкой, и вскоре после этого началась еще одна переработка программного обеспечения; на этот раз ее выполнил Ли Дэниел Крокер , и она стала известна как «фаза III». Это новое программное обеспечение также было написано на PHP с бэкэндом MySQL и сохранило базовый интерфейс программного обеспечения фазы II, но с дополнительной функциональностью более широкой масштабируемости . Программное обеспечение «фазы III» было опубликовано в Википедии в июле 2002 года.
Фонд Wikimedia был анонсирован 20 июня 2003 года. В июле участник Wikipedia Дэниел Майер предложил название «MediaWiki» для программного обеспечения, как игру слов «Wikimedia». [21] Название MediaWiki постепенно вводилось, начиная с августа 2003 года. Название часто вызывало путаницу из-за его (намеренного) сходства с названием «Wikimedia» (которое само по себе похоже на «Wikipedia»). [22]
Старый логотип продукта был создан Эриком Мёллером с использованием фотографии цветка, сделанной Флоранс Нибар-Девуар , и изначально был представлен на конкурс логотипов для нового логотипа Википедии, который проводился с 20 июля по 27 августа 2003 года. [23] [24] Логотип занял третье место и был выбран для представления MediaWiki, а не Википедии, а логотип, занявший второе место, использовался для Фонда Викимедиа. [25] Двойные квадратные скобки ( [[ ]] ) символизируют синтаксис, который MediaWiki использует для создания гиперссылок на другие страницы вики; в то время как подсолнух символизирует разнообразие контента Википедии, ее постоянный рост и дикую природу. [26]
Позже,Брук Виббер , главный технический директор Фонда Викимедиа , [27] взяла на себя роль менеджера по выпуску . [28] [29]
Основные вехи в развитии MediaWiki включают: систему категоризации (2004); функции парсера (2006); помеченные ревизии (2008); [30] « ResourceLoader », систему доставки для CSS и JavaScript (2011); [31] и VisualEditor , платформу редактирования «что видишь, то и получаешь» ( WYSIWYG ) (2013). [32]
Конкурс на разработку нового логотипа был инициирован 22 июня 2020 года, поскольку старый логотип представлял собой растровое изображение и имел «высокую детализацию», что приводило к проблемам при рендеринге в высоком и низком разрешении соответственно. После двух туров голосования новый и текущий логотип MediaWiki, разработанный Серхио Мэгпи, был выбран 24 октября 2020 года и официально принят 1 апреля 2021 года. [33]
Первая версия MediaWiki, 1.1, была выпущена в декабре 2003 года.
Наиболее известное использование MediaWiki приходится на Википедию и, в меньшей степени, на другие проекты Фонда Викимедиа. Fandom , служба вики-хостинга, ранее известная как Wikia, работает на MediaWiki. Другие общедоступные вики, работающие на MediaWiki, включают wikiHow и SNPedia . WikiLeaks начинался как сайт на базе MediaWiki, но больше не является вики.
На MediaWiki работает ряд альтернативных Вики-энциклопедий, включая Citizendium , Metapedia , Scholarpedia и Conservapedia . MediaWiki также используется внутри компании большим количеством компаний, включая Novell и Intel . [34] [35]
Известные примеры использования MediaWiki в правительствах включают Intellipedia , используемую разведывательным сообществом США , Diplopedia , используемую Государственным департаментом США , и milWiki, часть milSuite , используемую Министерством обороны США . Такие учреждения Организации Объединенных Наций , как Программа развития ООН и INSTRAW, решили реализовать свои вики с помощью MediaWiki, потому что «это программное обеспечение запускает Википедию и, следовательно, гарантированно будет тщательно протестировано, будет продолжать разрабатываться в будущем, и будущие специалисты по этим вики с большей вероятностью будут иметь дело с MediaWiki, чем с любым другим программным обеспечением вики». [36]
Фонд свободного программного обеспечения использует MediaWiki для реализации сайта LibrePlanet . [37]
MediaWiki предоставляет богатый набор основных функций и механизм добавления расширений для обеспечения дополнительной функциональности.
Из-за сильного акцента на многоязычии в проектах Wikimedia, интернационализация и локализация получили значительное внимание разработчиков. Пользовательский интерфейс был полностью или частично переведен на более чем 400 языков на translatewiki.net , [9] и может быть дополнительно настроен администраторами сайта (весь интерфейс можно редактировать через вики).
Несколько расширений, в частности те, что собраны в MediaWiki Language Extension Bundle, призваны еще больше улучшить многоязычность и интернационализацию MediaWiki.
Установка MediaWiki требует, чтобы пользователь имел административные привилегии на сервере, на котором запущены как PHP, так и совместимый тип базы данных SQL. Некоторые пользователи считают, что настройка виртуального хоста полезна, если большая часть их сайта работает на фреймворке (например, Zope или Ruby on Rails ), который в значительной степени несовместим с MediaWiki. [38] Облачный хостинг может устранить необходимость развертывания нового сервера. [39]
Скрипт установки PHP доступен через веб-браузер для инициализации настроек вики. Он запрашивает у пользователя минимальный набор требуемых параметров, оставляя дальнейшие изменения, такие как включение загрузок, [40] добавление логотипа сайта, [41] и установка расширений, которые можно внести, изменив параметры конфигурации, содержащиеся в файле с именем LocalSettings.php
. [42] Некоторые аспекты MediaWiki можно настроить через специальные страницы или путем редактирования определенных страниц; например, фильтры злоупотреблений можно настроить через специальную страницу, [43] а определенные гаджеты можно добавить, создав страницы JavaScript в пространстве имен MediaWiki. [44] Сообщество MediaWiki публикует полное руководство по установке. [45]
Одним из самых ранних отличий MediaWiki (и его предшественника UseModWiki ) от других вики-движков было использование « свободных ссылок » вместо CamelCase . Когда MediaWiki был создан, для вики было типично требовать текст типа «WorldWideWeb» для создания ссылки на страницу о Всемирной паутине ; ссылки в MediaWiki, с другой стороны, создаются путем заключения слов в двойные квадратные скобки, а любые пробелы между ними остаются нетронутыми, например [[World Wide Web]]
. Это изменение было логичным для цели создания энциклопедии, где точность в заголовках важна.
MediaWiki использует расширяемую [46] легкую вики-разметку, разработанную для более простого использования и изучения, чем HTML . Существуют инструменты для преобразования контента, такого как таблицы, между разметкой MediaWiki и HTML. [47] Были предприняты попытки создать спецификацию разметки MediaWiki, но, похоже, был достигнут консенсус, что Wikicode требует контекстно-зависимых правил грамматики. [48] [49] Следующее параллельное сравнение иллюстрирует различия между вики-разметкой и HTML:
(Цитата выше из «Приключений Алисы в Стране чудес » Льюиса Кэрролла )
Инструменты редактирования страниц MediaWiki по умолчанию были описаны как довольно сложные для изучения. [50] Опрос студентов, которым было поручено использовать вики на основе MediaWiki, показал, что когда им задали открытый вопрос об основных проблемах с вики, 24% указали технические проблемы с форматированием, например: «Не могу понять, как вставить изображение. Не могу понять, как показать ссылку со словами; вставляется число». [51]
Чтобы упростить редактирование длинных страниц, MediaWiki позволяет редактировать подраздел страницы (как указано в заголовке). Зарегистрированный пользователь также может указать, является ли правка незначительной. Исправление орфографии, грамматики или пунктуации является примером незначительной правки, тогда как добавление абзацев нового текста является примером не незначительной правки.
Иногда, пока один пользователь редактирует, второй пользователь сохраняет редактирование в той же части страницы. Затем, когда первый пользователь пытается сохранить страницу, происходит конфликт редактирования . Затем второму пользователю предоставляется возможность объединить свой контент со страницей, как он существует сейчас после сохранения страницы первым пользователем.
Пользовательский интерфейс MediaWiki локализован на многих языках. Также можно задать язык для самого контента вики, который будет отправлен в HTTP-заголовке "Content-Language" и HTML-атрибуте "lang" .
MediaWiki имеет расширяемый веб-API ( интерфейс прикладного программирования ), который обеспечивает прямой, высокоуровневый доступ к данным, содержащимся в базах данных MediaWiki. Клиентские программы могут использовать API для входа в систему, получения данных и публикации изменений. API поддерживает тонкие веб-клиенты JavaScript и приложения для конечных пользователей (например, инструменты для борьбы с вандалами). К API можно получить доступ из бэкэнда другого веб-сайта. [52] Обширная библиотека ботов Python , Pywikibot [53] и популярный полуавтоматический инструмент под названием AutoWikiBrowser также взаимодействуют с API. [54] Доступ к API осуществляется через URL-адреса, такие как . В этом случае запрос будет запрашивать у Wikipedia информацию, касающуюся последних 10 правок на сайте. Одним из предполагаемых преимуществ API является его независимость от языка; он прослушивает HTTP- соединения от клиентов и может отправлять ответ в различных форматах, таких как XML , сериализованный PHP или JSON . [55] Клиентский код был разработан для предоставления уровней абстракции API. [56]https://en.wikipedia.org/w/api.php?action=query&list=recentchanges
MediaWiki поддерживает богатый контент, созданный с помощью специализированного синтаксиса. Например, программное обеспечение поставляется с дополнительной поддержкой рендеринга математических формул с использованием LaTeX и специального парсера, написанного на OCaml . Аналогичная функциональность для другого контента, начиная от графических временных шкал и математических построений и заканчивая музыкальными партитурами и египетскими иероглифами , доступна через расширения.
Программное обеспечение стало более мощным в работе с широким спектром загруженных медиафайлов. Его самая богатая функциональность находится в области изображений, где галереи изображений и миниатюры могут быть созданы с относительной легкостью. Также есть поддержка метаданных Exif . Использование MediaWiki для управления Wikimedia Commons , одним из крупнейших бесплатных архивов медиаконтента, вызвало необходимость в дополнительной функциональности в этой области.
Для редактирования WYSIWYG в MediaWiki доступен VisualEditor , который упрощает процесс редактирования для редакторов и был включен в комплект с MediaWiki 1.35. [57] Существуют и другие расширения для обработки редактирования WYSIWYG в различных степенях. [58]
Среди функций MediaWiki, помогающих отслеживать правки, есть функция «Недавние изменения», которая предоставляет список последних правок в вики. Этот список содержит основную информацию об этих правках, такую как имя пользователя, редактировавшего статью, краткое содержание правки, отредактированная страница, а также любые теги (например, «возможный вандализм ») [59], добавленные настраиваемыми фильтрами злоупотреблений и другими расширениями для борьбы с бесполезными правками. [60] На более активных вики происходит так много правок, что трудно отслеживать последние изменения вручную. Антивандальное программное обеспечение, включая инструменты с поддержкой пользователя [61] , иногда используется на таких вики для обработки элементов «Недавние изменения». Нагрузку на сервер можно снизить, отправляя непрерывный поток последних изменений на канал IRC , который эти инструменты могут отслеживать, устраняя необходимость отправлять запросы на обновленный поток последних изменений в API. [62] [63]
Другим важным инструментом является список наблюдения. У каждого вошедшего в систему пользователя есть список наблюдения, в который он может добавлять любые страницы по своему желанию. Когда на одной из этих страниц вносится редактирование, сводка этого редактирования появляется в списке наблюдения при следующем его обновлении. [64] Как и в случае со страницей последних изменений, последние изменения, которые появляются в списке наблюдения, содержат кликабельные ссылки для легкого просмотра истории статьи и конкретных внесенных изменений.
Также есть возможность просмотреть все правки, сделанные любым конкретным пользователем. Таким образом, если правка определена как проблемная, можно проверить другие правки пользователя на наличие проблем.
MediaWiki позволяет ссылаться на определенные версии статей. Это было полезно для научного сообщества, поскольку эксперты-рецензенты могли анализировать статьи, улучшать их и предоставлять ссылки на доверенную версию этой статьи. [65]
Навигация по вики в основном осуществляется через внутренние викиссылки. Викиссылки MediaWiki реализуют обнаружение существования страницы, при котором ссылка окрашивается в синий цвет, если целевая страница существует в локальной вики, и в красный, если ее нет. Если пользователь нажимает на красную ссылку, ему предлагается создать статью с таким заголовком. Обнаружение существования страницы позволяет пользователям создавать «викифицированные» статьи, то есть статьи, содержащие ссылки на другие соответствующие темы, без того, чтобы эти другие статьи существовали.
Ссылки Interwiki функционируют примерно так же, как пространства имен. Набор префиксов Interwiki может быть настроен так, чтобы, например, заголовок страницы wikiquote:Jimbo Wales
направлял пользователя к статье Джимбо Уэйлса на Wikiquote . [66] В отличие от внутренних вики-ссылок, ссылки Interwiki не имеют функции определения существования страницы, и, соответственно, нет способа узнать, сломана ли синяя ссылка Interwiki или нет.
Межъязыковые ссылки — это небольшие навигационные ссылки, которые отображаются на боковой панели в большинстве скинов MediaWiki и связывают статью с похожими статьями на других языках в рамках того же семейства Wiki. Это может обеспечить сообщества, связанные с конкретным языком, более широким контекстом, со всеми вики на одном сервере или каждым на своем собственном сервере. [67]
Ранее Википедия использовала межъязыковые ссылки для связи статьи с другими статьями по той же теме в других изданиях Википедии. Это было заменено запуском Викиданных. [68]
Вкладки страниц отображаются в верхней части страниц. Эти вкладки позволяют пользователям выполнять действия или просматривать страницы, связанные с текущей страницей. Доступные действия по умолчанию включают просмотр, редактирование и обсуждение текущей страницы. Конкретные отображаемые вкладки зависят от того, вошел ли пользователь в вики и имеет ли он привилегии системного оператора в вики. Например, возможность перемещать страницу или добавлять ее в свой список наблюдения обычно ограничена для вошедших в систему пользователей. Администратор сайта может добавлять или удалять вкладки с помощью JavaScript или установки расширений. [69]
Каждая страница имеет связанную страницу истории, с которой пользователь может получить доступ к каждой версии страницы, которая когда-либо существовала, и сгенерировать различия между двумя версиями по своему выбору. Вклады пользователей отображаются не только здесь, но и через опцию «вклады пользователей» на боковой панели. В статье 2004 года Карл Чоллборн и Тереза Рейманн отметили, что «хотя эта функция может быть небольшим отклонением от совместного, «безличного» духа пуристов вики, она может быть очень полезна для преподавателей, которым необходимо оценить вклад и участие отдельных пользователей-студентов». [70]
MediaWiki предоставляет множество функций помимо гиперссылок для структурирования контента. Одной из самых ранних таких функций являются пространства имен . Одной из самых ранних проблем Википедии было отделение энциклопедического контента от страниц, относящихся к обслуживанию и общественному обсуждению, а также персональных страниц о редакторах энциклопедии. Пространства имен — это префиксы перед заголовком страницы (например, " User:
" или " Talk:
"), которые служат в качестве дескрипторов для цели страницы и позволяют нескольким страницам с различными функциями существовать под одним и тем же заголовком. Например, страница с заголовком " [[The Terminator]]
" в пространстве имен по умолчанию может описывать фильм 1984 года с Арнольдом Шварценеггером в главной роли , в то время как страница с заголовком " [[User:The Terminator]]
" может быть профилем, описывающим пользователя, который выбирает это имя в качестве псевдонима. Чаще всего каждое пространство имен имеет связанное с ним Talk:
пространство имен " ", которое может использоваться для обсуждения его содержимого, например, " User talk:
" или " Template talk:
". Целью наличия страниц обсуждений является отделение содержимого от обсуждения, окружающего содержимое. [71] [72]
Пространства имен можно рассматривать как папки , разделяющие различные базовые типы информации или функциональности. Администраторы сайта могут добавлять пользовательские пространства имен. По умолчанию для контента существует 16 пространств имен, а 2 «псевдопространства имен» используются для динамически генерируемых Special:
страниц « » и ссылок на медиафайлы. Каждое пространство имен на MediaWiki пронумеровано: пространства имен страниц контента имеют четные номера, а связанные с ними пространства имен страниц обсуждения имеют нечетные номера. [73]
Пользователи могут создавать новые категории и добавлять страницы и файлы в эти категории, добавляя один или несколько тегов категорий к тексту контента. Добавление этих тегов создает ссылки внизу страницы, которые перенаправляют читателя к списку всех страниц в этой категории, что упрощает просмотр связанных статей. [74] Использование категоризации для организации контента было описано как комбинация:
В дополнение к пространствам имен, контент может быть упорядочен с помощью подстраниц . Эта простая функция обеспечивает автоматические хлебные крошки шаблона [[Page title/Subpage title]]
от страницы после косой черты (в данном случае «Заголовок подстраницы») до страницы перед косой чертой (в данном случае «Заголовок страницы»).
Если эта функция включена, пользователи могут настраивать свои таблицы стилей и настраивать клиентский JavaScript для выполнения при каждом просмотре страницы. В Википедии это привело к появлению большого количества дополнительных инструментов и помощников, разработанных через вики и совместно используемых пользователями. Например, всплывающие окна навигации — это пользовательский инструмент JavaScript, который показывает предварительные просмотры статей, когда пользователь наводит курсор на ссылки, а также предоставляет ярлыки для общих задач по обслуживанию. [76]
Весь пользовательский интерфейс MediaWiki может редактироваться через саму вики пользователями с необходимыми разрешениями (обычно называемыми «администраторами»). Это делается через специальное пространство имен с префиксом «MediaWiki:», где каждое название страницы идентифицирует конкретное сообщение пользовательского интерфейса. Используя расширение, [77] пользователь также может создавать персональные скрипты и выбирать, должны ли определенные скрипты, распространяющиеся на весь сайт, применяться к нему, переключая соответствующие параметры на странице пользовательских настроек.
Пространство имен "MediaWiki:" изначально также использовалось для создания пользовательских текстовых блоков, которые затем могли динамически загружаться на другие страницы с использованием специального синтаксиса. Этот контент позже был перемещен в собственное пространство имен "Template:".
Шаблоны — это текстовые блоки, которые могут динамически загружаться внутри другой страницы всякий раз, когда эта страница запрашивается. Шаблон — это специальная ссылка в двойных фигурных скобках (например, " {{Disputed|date=October 2018}}
"), которая вызывает шаблон (в данном случае расположенный по адресу Template:Disputed ) для загрузки вместо вызова шаблона.
Шаблоны — это структурированные документы, содержащие пары атрибут–значение . Они определяются параметрами , которым присваиваются значения при включении на страницу статьи. Имя параметра отделяется от значения знаком равенства . Класс шаблонов, известный как инфобоксы, используется в Википедии для сбора и представления подмножества информации о его предмете, обычно в верхнем (мобильное представление) или правом верхнем углу (представление на настольном компьютере) документа.
Связанный метод, называемый подстановкой шаблона (вызывается добавлением subst:
в начало ссылки шаблона), вставляет содержимое шаблона на целевую страницу (подобно операции копирования и вставки ), вместо того, чтобы загружать содержимое шаблона динамически при каждой загрузке страницы. Это может привести к несоответствию при использовании шаблонов, но может быть полезным в определенных случаях и в большинстве случаев требует меньше ресурсов сервера (фактический объем экономии может варьироваться в зависимости от конфигурации вики и сложности шаблона).
Шаблоны нашли множество различных применений. Шаблоны позволяют пользователям создавать сложные макеты таблиц, которые используются последовательно на нескольких страницах, и где только содержимое таблиц вставляется с использованием параметров шаблона. Шаблоны часто используются для выявления проблем со статьей Википедии путем помещения шаблона в статью. Затем этот шаблон выводит графическое поле, сообщающее, что содержимое статьи оспаривается или требует некоторого другого внимания, а также классифицирует его, чтобы статьи такого рода можно было найти. Шаблоны также используются на страницах пользователей для отправки пользователям стандартных сообщений, приветствующих их на сайте, [78] дающих им награды за выдающийся вклад, [79] [80] предупреждающих их, когда их поведение считается ненадлежащим, [81] уведомляющих их, когда им блокируют редактирование, [82] и так далее.
MediaWiki предлагает гибкость в создании и определении групп пользователей. Например, можно создать произвольную группу «ниндзя», которая может блокировать пользователей и удалять страницы, и чьи правки по умолчанию скрыты в журнале последних изменений. Также можно создать группу «автоподтвержденных» пользователей, членом которой можно стать после внесения определенного количества правок и ожидания определенного количества дней. [83] Некоторые группы, которые включены по умолчанию, — это бюрократы и системные операторы. Бюрократы имеют право изменять права других пользователей. Системные операторы имеют право на защиту и удаление страниц , а также на блокировку прав пользователей на редактирование. Доступные в MediaWiki элементы управления правами на редактирование считаются достаточными для публикации и поддержания важных документов, таких как руководство по стандартным операционным процедурам в больнице. [84]
Когда страница состоит только из бесполезного контента, есть несколько способов удалить этот контент. Самый простой способ, доступный всем пользователям, — просто очистить страницу. Однако это мешает обнаружению существования страницы, если только не установлено расширение, обрабатывающее очищенные страницы так, как будто они не существуют. [85] Очистка также оставляет контент доступным через страницу истории, результат, который, хотя и потенциально повышает прозрачность , позволяя не-sysops легко просматривать решение об удалении контента на предмет целесообразности, может быть неприемлемым или даже незаконным [86] в некоторых случаях. Другой вариант — для sysop удалить страницу и тем самым предотвратить ее просмотр не-sysops. Другой уровень удаления, называемый RevisionDelete, может использоваться группой (например, «Oversighters»), чтобы предотвратить просмотр страницы лицами, не являющимися членами этой группы. [87] Также возможно, используя определенные расширения, исключить контент из просмотра через любой из обычных каналов вики, [88] или даже полностью удалить редакции из базы данных. [89]
MediaWiki поставляется с базовым набором функций, связанных с ограничением доступа, но его изначальный и текущий дизайн обусловлен функциями, которые в значительной степени связаны с контентом, а не с сегрегацией контента. В результате, за небольшими исключениями (связанными с определенными инструментами и связанными с ними «специальными» страницами), контроль доступа к страницам никогда не был высоким приоритетом в основной разработке, и разработчики заявили, что пользователи, которым требуется безопасный доступ пользователей и контроль авторизации, не должны полагаться на MediaWiki, поскольку он никогда не был разработан для таких ситуаций. Например, чрезвычайно сложно создать вики, где только определенные пользователи могут читать и получать доступ к некоторым страницам. [90] Здесь вики-движки, такие как Foswiki , MoinMoin и Confluence, обеспечивают большую гибкость, поддерживая передовые механизмы безопасности, такие как списки контроля доступа .
Кодовая база MediaWiki содержит различные хуки , использующие функции обратного вызова для добавления дополнительного кода PHP расширяемым способом. Это позволяет разработчикам писать расширения без необходимости изменять ядро или отправлять свой код на проверку. Установка расширения обычно заключается в добавлении строки в файл конфигурации, хотя в некоторых случаях требуются дополнительные изменения, такие как обновления базы данных или исправления ядра.
Было создано пять основных точек расширения, чтобы позволить разработчикам добавлять функции и возможности в MediaWiki. Хуки запускаются каждый раз, когда происходит определенное событие; например, ArticleSaveComplete
хук происходит после обработки запроса на сохранение статьи. [91] Это может использоваться, например, расширением, которое уведомляет выбранных пользователей всякий раз, когда на вики происходит редактирование страницы новыми или анонимными пользователями. [92] Новые теги могут быть созданы для обработки данных с открывающими и закрывающими тегами ( <newtag>...</newtag>
). [93] Функции парсера могут быть использованы для создания новой команды ( {{#if:...|...|...}}
). [94] Новые специальные страницы могут быть созданы для выполнения определенной функции. Эти страницы генерируются динамически. Например, специальная страница может показывать все страницы, которые имеют одну или несколько ссылок на внешний сайт, или она может создавать форму, предоставляющую отправленную пользователем обратную связь. [95] Скины позволяют пользователям настраивать внешний вид и поведение MediaWiki. [96] Незначительная точка расширения позволяет использовать Amazon S3 для размещения файлов изображений. [97]
MediaWiki можно сделать более продвинутым и полезным для различных целей с помощью его расширений. Эти расширения сильно различаются по сложности.
Фонд Wikimedia управляет сервером Git , где многие расширения размещают свои репозитории. У большинства из них также есть страница документации на сайте MediaWiki.
Обзор кода MediaWiki исторически осуществлялся с помощью расширения MediaWiki. [98] По состоянию на март 2012 года это делалось с помощью Gerrit .
Начиная с версии 1.16, MediaWiki использует библиотеку jQuery . [99]
Среди самых популярных расширений — расширение функции синтаксического анализатора ParserFunctions, которое позволяет отображать различный контент на основе результата условных операторов . [100] Эти условные операторы могут выполнять такие функции, как оценка того, является ли параметр пустым, сравнение строк, оценка математических выражений и возврат одного из двух значений в зависимости от того, существует ли страница. Оно было разработано как замена печально известного неэффективного шаблона под названием {{Qif}}. [101] Шиндлер рассказывает историю расширения ParserFunctions следующим образом: [30]
В 2006 году некоторые википедисты обнаружили, что посредством сложного и запутанного взаимодействия шаблонных функций и CSS они могут создавать условный вики-текст, т. е. текст, который отображался, если параметр шаблона имел определенное значение. Это включало в себя повторные вызовы шаблонов внутри шаблонов, что снижало производительность всей системы. Разработчики столкнулись с выбором: либо запретить распространение явно желаемой функции, обнаружив такое использование и явно запретив его в программном обеспечении, либо предложить эффективную альтернативу. Последнее было сделано Тимом Старлингом, который объявил о введении функций парсера, вики-текста, который вызывает функции, реализованные в базовом программном обеспечении. Сначала были реализованы только условный текст и вычисление простых математических выражений, но это уже значительно увеличило возможности редакторов вики. Со временем были введены дополнительные функции парсера, что в конечном итоге привело к созданию фреймворка, который позволял просто писать функции расширения для добавления произвольных функций, таких как, например, службы геокодирования или виджеты. На этот раз разработчики явно реагировали на требования сообщества, будучи вынужденными либо бороться с решением проблемы, имевшейся у сообщества (т. е. условным текстом), либо предлагать улучшенную техническую реализацию для замены предыдущей практики и достижения общей лучшей производительности.
Другое расширение функций парсера, StringFunctions, было разработано для оценки длины строки, позиции строки и т. д. Сообщества Wikimedia, создав неуклюжие обходные пути для достижения той же функциональности, [102] потребовали включить его в свои проекты. [103] Большая часть его функциональности в конечном итоге была интегрирована в расширение ParserFunctions, [104] хотя и отключенное по умолчанию и сопровождавшееся предупреждением от Тима Старлинга о том, что включение строковых функций позволит пользователям «реализовывать свои собственные парсеры на самом уродливом, самом неэффективном языке программирования, известном человечеству: викитекст MediaWiki с ParserFunctions». [105]
С 2012 года существует расширение Scribunto, позволяющее создавать «модули» — страницы вики, написанные на языке сценариев Lua, — которые затем можно запускать в шаблонах и стандартных страницах вики. Scribunto установлен на Википедии и других сайтах Викимедиа с 2013 года и активно используется на этих сайтах. Код Scribunto работает значительно быстрее, чем соответствующий код викитекста, использующий ParserFunctions. [106]
Другое очень популярное расширение — это расширение цитирования, которое позволяет добавлять сноски на страницы с помощью встроенных ссылок. [107] Однако это расширение критиковалось за то, что его трудно использовать и оно требует от пользователя запоминания сложного синтаксиса. Гаджет под названием RefToolbar пытается упростить создание цитат с использованием общих шаблонов. MediaWiki имеет некоторые расширения, которые хорошо подходят для академической среды, такие как математические расширения [108] и расширение, которое позволяет отображать молекулы в 3D . [109]
Существует общее расширение Widgets, которое позволяет MediaWiki интегрироваться практически с чем угодно. Другими примерами расширений, которые могли бы улучшить вики, являются расширения предложений категорий [110] и расширения для включения Flash-видео , [111] видео YouTube, [112] и RSS-каналов . [113] Metavid , сайт, который архивирует видеоматериалы заседаний Сената и Палаты представителей США , был создан с использованием кода, расширяющего MediaWiki в область совместного создания видео. [114]
Существует множество спам-ботов , которые ищут в Интернете установки MediaWiki и добавляют к ним спам-ссылки , несмотря на то, что MediaWiki использует атрибут nofollow для предотвращения таких попыток поисковой оптимизации . [115] Часть проблемы заключается в том, что сторонние републикаторы, такие как зеркала , не могут самостоятельно внедрять тег nofollow на своих веб-сайтах, поэтому маркетологи все равно могут получать выгоду от PageRank , вставляя ссылки на страницы, когда эти записи появляются на сторонних веб-сайтах. [116] Для борьбы с этой проблемой были разработаны антиспам- расширения путем введения CAPTCHA , [117] занесения в черный список определенных URL-адресов, [118] и разрешения массового удаления страниц, недавно добавленных определенным пользователем. [119]
MediaWiki поставляется с предустановленным стандартным текстовым поиском. Существуют расширения, позволяющие MediaWiki использовать более сложные сторонние поисковые системы, включая Elasticsearch (который с 2014 года используется в Wikipedia), Lucene [120] и Sphinx . [121]
Также были созданы различные расширения MediaWiki, позволяющие выполнять более сложный, многогранный поиск как по данным, введенным в вики, так и по метаданным, таким как история изменений страниц. [122] [123] Semantic MediaWiki — одно из таких расширений. [124] [125]
MediaWiki может использовать либо MySQL / MariaDB , PostgreSQL или SQLite реляционную систему управления базами данных . Поддержка Oracle Database и Microsoft SQL Server была прекращена с MediaWiki 1.34. [126] База данных MediaWiki содержит несколько десятков таблиц , включая page
таблицу , содержащую заголовки страниц , идентификаторы страниц и другие метаданные; [127] и revision
таблицу , в которую добавляется новая строка каждый раз при редактировании, содержащую идентификатор страницы, краткое текстовое резюме выполненного изменения, имя пользователя редактора статьи (или его IP-адрес в случае незарегистрированного пользователя) и временную метку. [128] [129]
В течение 4½ лет до 2008 года база данных MediaWiki имела 170 версий схемы . [130] Возможно, самое крупное изменение схемы было сделано в 2005 году с MediaWiki 1.5, когда хранение метаданных было отделено от хранения контента, чтобы повысить гибкость производительности. Когда это обновление было применено к Википедии, сайт был заблокирован для редактирования, и схема была преобразована в новую версию примерно за 22 часа. Некоторые предложения по улучшению программного обеспечения, такие как предложение разрешить просмотр разделов статей через список наблюдения, были отклонены, поскольку необходимые изменения схемы потребовали бы чрезмерного простоя Википедии. [131]
Поскольку он используется для запуска одного из самых посещаемых сайтов в Интернете, Wikipedia, производительность и масштабируемость MediaWiki были высоко оптимизированы. [29] MediaWiki поддерживает Squid , репликацию базы данных с балансировкой нагрузки , кэширование на стороне клиента, кэширование memcached или кэширование на основе таблиц для часто используемой обработки результатов запросов, простой статический файловый кэш, операции с сокращенным набором функций, сжатие ревизий и очередь заданий для операций с базой данных. Разработчики MediaWiki попытались оптимизировать программное обеспечение, избегая дорогостоящих алгоритмов, запросов к базе данных и т. д., кэшируя каждый результат, который является дорогостоящим и имеет временную локальность ссылок, и фокусируясь на горячих точках в коде с помощью профилирования . [132]
Код MediaWiki разработан для того, чтобы данные можно было записывать в базу данных для чтения-записи и читать из баз данных только для чтения, хотя база данных для чтения-записи может использоваться для некоторых операций чтения, если базы данных только для чтения еще не обновлены. Метаданные , такие как история редакций статей, связи статей (ссылки, категории и т. д.), учетные записи пользователей и настройки, могут храниться в основных базах данных и кэшироваться; фактический текст редакции, поскольку он используется реже, может храниться как объекты только для добавления во внешнем хранилище. Программное обеспечение подходит для работы крупномасштабных ферм вики , таких как Wikimedia , в которой по состоянию на август 2011 года было около 800 вики. Однако MediaWiki не имеет встроенного графического интерфейса для управления такими установками.
Эмпирические данные показывают, что большинство ревизий в базах данных MediaWiki, как правило, лишь немного отличаются от предыдущих ревизий. Поэтому последующие ревизии статьи могут быть объединены и затем сжаты, достигая очень высоких коэффициентов сжатия данных до 100x. [132]
Дополнительную информацию об архитектуре, например, о том, как она хранит викитекст и собирает страницу, см. во внешних ссылках.
Парсер служит фактическим стандартом для синтаксиса MediaWiki, поскольку формальный синтаксис не определен. Из-за отсутствия формального определения было сложно создать редакторы WYSIWYG для MediaWiki, хотя существует несколько расширений WYSIWYG, включая популярный VisualEditor .
MediaWiki не предназначен для замены специализированного программного обеспечения для онлайн-форумов или блогов, [133] хотя существуют расширения, позволяющие использовать оба этих варианта. [134] [135]
Новые пользователи MediaWiki часто совершают определенные ошибки, например, забывают подписывать сообщения четырьмя тильдами (~~~~) [136] или вручную вводить подпись открытым текстом [137] из-за незнания особенностей общения на страницах обсуждений MediaWiki. С другой стороны, формат этих страниц обсуждений был назван сильным местом одним преподавателем, который заявил, что он предоставляет более тонкие возможности для обсуждения, чем традиционные форумы с ветками. Например, вместо того, чтобы «отвечать» на целое сообщение, участник обсуждения может создать гиперссылку на новую страницу вики на любом слове с исходной страницы. Обсуждения легче отслеживать, поскольку контент доступен через гиперссылочную страницу вики, а не через серию ответных сообщений на традиционном форуме с ветками. Однако, за исключением нескольких случаев, студенты не использовали эту возможность, возможно, из-за их знакомства с традиционным линейным стилем обсуждения и отсутствия руководства о том, как сделать контент более « насыщенным ссылками ». [138]
MediaWiki по умолчанию слабо поддерживает создание динамически собранных документов или страниц, которые агрегируют данные с других страниц. Были проведены некоторые исследования по включению таких функций непосредственно в MediaWiki. [139] Расширение Semantic MediaWiki предоставляет эти функции. Оно не используется в Wikipedia, но в более чем 1600 других установках MediaWiki. [140] Wikibase Repository и клиент Wikibase Repository, однако, реализованы в Wikidata и Wikipedia соответственно и в некоторой степени предоставляют функции семантической сети и связывание централизованно хранимых данных с информационными полями в различных статьях Wikipedia.
Обновление MediaWiki обычно полностью автоматизировано, не требуя никаких изменений в содержании сайта или программировании шаблонов. Исторически проблемы возникали при обновлении с существенно более старых версий. [141]
Разработчики MediaWiki ввели стандарты безопасности как для основного кода, так и для расширений. [142] SQL-запросы и HTML-вывод обычно выполняются с помощью функций-оболочек, которые обрабатывают проверку, экранирование, фильтрацию для предотвращения межсайтового скриптинга и SQL-инъекций . [143] Многие проблемы безопасности пришлось исправить после выпуска версии MediaWiki, [144] и соответственно MediaWiki.org заявляет: «Самый важный шаг безопасности, который вы можете предпринять, — это поддерживать свое программное обеспечение в актуальном состоянии», подписавшись на список рассылки объявлений и устанавливая обновления безопасности, о которых объявляется. [145]
Разработчики MediaWiki разбросаны по всему миру, хотя большинство из них находятся в Соединенных Штатах и Европе. Личные встречи и сеансы программирования для разработчиков MediaWiki проводятся один или несколько раз в год с 2004 года. [146]
Поддержка пользователей MediaWiki включает:
Пользователи программного обеспечения для совместной работы в Интернете знакомы с функциями и компоновкой MediaWiki благодаря его известному использованию в Википедии. Обзор социального программного обеспечения в академических кругах за 2006 год отметил, что «по сравнению с другими вики, MediaWiki также довольно эстетически приятен, хотя и прост, и имеет легко настраиваемое боковое меню и таблицу стилей ». [150] Однако в одной из оценок в 2006 году Confluence был признан превосходным продуктом из-за его очень удобного API и способности лучше поддерживать несколько вики. [109]
Исследование 2009 года в Университете Гонконга сравнило TWiki с MediaWiki. Авторы отметили, что TWiki рассматривался как инструмент для совместной работы по разработке образовательных документов и технических проектов, тогда как MediaWiki наиболее известен своим использованием в Википедии. Хотя обе платформы позволяют вести обсуждение и отслеживать прогресс, в TWiki есть раздел «Отчет», которого нет в MediaWiki. Студенты считали MediaWiki более простым в использовании и более приятным, чем TWiki. Когда их спросили, рекомендуют ли они использовать MediaWiki для группового проекта курса управления знаниями , 15 из 16 респондентов выразили свое предпочтение MediaWiki, давая ответы с большой определенностью, такие как «конечно», «наверняка». [151] TWiki и MediaWiki имеют гибкую архитектуру плагинов. [152]
Исследование 2009 года, в котором сравнивался опыт студентов с MediaWiki и Google Docs, показало, что студенты дали последнему гораздо более высокую оценку за удобство использования. [153]
Исследование, проведенное в 2021 году Бразильским институтом ядерной инженерии, сравнило систему управления знаниями на основе MediaWiki с двумя другими, основанными на DSpace и Open Journal Systems соответственно. [154] В нем подчеркивалась простота использования как преимущество системы на основе MediaWiki, при этом отмечалось, что, поскольку Фонд Викимедиа разрабатывал MediaWiki для сайта, ориентированного на широкую общественность (Википедия), «его пользовательский интерфейс был разработан так, чтобы быть более удобным для пользователя с самого начала, и на протяжении длительного времени получал много отзывов пользователей», в отличие от DSpace и OJS, ориентированных на нишевую аудиторию. [154]
488 языков (не включая поддерживаемые языки, на которые нет переводов)