Blog: Alter World

Виртуальный мир является своеобразным Alter Ego мира реального…

MediaWiki, продолжение истории

4 комментария 19 февраля 2011, 22:53 • CMEngines, Работа

На днях я писал уже, что поставил mediawiki и несколько расширил её функционал несколькими расширениями. В процессе более глубокого колупания её потрохов выяснилось, что она не так проста, как кажется на первый взгляд. Как бы то ни было, но я всё же довел её до приемлемого функционала — причем приемлемого для меня, для обычных пользователей о возможно будет излишним. К примеру, в нашей Базе знаний теперь можно выстраивать семантические связи — нужный инструментарий есть, осталось только описать свойства всех уже имеющихся статьей и добавлять для новых. Если сказать о расширении расширений совсем кратко, то их число возросло почти в 3 раза с момента моей первой заметке о них.

К чему я веду — сегодня я завершил последний этап формального объединения трёх вик в одну. Формальное оно от того, что одна из вик была развёрнута на базе WackoWiki (с моими заплатами и некоторыми сторонними расширениями), у которой свой синтаксис и полностью его не удалось свести к синтаксису MediaWiki — значит статьи эти нужно пройтись и отредактировать ручками. К слову сказать, синтаксис ваки более очевидный, чем у медиавики.

Конвертация началась вчера вечером, но по ряду причин я плюнул на процесс и перенес финал на сегодняшнее утро. В git-репозитории компании ALTLinux нашелся конвертер на python для миграции с WackoWiki на MediaWiki — спасибо за это Google. Скачал я его, посмотрел инструкции, поправил файлы конфигурации, запустил и... ничего не получил. Удивился, залез в исходный код. Удивился ещё больше — оказалось, что код почти намертво прибит гвоздями к реалиям, бывшим в своё время в ALTLinux'е. Поправил код: выкинул кое-что лишнее (привязки ALTLinux'а), кое-что дописал. Проверил — работает, но странно. Снова «подпилил исходники» и вновь запуск. Потом итерация еще раз повторилась... Короче говоря, заставить работать этот код правильно (из python'а запускалась сначала вака, потом медиавики) мне не удалось. Да, я сознаюсь, что python я знаю не слишком хорошо — по крайней мере хуже perl'а.

В конце концов я плюнул на всё и написал свой конвертер на perl с дополнительным преобразованием разметки из синтаксиса ваки в синтаксис медиавики. Получилось пару скриптов — один извлекал данные из ваки и подготавливал их для импорта в медиавики, а второй запускал пакетный импорт в медиавики. В общей сложности получилось 2 Кб кода.

В общий доступ я эти скрипты не выкладываю из-за того, что они писались сугубо для моей версии WackoWiki R4.2-PL4, которая существенно отличается от стандартной R4.2. PL4 в версии говорит о том, что на этот движок был наложен 4-й патч-левел. Каждый такой патч-левел состоит из набора сторонних расширений и моих правок, которые в частности расширяли синтаксис ваки, коим мы и пользовались активно.

Ещё заметки на эту тему:

Метки: ,

4 комментария

Вы можете подписаться на комментарии к этой статье через RSS или отправить к ней TrackBack.

  1. Semantic MediaWiki • 27 февраля 2011 г. в 17:40

    [...] рассказывал о своих боевых действиях на полях сражений с MediaWiki и на этот раз речь пойдёт о ней же, но теперь с [...]

  2. Vitaly Lipatov • 2 марта 2011 г. в 07:03

    А нельзя всё же опубликовать код конвертора? Мне предстоит сконвертировать несколько вик, и не хотелось бы вручную или велосипед изобретать.

  3. Александр Вольф • 2 марта 2011 г. в 21:07

    Код опубликовать могу, но... есть ли в нём необходимость? Насколько я понял из вопроса предстоит полная конвертация одной вики в другую. Мой конвертер этого не умеет — он только со страницами работает. Историю он тоже не забирает — мне не нужно было.

  4. Александр Вольф • 2 марта 2011 г. в 21:37

    Короче говоря — код, из которого выкинуто несколько строк, нужных сугубо для моей версии ваки: git.altlug.ru/?p=alex-w/w...rt.git;a=summary

Оставить свое мнение

XHTML: Вы можете использовать эти тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>