Введение
С тех далеких времен как был изобретен язык разметки XML, он успел проникнуть во все сферы нашей повседневной компьютерной жизни. Мы его уже практически не замечаем; или по крайней мере старательно делаем вид. Вот тут он используется для хранения конфигурационных данных, а здесь он используется для удаленного вызова процедур (XML RPC). А вот тут он уже во всю стал основой для XHTML.Эти три буквы, изменившие мир, можно любить или ненавидеть. Но есть, как минимум, одна область IT, в которой XML произвел не только переворот сравнимый по масштабности с революцией, но и стал его непоколебимым фундаментом. Я говорю о создании и поддержке документации.
Вы же ведь слышали о DocBook или fb2, не так ли?
Внимание: в статье присутствует графический материал.
Документация в XML. Почему?
Хранение и последующая поддержка документации в XML предоставляет ряд преимуществ по сравнению с традиционными средствами (например, MS Word). Давайте кратко пробежимся по ним.Открытый формат
Любой формат данных, основанный на XML, так или иначе является открытым. Открытым в нескольких смыслах.- Что если возникла необходимость в быстром (!) изучении содержимого XML документа? Это вам не бинарный блоб от Microsoft. Поэтому нет ничего проще чем открыть ваш документ в первом попавшемся текстовом редакторе. Будь-то продвинутый Emacs, либо аскетичный до глубины души Блокнот.
- А как насчет небольшой магии? Используя существующие инструменты всегда можно преобразовать документ в XML в любой другой формат. Скажем в PDF или другой XML.
- Иногда того что уже существует становится недостаточно. Если бы мы имели дело с автомобилем и нас перестали устраивать его грузовые качества, нам пришлось бы заниматься либо его тюнингом, либо поиском более совершенной модели “железного коня”. В случае с документами в XML у нас практически всегда развязаны руки для его последующего (причем неоднократного) расширения.
Отсутствие ограничений на словарь XML позволяет создавать конкретные специализированные XML-языки, а общность синтаксиса — обрабатывать произвольные данные, представленные в XML, одними и теми же программами.
Структурированность
XML был рожден чтобы привнести хотя бы немного порядка в этот мир хаоса. Понятия “структура” и “последовательность” являются одними из фундаментальных основ формата. Благодаря набору достаточно строгих правил формирования документа обеспечивается структурированность данных представленных с помощью XML.Отделение содержимого от оформления
Это по истине удобно, когда один и тот же документ может быть напечатан как в стиле унылой академической книги, так и в качестве развеселого глянцевого журнала. При создании документа в XML не надо заботится о левом или правом отступах. Пусть об этом заботится уровень выше, а писатель позаботится о формировании структуры документа и наполнении его содержимым.Возможности повторного использования (re-use) контента
Если сравнить XML со строительными кирпичиками, то околосвязанные с ним технологии можно смело называть цементным раствором. В качестве цемента здесь выступают XInclude или даже стандартный механизм сущностей (Entities; как внешних, так и внутренних). Так, например, благодаря им документ может формироваться из сумасшедшего количества других документов или их отдельных частей. Изменение одного из составных блоков немедленно отразится в финальном документе. И больше никаких copy & paste! Поистине разделяй и властвуй.Совместная разработка документа
Возможность собирать финальную версию документа из нескольких файлов (будь-то из самодостаточных документов или просто из разрозненных кусков текста), позволяет каждому участнику команды работать в момент времени исключительно со своим “кирпичиком”, не мешая при этом другим: не создавая коллизии в редактируемом документе.А еще здорово при всем этом иметь возможность писать документ на любом языке. XML поддерживает Unicode что есть “из коробки”. XML не доставит хлопот мультинациональной компании, а наоборот, поможет решить их.
И в придачу к этому, XML документы очень неплохо хранятся в системах контроля версий.
Множество готовых инструментов и технологий
Можно проверить документ на соответствие (прим: сленговое “провалидировать”) заданной структуре с помощью DTD/XML Schema/RelaxNG. А если хочется, то и преобразовать документ в XML с другой структурой используя XSLT. Да и в конце-концов, порой бывает просто полезно сделать выборку наиболее интересных и важных участков документа с помощью XPath.И это все, уже здесь и сейчас, доступно практически каждому *. А просто потому, что практически для любой задачи связанной с XML, можно найти уже готовый для использования инструмент или технологию.
* Для каждого разбирающегося в данной теме пользователя.
Именно благодаря этим качествам, технология создания и поддержки документации в формате XML нашла такое широкое распространение для хранения наших знаний.
Наиболее известные форматы
DocBook — один из самых первых, получивших широкое распространение, форматов для технической документации. С известным постоянством применяется в среде Linux. Используется, например, для формирования документации по API для библиотек GTK+ и GNOME.S1000D — стандарт хранения технических знаний в области авиа- и кораблестроении. Нашел применение как в NATO, так и в гражданских авиакомпаниях (в том числе и российских).
fb2 (FictionBook) — популярный формат представления электронных книг. Владельцы электронных читалок, поддерживающих fb2, наверняка, уже не раз успели оценить преимущества от его использования.
DITA — целая расширяемая (с фантастической обратной совместимостью!) архитектура, разработанная “Голубым Гигантом” (IBM), охватывающая весь цикл разработки, выпуска и доставки технической документации. С легкостью адаптируется для использования в различных сферах деятельности, а не только IT.
Syntext Serna
При все этом стоит отметить, что документацию пишут отнюдь не хакеры и программисты; они-то как раз делают это гораздо реже всех. А пишут ее относительно рядовые пользователи компьютеров, владеющие соответствующими лингвистическими знаниями и опытом. Зачем им, чтобы написать пару предложений текста создавать какие-то тэги, проверять их правильность, а также постоянно следить за правильной вложенностью элементов?
Именно поэтому появился смысл в инструменте, скрывающим все сложности работы с XML и при этом четко подчеркивающим все его преимущества. Одним из таких редакторов стала Syntext Serna — визуальный (WYSIWYG) XML процессор для создания и поддержки технической документации в формате XML.
Несмотря на приличную распространенность Syntext Serna в соседнем полушарии, в России о данном XML редакторе слышали мало. Для меня же Serna стала не только открытием, но и по-настоящему любимым редактором *; ко всему прочему я считаю Syntext Serna гениальным программным продуктом. И вот почему.
* Так, например, я достаточно активно применяю DocBook для формирования технических заданий к ПО. И создавать их в Serna гораздо эффективней, несмотря на использование любимого мной Emacs для всего остального.
Общие характеристики
Кроссплатформенность
Разработан с использованием библиотеки Nokia (Trolltech) Qt. Благодаря этому вполне успешно работает на следующих платформах:- Windows;
- GNU/Linux;
- Mac OS X;
- и даже Solaris/SPARC.
Примечание: здесь и далее графический материал взят с сайта разработчика; гарантирую, что на момент написания данного материала, он полностью соответствует действительности.
Вот так выглядит, к примеру, в Linux:
И практически ничто не может помешать быть ему таким в Mac OS X:
Free и Open Source
Я больше приверженец, чем просто сторонник идеи, что ПО должно быть Свободным. Не без удовольствия отмечаю, что разработчики редактора придерживаются аналогичного мнения.Syntext Serna существует в двух редакциях: Open Source (Serna Free) и Enterprise (Serna Enterprise). Serna Free доступна и распространяется в рамках лицензии GNU GPL v3. Serna Enterprise, соответственно, стоит некоторого количества зеленых бумажных купюр и является закрытой. Исходный код Свободной версии вполне себе доступен на сайте разработчика.
Бизнес версия практически ни чем не отличается от Открытой, за исключением наличия некоторых плюшек, больше интересных корпоративным пользователям. Подробности можно найти на официальном сайте.
What You See Is What You Get (WYSIWYG)
Писателю, творящему документацию в Serna, чисто теоретически даже не надо знать об XML. И уж тем более заниматься набором тэгов вручную. Ему достаточно просто понимать, что документ имеет фиксированную структуру, состоящую из элементов. Элемент имеет не только имя, но и семантику.Более того создаваемый текст не отображается для писателя скучной сплошной портянкой букв и фраз. В зависимости от типа редактируемого документа, каждый элемент текста визуально форматируется согласно своей сущности. Если писатель решит, что набранный им участок текста имеет назначение привлечь внимание читателя (упрощенно говоря, “обернут” в элемент <b/> aka “bold font”), то он [текст] будет выделен жирным цветом. А если ссылается на некий ресурс в Интернет (<a/> для DITA), то он не только отобразится как ссылка, но и будет еще при этом кликабельным (как из самого редактора, так и из сформированного из него PDF).
Важно: отображение документов выполняется в редакторе с помощью применения “на лету” XSLT/XSL(-FO)-стилей. Соответственно, написав, однажды XSLT/XSL(-FO)-стиль, его можно использовать как для отображения в самом редакторе, так для генерации из него, например, PDF. А это в свою очень хранит практически неисчерпаемый потенциал для последующего расширения функционала редактора *.
* И это все настраивается во всех возможных направлениях (см. Расширение функционала).
Поддержка основных форматов
По-умолчанию Syntext Serna поддерживает “из коробки” форматы DocBook, DITA, XHTML, TEI P4, NITF.Важно: Однако “основных” совсем не значит, что этим этим все и ограничено. Serna предоставляет прекрасные средства, чтобы добавить поддержку любого пользовательского XML формата.
Контекстная помощь по элементам
Разработчик документации не обязан помнить полностью структуру документа. Тут ему на помощь приходит встроенная контекстная помощью элементам.В зависимости от текущей позиции курсора, Serna не только покажет какие элементы доступны для вставки, но и предоставит по ним справочную информацию с их описанием (с возможностью перехода в соответствующий раздел справочной документации).
Валидация документа “на лету”
Serna поддерживает DTD и XML Schema. С помощью них Serna не только не позволит добавить неверный элемент да и еще в неправильное место, но и сообщит в случае необходимости о нарушении структуры документа при работе с ним.Благодаря поддержке XML Schema, Syntext Serna в любой момент времени “знает”, какой элемент доступен для вставки в текущую курсорную позицию.
Поддержка XML Entity и XInclude
Помните выше про повторное использование контента? Это оно самое. Достаточно один раз создать участок текста, который предполагается использовать в нескольких местах, и вставить его требуемые в документе места. А чуть позже, изменив содержимое такой вставки, оно мгновенно обновится во всем документе!Создание HTML и PDF
Используя внешние утилиты (поставляемые с Syntext Serna, или пользовательские), нет проблем, чтобы преобразовать редактируемый документ в PDF, HTML или в что-то еще буквально “в один клик” непосредственно из самого редактора. Такое “конвертирование” выполняется с помощью XSLT *.* Без наличия XSLT-стиля для документа, естественно, ничего не выйдет. Для DocBook и DITA такие свободно-распространяемые XSLT-стили уже включены в поставку.
Расширение функционала
Знакомые с объектно-ориентированным дизайном наверняка знают о существовании такого прекрасного принципа как OCP (Open-Closed Principle: “открыто для расширения, закрыто для модификации”). Для Syntext Serna он стал одним из ее краеугольных камней.Поддержка новых форматов
Нет ничего проще, чем добавить поддержку нового (или изменить существующий) XML формата в Serna. Для этого достаточно создать профиль нового формата, указав:- (опционально-желательно) XML Schema формата по которой будет происходить валидация документа. Без этого, например, не взлетит в редакторе контекстная помощь;
- (обязательно) XSLT/XSL(-FO)-стиль для отображения. Без него пользователь не только не сможет просмотреть документ, но и отредактировать его;
- (опционально) Различные опции, меняющие поведение приятных для использования плюшек редактора.
Создание “макросов”
Syntext Serna предоставляет функциональность “контекстно-зависимой” вставки, близкой по сути к так называемым “макросам”: возможность простого создания кнопок, которые вставляют в редактируемый документ часто используемые тэги и фрагменты содержимого.Так, например, используя данную точку расширения, можно реализовать “стандартную” панель выделения текста (bold, italic, underline) в документах XML; что собственно и сделано для форматов DITA и DocBook (всегда можно посмотреть как это реализовано в самом редакторе и добавить аналогичное для вашего формата документов).
Пользовательский интерфейс
Пользовательский интерфейс редактора строится из кирпичиков. Кирпичики — это конфигурационные файлы, описывающие на декларативном языке, из каких виджетов, в каком порядке и с какими свойствами будет сформирован интерфейс Syntext Serna. Для каждого типа документа может быть свой набор виджетов.Это бывает полезно, когда требуется изменить эргономику пользовательского интерфейса или сделать доступными в виде кнопок часто используемые функции.
API
Пожалуй это тот самый лакомый кусочек Syntext Serna, предоставляющий самые немыслимые возможности для расширения функциональности редактора.Syntext Serna предоставляет API для языков C++ и Python. Данные интерфейсы расширения покрывают примерно 95% функциональных возможностей рассматриваемого XML редактора. Если проводить черту сравнения, то возможности API Serna можно даже попробовать в относительно равной степени сравнить с API операционной системы Emacs.
Используя API, можно интегрировать Serna практически с любой системой управления содержимым (CMS). Даже достаточно сложной; например, c EMC Documentum. Что собственно успешно и делается. Также, благодаря интегрированной в редактор библиотеке PyQt, не возникает видимых трудностей в разработке новых функциональных диалогов.
Для каждой из точек расширения функционала редактора доступна самодостаточная документация с примерами. При необходимости в более “жизненных” примерах, всегда можно заглянуть в исходники Syntext Serna — она более чем на 80% состоит из этих кирпичиков.
Другие возможности одной строкой
Рассказывать о Serna можно долго. Более подробную информацию можно найти на сайте разработчика. Однако не возможно не отметить кратко также следующие возможности Syntext Serna:- Поддержка непосредственно в документе простых форм ввода;
- Проверка правописания;
- “Профили” документов: один и тот же документ в Serna может отображаться по-разному;
- Локализованный для многих языков интерфейс редактора;
- Великолепная поддержка таблиц в XML документах (используя CALS Tables);
- Serna построена на использовании исключительно открытых форматов: XSLT, XSL-FO, XML Catalog, XML Schema, DTD etc.
Интересные факты
- Syntext Serna является разработкой преимущественно российских разработчиков;
- Когда-то Syntext Serna была закрытым и платным продуктом;
- Автор данного текста принимал самое непосредственное участие в жизни и разработке Syntext Serna на протяжении нескольких лет; а также проповедовал идеи Open Source в компании Syntext;
- Некоторые крупнейшие игроки российского Интернет-рынка не без видимого удовольствия используют Syntext Serna в своих рабочих окружениях;
- Syntext Serna не предназначена для редактирования конфигурационных файлов в XML, хотя вполне себе способна на это;
- Syntext Serna написана на C++ и в ее исходниках можно найти реализации многих интересных алгоритмов;
- Вебсайт компании-разработчика создан с помощью Syntext Serna и плагина для нее под названием DITA WebKit.
Предисловие
1. Документация в XML не является панацеей, а Syntext Serna не является универсальным (хотя и стремится к этому) средством решения проблем связанных с созданием и поддержкой технической документации;В любом случае, просто попробуйте XML вместе Syntext Serna и сделайте свой выбор.
И обязательно испытайте альтернативы:
- oXygen XML Editor, www.oxygenxml.com (Windows);
- XML Mind, www.xmlmind.com/xmleditor (Java).
2. Syntext Serna поставляется с примерами готовых документов, демонстрирующих ее возможности. Воспользуйтесь соответствующим пунктом в меню Help, чтобы посмотреть их.
3. А если взять какую-нибудь бесплатную систему управления контентом типа Alfresco и подружить ее с Syntext Serna, то можно получить неплохое решение для электронного документоборота.
4. Не стесняйтесь сообщать разработчикам о найденных багах. Очень вероятно что вам даже ответят на русском языке.
5. (пользователям Linux). Несмотря на доступность исходников, рекомендую для начального знакомства с редактором использовать готовые сборки. Предпосылки для этого следующие:
- Опыт показывает, что “фирменные” сборки бывают иногда стабильней своих “самособранных” аналогов;
- На данный момент процесс сборки Serna из исходников несколько нетривиален; несмотря на наличие довольно подробной инструкции;
- Дистрибутивные сборки проходят через QA компании-разработчика.
Ресурсы
- Официальная информация о Syntext Serna Free, http://www.syntext.com/products/serna-free/;
- Раздел загрузок Syntext Serna Free, http://www.syntext.com/downloads/serna-free/;
- Tutorial по работе с Syntext Serna, http://downloads.syntext.com/serna-docs/serna-tutorial.pdf.