Предлагаемый обзор адресован в первую очередь руководителям, выбирающим инструментарий для разработки технической документации в своих организациях или структурных подразделениях. Он дает общее представление о принципе единого источника применительно к задачам документирования и показывает, как именно этот принцип реализуется средствами технологической платформы DocBook/XML. В обзоре отражен опыт, приобретенный компанией «Философт» при выполнении ряда крупных проектов по документированию. Необходимо учитывать, что практика других организаций может сильно отличаться от описываемой здесь. Обзор также будет интересен техническим писателям и другим специалистам, участвующим в документировании программных средств, автоматизированных систем, компьютерной техники и в особенности аппаратно-программных комплексов, учитывая множественность комплектаций поставки, свойственную последним.
Технология единого источника нужна для того, чтобы выпускать качественную техническую документацию, даже если она достаточно сложно устроена, или ее объем достаточно велик. Теоретически любой комплект документов можно разрабатывать и сопровождать с помощью текстового процессора, т. е. по современным меркам вручную. Поручив это квалифицированным и добросовестным специалистам, мы избавимся от проблем с качеством, во всяком случае, до тех пор, пока у исполнителей будет хватать времени на самоконтроль: тщательную проверку всех результатов, правку и повторную проверку. На практике времени обычно не хватает. Дело не только в том, что конкуренция, бюджетные ограничения, давление со стороны заказчика и другие внешние обстоятельства вынуждают разработчиков выдерживать сжатые сроки, в конце концов, изыскивать ресурсы — задача управленца. Подготовка текста требует ресурсов, которые не раздобыть ни одному менеджеру. Ограничен ресурс человеческого внимания, поэтому с ростом объема документов и количества взаимосвязей между ними затраты на проверку возрастают нелинейно. Люди не телепаты[1], поэтому совместная работа нескольких авторов приводит к разнобою в документах. Вопреки стараниями разработчиков в техническую документацию закрадываются ошибки. Нарушаются правила оформления, одни и те же сведения в разных документах излагаются по-разному, документы обновляются несвоевременно, или обновленные части перемешиваются с устаревшими. Иными словами, теряется устойчивость качества: к нему можно стремиться, но за него невозможно ручаться. Особенно остро это проявляется при сопровождении больших комплектов технической документации.
Первая мера, на которую идут, чтобы все-таки удержать качество на должном уровне, — упрощение комплекта. Если не получается эффективно исправлять ошибки, то надо сузить для них «среду обитания». Всякое дублирование информации запрещается. Количество перекрестных ссылок сводится к минимуму. От информационно-поискового аппарата в линейных документах и навигации в гипертекстовых отказываются, ограничиваясь оглавлением. Это выход из положения, но плохой, потому что расплачивается за него пользователь. Он получает формально качественные документы, работать с которыми ему неудобно.
Теперь необходимо сделать две важные оговорки. Большим объемом будем называть такой, при котором моральные и профессиональные достоинства разработчиков перестают гарантировать качество результатов их труда. Здесь мы предполагаем, что с ростом объема текста и его структурной сложности (которая характеризуется количеством перекрестных ссылок, повторений, устойчивых формулировок, терминов, упоминаемых названий), любой проект рано или поздно перейдет эту грань. Качество будем сводить к набору измеримых показателей, для каждого из которых можно установить минимальный порог, и, если он не достигнут, то документ (или комплект) считается неудовлетворительным. Например, все списки должны быть оформлены с определенным отступом от левого поля, сведения только для службы технической поддержки никогда не должны включаться в документацию конечного пользователя, выводимые программой сообщения должны цитироваться в документации точно и т. д. Измерять стилистику или логичность изложения мы не умеем, таким образом, на самом деле речь идет в важных, но не исчерпывающих характеристиках качества технической документации.
В противоположность упрощению комплекта подход единого источника предполагает автоматизацию труда разработчика, а не отказ от ручных операций заодно с их полезными результатами. Отлаженный (!) автомат не совершает случайных ошибок, свойственных людям, поэтому проверять, править и перепроверять сгенерированные им документы не нужно вообще. Правда, в некоторых видах работ современные автоматы не в состоянии превзойти даже человека средних способностей: посредственный верстальщик верстает лучше, чем самый совершенный автомат. В каком смысле лучше? Адекватнее нашему восприятию, естественнее. Автомат соблюдает правила всегда, человек же нарушает их, заметив, что здесь и сейчас они действуют против тех целей, на достижение которых изначально направлены. Скажем, особенности конкретной полосы таковы, что бездумное применение некоторого правила типографики делает ее менее эстетичной.
Итак, первая цель — устойчивость качества, первый компромисс — согласие не известную формальность результата ради устранения формальных же ошибок.
Часто говорят, что единый источник ускоряет и удешевляет разработку технической документации. Спорное утверждение, поскольку за ускорение и удешевление одних операций мы расплачиваемся появлением дополнительных. В любом случае это не самостоятельные его преимущества, а другое выражение устойчивости качества. Неудовлетворительная документация никому не нужна даже мгновенно и бесплатно, а комфорт исполнителя сам по себе, как правило, не является целью проекта или организации. Ускорение и удешевление достигаются по сравнению с непредсказуемо долгим исправлением ошибок при ручной работе над большим комплектом. Очевидно, разработка обозримого (не «большого» в нашем смысле) комплекта традиционными средствами обходится дешевле, чем с использованием сложной технологии.
Отсюда второй компромисс — согласие на управляемый рост затрат в начале проекта ради предотвращения неуправляемого в конце.
Автоматизация разработки технической документации вызвана к жизни борьбой с проблемами, которые поражают любой крупный проект. Вместе с тем она открывает возможности, которые позволяют ставить новые позитивные цели, как то:
Технологии единого источника позволяют решать следующие задачи:
[1] Телепаты, если они существуют, вряд ли занимаются разработкой технической документации.
Выходным будем называть электронный документ, который поставляется пользователю. Случай, когда пользователь работает с твердой копией, даже если это книга, отпечатанная в типографии, не рассматривается как отдельный, потому что твердая копия производится на основе электронного документа. Формат файла выходного документа называется целевым. Внешний вид, графическое оформление выходного документа будем называть макетом [2]. Набор правил построения макета называется принципиальным макетом. Свойства принципиального макета и технические свойства выходного документа, связанные с целевым форматом (например, средства навигации в PDF-файле), обобщенно будем называть оформлением.
Взятую отдельно смысловую часть документа, т. е. выходной документ за исключением оформления, будем называть входным документом. Если входной документ и данные об оформлении хранятся раздельно, то выходной документ формируется в результате определенного преобразования (рис. 1).
Преобразование может представлять собой цепочку преобразований, выполняемых друг за другом. Тогда каждое из них кроме последнего формирует промежуточный документ, который подается на вход следующему в цепочке (рис. 2). При этом каждое преобразование может использовать относящуюся именно к нему часть данных об оформлении.
Большие объемы технической документации разрабатываются не в одиночку и не сразу. Поэтому единый источник не сводится к чистой технологии, это еще и определенный способ организации работы специалистов, участвующих в документировании. Всех, кто составляет текст технической документации, будем называть авторами. При этом, говоря о тексте, будем иметь в виду и собственно текст, и относящиеся к нему материалы, в том числе, рисунки. Авторами могут быть не только профессиональные технические писатели, но и специалисты, для которых документирование только одна из их функций. Принципиальный макет либо создается дизайнером, либо продиктован стандартом, скажем, ГОСТ 2.105-95 [1]. Технически оформление реализуется программистом. Он умеет описывать принципиальные макеты тем способом, который «понятен» программам, выполняющим преобразования. Автора, ответственного за успех подготовки документов, будем называть редактором (он руководит авторами, но о его функциях и полномочиях разговор отдельный). Мы предполагаем, что документирование проводится в рамках некоторого проекта. У проекта обязательно есть заказчик, он может быть внутренним или внешним по отношению ко всей организации, но по отношению к самому проекту он в любом случае внешний. Заказчик диктует требования к технической документации, причем некоторые из них, например, соответствие документов определенному стандарту, подлежат безусловному выполнению. «Бесконечную» деятельность по развитию некоторого технического решения (автоматизированной системы, программного продукта) будем рассматривать как серию проектов.
Единый источник вне зависимости от его технической реализации содержит все фрагменты, которые могут быть включены в разрабатываемые документы. Объем фрагмента определяется его предполагаемой функцией, фрагментом может быть целая глава, а может ячейка таблицы. Обычно от фрагментов, несущих одну функцию, требуют единообразной структуры, например, все функции API должны быть описаны по одному плану. Для каждого фрагмента в едином источнике должна храниться ровно одна копия. Фрагмент обязательно снабжается уникальным идентификатором, по которому к нему можно получить доступ. Допускается выделение внутри фрагмента других фрагментов. Последнее не означает, что фрагмент, содержащий другие фрагменты, целиком из них состоит, просто его частям, представляющим самостоятельный интерес, присваиваются уникальные идентификаторы. В крупных проектах фрагменты чаще образуют лес, а не дерево. Последовательность разработки фрагментов и их загрузки в единый источник не имеет значения. Не существенен и способ хранения фрагмента, такие детали, как число и взаимное расположение XML-файлов, которыми представлен фрагмент, должны касаться только его автора.
Шаблон документа задает структуру его разделов и состав включаемых в него фрагментов. Кроме заголовков и метаданных шаблон не содержит собственного текста. Его место занимают включающие ссылки на фрагменты единого источника. Включающая ссылка может явно указывать на фрагмент с определенным значением уникального идентификатора или содержать запрос на выборку фрагментов, удовлетворяющих определенным условиям. Во избежание терминологической путаницы напомним, что применительно к текстовым процессорам шаблоном обычно называют образец оформления любых документов некоторого типа, например, в поставку текстового процессора Microsoft Word входят шаблоны писем, резюме, служебных записок и даже технической документации. В нашем случае у каждого конкретного документа должен быть свой шаблон, причем к оформлению он как раз не имеет отношения.
Шаблон и все фрагменты, на которые он прямо или косвенно ссылается, в совокупности составляют входной документ.
В общем случае структура входного документа «глубже» структуры шаблона, потому что любой фрагмент может иметь собственную структуру.
Таким образом, каждый документ можно разложить на три обязательных составляющих: содержание, структуру и оформление (рис. 3).
Назвать эти составляющие абсолютно независимыми друг от друга было бы преувеличением, но выделить разработку каждой из них в самостоятельную задачу внутри проекта, как правило, возможно. Что это дает?
В документировании, как и в программировании, изоляция участков работы и повторное использование отлаженных результатов обеспечивают устойчивость качества.
Атрибутизация фрагментов и создание механизмов их поиска по значениям полей позволяет рассматривать единый источник как базу данных. Тогда выходной документ можно сравнить с отчетом, а шаблон документа — с формой отчета. Поля могут содержать данные об аудитории, теме или состоянии фрагмента. Например, фрагмент помечают как адресованный только квалифицированным или только начинающим пользователям, как относящийся только к определенной версии продукта, как завершенный или незавершенный. Также в поля можно выносить важные сведения о предмете описания, разумеется, когда их удается формализовать. Допустим, если фрагмент говорит о некоторой функции автоматизированной системы, то в специальное поле можно поместить список пользовательских ролей, которые к этой функции обращаются.
Атрибутизация фрагментов позволяет:
Профилированием называется автоматический отсев фрагментов по заданным признакам при формировании выходного документа (рис. 4). Обычно профилирование применяется, когда необходимо подготовить несколько редакций одного и того же документа для разных аудиторий, причем различия между редакциями заключаются во множестве небольших по объему фрагментов, касающихся важных деталей. Например, руководство пользователя адресовано и службе технической поддержки, и конечным пользователям, но последних лучше не знакомить с особенностями защиты от копирования или редко возникающими проблемами. Другой типичный случай профилирования — руководства по приложениям, имеющим параллельные версии для разных аппаратных платформ и операционных систем. Встречается профилирование по последовательным версиям самого документируемого решения, если эти версии выпускаются часто и отличаются друг от друга незначительно.
Проблемно-ориентированный поиск обеспечивает пользователю возможность быстро ориентироваться во взаимосвязях между частями или свойствами технического решения. Распространенный пример проблемно-ориентированного поиска — размещаемый в конце каждого раздела список перекрестных ссылок на ассоциативно связанные разделы, обычно он имеет подзаголовок «См. также». Такие списки могут формироваться авторами вручную, а могут автоматически по общим для связываемых разделов ключевым словам. К средствам проблемно-ориентированного поиска мы относим указатели специального вида, предположим, указатель функций API в руководстве программиста или указатель первичных документов в руководстве по ERP-системе.
Проблемно-ориентированная навигация не только позволяет быстро найти нужные сведения, но и сама по себе информативна. Если техническое решение состоит из большого количества компонент, то можно построить схему, иллюстрирующую характер взаимосвязей между ними, допустим, дерево зависимостей или диаграмму потоков данных, снабдив каждый элемент этой схемы гипертекстовой ссылкой на соответствующий раздел. Если система автоматизирует какой-нибудь бизнес-процесс, то можно построить диаграмму бизнес-процесса, разметив ее гипертекстовыми ссылками на технологические инструкции по выполнению отдельных операций.
Перечисленные возможности в совокупности позволяют обращаться с единым источником как с базой знаний о техническом решении. Поддержание полноты и актуальности базы знаний выходит на первый план, а формирование выходных документов становится вспомогательной задачей, быстро решаемой в случае необходимости.
[2] Вообще оформление документа не обязательно должно быть графическим. Не секрет, что существуют синтезаторы речи, позволяющие озвучивать текст, и легко представить себе случаи, когда это полезно.
Об XML-технологиях написаны библиотеки учебников и монографий [6, 4, 5], не счесть посвященных им статей в периодике и ресурсов в Интернете. Здесь мы расскажем о них предельно кратко для тех, кто совсем не представляет себе, что это такое, а также чтобы далее не засорять текст ссылками на известные факты.
Проблема унификации форматов данных, вероятно, возникла вместе с первыми ЭВМ, это «родовая травма» информационных технологий. Противоборствуют две тенденции: с одной стороны, каждая задача требует средств обработки и хранения специфичных для нее данных, с другой стороны, необходимость обмена данными требует эти средства унифицировать. Поиски разумного компромисса на этом поле время от времени приводили к появлению более или менее удачных универсальных форматов. В основном они предназначались для представления данных определенного характера: графики, текста, звука, географических карт, баз данных и т. п. Поскольку разработчики действовали разрозненно, форматы не только получались разными, но и в основе имели разные принципы организации данных. Приходилось для каждого формата разрабатывать отдельные механизмы обработки, что не экономично само по себе и вдвойне не экономично, если в одном приложении обрабатываются данные разных форматов.
Вряд ли кто-нибудь строил иллюзии относительно возможности разработки универсального, энциклопедического формата, пригодного для представления любых мыслимых данных. Выходом из положения виделось создание абстрактного формата форматов, который позволял бы описывать сколь угодно специфичные форматы, но такие, чтобы синтаксическое родство между ними было достаточно сильно и допускало реализацию общих механизмов обработки. В качестве решения этой задачи в 1989 г. был предложен язык Standard Generalized Markup Language (SGML), а позже, в 1998 г., более простой и технологичный eXtensible Markup Language (XML) [3].
Не вдаваясь в подробности, скажем, что XML — это язык описания языков разметки с общим синтаксисом и разными словарями. Свобода словаря позволяет создавать конкретные специализированные XML-языки, а общность синтаксиса — обрабатывать произвольные XML-данные одними и теми же программами. Если вы изучаете лягушек, то вам никто не мешает придумать специальный формат структурированного представления информации о них. Для ввода данных вы сможете использовать любой понравившейся вам XML-редактор, а для публикации на своем веб-сайте любой XSLT-процессор. Одновременно у вас есть возможность автоматически загружать данные в базу данных и находить там нужные сведения по существенным для предметной области признакам.
Хороший принцип в сочетании с удачной реализацией привели к взрывообразному росту XML-технологий. Количество программ для работы с XML-данными и специалистов, владеющих этой областью, увеличивается ежедневно. Во многие прикладные пакеты встраивается возможность импорта и экспорта XML-данных. Не возьмемся делать прогнозы, но, судя по всему, решениям, основанным на XML, технологическая и кадровая изоляция в обозримом будущем не угрожает.
Основой технологической платформы DocBook/XML служит одноименный проблемно-ориентированный язык разметки [9]. Он предназначен для записи текста технической документации на программы, алгоритмические языки, компьютерное оборудование и другие решения в области информационных технологий, чем принципиально отличается от большинства форматов хранения текстовых данных (но не XML-языков!). В языке DocBook/XML предусмотрены средства описания фрагментов, свойственных технической документации, например, специальными элементами полагается выделять названия элементов интерфейса, обозначения клавиш, имена переменных, термины, различные врезки (замечания, подсказки, предупреждения), листинги, описания выполняемых пользователем процедур. Разметка, задаваемая языком DocBook/XML, носит преимущественно функциональный характер: автору предписано указывать роль, которую тот или иной фрагмент играет в тексте, а не способ его внешнего оформления. Такой подход сковывает автора, зато позволяет добиться заведомой независимости содержания и оформления выходного документа и унифицировать некоторые важные качества стиля изложения при работе нескольких авторов в одном проекте.
Язык разметки DocBook имеет долгую по «компьютерным» меркам историю. Его первая версия, опиравшаяся на SGML, была создана еще в 1991 г. совместными усилиями компаний O'Reilly & Associates [4] и HaL Computer Systems. Версия на базе XML увидела свет в 1998 г., тогда же язык перешел в ведение специально образованного технического комитета консорциума OASIS. В состав этого технического комитета входят всемирно известные компании, в том числе, Hewlett-Packard и IBM. Сегодня язык разметки DocBook/XML применяется разработчиками технической документации во всем мире.
Язык разметки XInclude [10], основанный на XML, предназначен для создания внутри XML-документа включающих ссылок на другие XML-документы или их узлы. Адресоваться к включаемым документам можно по URI. Для указания на узлы XML-документов используются языки XPointer и XPath [13, 11, 12, 4, 5], позволяющие формулировать запросы к XML-данным. Запросы могут содержать разнообразные условия: навигационные указания, проверки и логические функции. Результатом запроса в общем случае является набор узлов, удовлетворяющих его условиям. Средствами языка XInclude можно также потребовать включения в XML-документ «плоского» текстового файла, что особенно полезно при цитировании листингов.
Пакет GRAPHVIZ (проект компании AT&T) интересен тем, что позволяет применить принцип единого источника к графическим схемам. Автор описывает схему на специальном языке разметки, а потом с помощью конвертора формирует графический файл. По синтаксису этот язык напоминает язык программирования Си, но проще и менее строг. Лучше всего он приспособлен для описания графов, так как предлагает оперировать вершинами и соединительными стрелками. Вершинам и стрелкам можно придавать разные формы; предусмотрены средства для взаимного позиционирования вершин.
Мы упомянули несколько языков, наиболее интересных и важных с точки зрения целей настоящего обзора. Многообразие языков разметки невероятно велико. Так, для векторной графики существует язык SVG, для математических формул MathML, для отформатированного текста XSL-FO; перечислять здесь все языки разметки нет ни возможности, ни надобности. Главное, что они складываются в открытую технологию, допускающую решение любой осмысленной (не все-таки не фантастической) задачи за соразмерное время при соразмерных затратах. В этом их преимущество перед проприетарными продуктами, которые могут предоставлять богатые возможности, но не допускать выхода за их пределы. Даже если сегодня их возможности кажутся нам избыточными, где гарантия, что завтра, через месяц или через год нам не потребуется какая-нибудь важная мелочь, которую разработчики не реализовали и даже не собираются?
Для набора текста входного документа могут применяться разные программы, от обыкновенного «Блокнота» до развитых XML-редакторов. Поскольку требования к формату входного документа определяются спецификациями используемых языков разметки, выбор редактора перестает быть важным вопросом, который необходимо решить на уровне проекта. Каждый автор может работать в том редакторе, который ему удобен.
По отношению к задаче набора текста в формате DocBook/XML существующие сегодня редакторы можно разделить на следующие группы:
Обычные текстовые редакторы позволяют набирать текст, интерпретируемый ими как простая последовательность символов и строк. Все заботы о его структуре перекладываются на автора. Функциональность текстовых редакторов, если она шире, чем у редактора «Блокнот», обычно связана с набором символов в разных кодировках, поиском и заменой строк, обработкой нескольких текстовых файлов, а также макросами, ускоряющими ввод часто повторяющихся фрагментов.
Среди текстовых редакторов особняком стоит Emacs , пользовательский интерфейс которого не назовешь дружественным, зато предусмотренные в нем средства автоматизации работы с текстом чрезвычайно богаты и гибки.
XML-редакторы с интерфейсом текстового процессора предлагают пользователям, не желающим вникать в синтаксис языков разметки, более-менее привычную среду для ввода и правки текста (рис. 5). Обычно они позволяют редактировать любые XML-документы, но ориентированы на популярные форматы, в том числе, DocBook/XML, DITA, XHTML, TEI.
Такие редакторы — большое подспорье для авторов, начинающих пользоваться языками разметки, поскольку автоматически расставляют теги и порождают только хорошо оформленные (или даже валидные)[5] входные документы, которые сразу без ошибок можно преобразовывать в выходные. Обратная сторона состоит в том, что генерируемую ими разметку сложно контролировать, а делать это приходится, поскольку конверторы, осуществляющие преобразования, обрабатывают именно XML-файл, а не с изображение текста, которое видит автор. Результат обработки зависит от того, какие в каждом конкретном случае поставлены теги, какие значения атрибутов присвоены узлам документа, и т. п. Наконец, работу опытного автора они скорее замедляют, чем ускоряют.
XML-редакторы, упрощающие набор разметки, интерфейсом напоминают обычные текстовые, но учитывают структуру набираемого документа, заданную элементами (рис. 6).
В XML-редакторах данного типа автор получает разнообразный сервис для работы с разметкой. Подсветка тегов и других частей синтаксиса, автоматическая поддержка отступов для вложенных элементов, автоматическая вставка закрывающего тега при вводе открывающего, выбор нужного тега в меню, встроенная проверка целостности структуры и валидация — все это облегчает и ускоряет работу автора.
Мы храним данные ради того, чтобы пользоваться ими, обрабатывать или отображать их всевозможными способами. Данные, выведенные на печать непосредственно в формате XML, как правило, прочитать удается, но пользователю этого не предложишь. Во-первых, он не обязан знать язык разметки. Во-вторых, в XML-файле данные, которые должны отображаться рядом, могут быть разделены. В-третьих, это неудобно и не соответствует никаким стандартам и традициям оформления документов. Следовательно, должны существовать механизмы, позволяющие реструктуризовать XML-данные и переводить их в другие форматы, в том числе, в такие, для которых уже разработаны программы просмотра.
Один из основных механизмов обработки XML-данных основан на языке XSL Transformations [6]. Его синтаксис базируется на XML, однако, назвать его языком разметки было бы неправильно из-за принципиально иной семантики. XSLT — декларативный язык, приспособленный для записи правил преобразования XML-документов [15, 16, 4]. Правила могут быть как совсем простыми, так и сложными, многоступенчатыми, с параметрами, ветвлениями и обращениями, в частности, рекурсивными, к другим правилам. Набор правил для решения некоторой прикладной задачи (фактически, программа на языке XSLT), называется XSLT-стилем. Программа, интерпретирующая XSLT-стили, называется XSLT-процессором. Входными данными для XSLT-процессора служат XML-файл и XSLT-стиль, на выходе формируются результаты выполненного преобразования.
Важнейшее преимущество XSLT в том, что c разработчика стилей снимается обязанность решать по-настоящему сложные программистские задачи вроде синтаксического разбора XML-кода и анализа структуры XML-документа. Создание прямого конвертора, допустим, из RTF в TeX, даже у квалифицированного программиста отняло бы гораздо больше времени, чем составление стиля для работы с XML-форматами сопоставимых описательных возможностей.
В настоящее время существует много бесплатных XSLT-процессоров, например, xsltproc.
Требования к оформлению выходных документов в разных проектах существенно различны, поэтому попытки выпустить исчерпывающий набор XSLT-стилей обречены на провал. Создавать XSLT-стили заново в каждом проекте тоже нельзя, потому что сроки и стоимость этой работы получатся неприемлемыми. На практике обычно применяется свободно распространяемый комплект стандартных стилей DocBook XSL [8]. Он поддерживает основные элементы макетов и целевые форматы, а также хорошо приспособлен к доработке для нужд конкретного проекта. Благодаря архитектуре XSLT адаптация стандартных стилей не требует модификации их кода. Новые правила, располагаемые в отдельных файлах, дополняют или замещают стандартные. Выполненные доработки не привязаны к конкретной копии стандартных стилей, следовательно:
Рассмотрим преобразования входных документов формата DocBook/XML в целевые форматы HTML, CHM и PDF. Соответствующие типовые цепочки схематически показаны на рис. 7.
Порядок формирования HTML-файлов:
Порядок формирования хелп-файлов формата CHM:
Порядок формирования файлов формата PDF:
С помощью XSLT-преобразования по входному документу формируется файл формата XSL-FO [14]. Он представляет собой XML-разметку текста, оформленного для вывода на печать, но не разбитого на страницы.
FO-процессором могут формироваться не только PDF-файлы, но и файлы в формате PostScript. Существуют FO-процессоры, предназначенные для формирования RTF-файлов.
Возможности публикации входных документов формата DocBook/XML не исчерпываются тремя перечисленными вариантами. Существуют XSLT-стили, поддерживающие форматы XHTML, Unix man pages, JavaHelp, TeX. Нет принципиальных препятствий к разработке стилей для формирования документов любого формата, во всяком случае, если его спецификация опубликована.
[5] Хорошо оформленным (well
formed) называется документ, соответствующий правилам синтаксиса XML.
Каждому открывающему тегу в нем должен быть сопоставлен один и только один
закрывающий, все значения атрибутов должны быть заключены в кавычки, корневой
элемент должен быть единственным и т.п. Валидным
(valid) называется документ, соответствующий
правилам определенного XML-языка. Например, правила языка DocBook/XML в числе
прочего требуют, чтобы элемент section
содержал ровно один элемент title
.
Строгие определения хорошо оформленного и валидного документа приведены в [6].
[6] Аббревиатура XSL означает eXtensible Stylesheet Language. «Двухступенчатая» расшифровка аббревиатуры XSLT связана с историей развития этих языков.
[3] Вынуждены признаться, что этот абзац написан наугад. Не исключено, что расширяемые форматы данных существовали до SGML, значительное явление редко возникает на пустом месте без затмеваемых им прототипов.
[4] В нашей стране компания O'Railly известна прежде всего серией книг по программированию с фотографиями животных на обложках.
Под корпоративной информационной системой (КИС) или автоматизированной системой (АС) [7] здесь понимается решение, полностью или частично автоматизирующее деятельность некоторой организации. Подчеркнем, что АС включает в себя и программы, и данные, и аппаратные средства, и участвующий в автоматизированных бизнес-процессах персонал [3, 7]. Иными словами, завершенная АС обязательно внедрена, она не продается «в коробке», хотя может создаваться на основе тиражируемого программного продукта.
Документирование АС обычно обусловлено следующими обстоятельствами:
Это заставляет предъявлять к документации и процессу документирования противоречивые требования:
Информация возникает и фиксируется в одном порядке, а потребляется в другом, причем разные аудитории нуждаются в разных форматах ее представления. Необходим механизм перегруппировки и дублирования информации. Реализовать его можно, в частности, с помощью технологии единого источника:
Описания бизнес-процессов (технологические инструкции) разрабатываются отдельно от руководств пользователя. Для удобства чтения их связывают:
Схематически предложенное решение показано на рис. 8.
Комплектуемое решение поставляется потребителю в одном из возможных вариантов, количество которых комбинаторно. Типичный пример комплектуемого решения — PC-совместимый компьютер. Он состоит из определенных функциональных блоков (корпуса, системной платы, процессора, модулей оперативной памяти, жесткого диска и др.), причем их модели и технические характеристики варьируются от поставки к поставке. В действительности сочетаемость блоков ограничена: одни должны присутствовать обязательно, другие могут быть взаимоисключающими или, наоборот, устанавливаться только совместно, но для нас это сейчас не существенно. Важно, что эксплуатационная документация на такое решение тоже должна комплектоваться, поставлять ее в избытке практически невозможно, потому что избыточность получится огромной.
Далее для простоты изложения будем предполагать, что комплект эксплуатационной документации состоит из единственного документа, руководства по эксплуатации. Другие документы, например, паспорт или спецификация [2], формируются аналогично.
Простейший способ комплектовать руководство по эксплуатации — создать шаблон с унифицированной структурой разделов и вручную заполнять его включающими ссылками на фрагменты единого источника, содержащие описания моделей блоков, поставляемых в составе конкретной конфигурации. У этого способа есть два весомых недостатка. Во-первых, для каждой конфигурации фактически придется разрабатывать отдельный шаблон. Во-вторых, технические характеристики конфигурации тоже придется указывать вручную, что ведет к тиражированию разделов, в которых они приводятся. Очевидно, этот способ трудоемок и чреват многочисленными ошибками, особенно учитывая, что некоторые технические характеристики конфигурации зависят от моделей блоков, например, максимальный объем оперативной памяти — свойство системной платы.
Технически сложнее, но намного эффективнее сделать руководство пользователя параметрическим. Автор, публикующий руководство на очередную конфигурацию, не будет редактировать ни шаблон, ни фрагменты единого источника, вместо этого он укажет значения параметров конфигурации. При формировании выходного документа они автоматически подставятся в него.
Предусмотрены три категории параметров конфигурации:
структурные;
свободные;
связанные.
Структурный параметр содержит идентификатор (условное обозначение, принятое в рамках проекта) модели включаемого в конфигурацию блока определенного типа, допустим, корпуса или системной платы. По идентификатору фрагмент с описанием блока извлекается из единого источника при обработке входного документа. Если блок некоторого типа отсутствует в конфигурации, то соответствующему структурному параметру следует присвоить пустое значение.
Свободный параметр содержит значение, которое варьируется от конфигурации к конфигурации. Свободными параметрами могут быть, например, объем установленной оперативной памяти, емкость жесткого диска, тактовая частота процессора, гарантийный срок.
Связанный параметр содержит значение, определяемое моделью какого-нибудь блока. Так, максимальный объем оперативной памяти, максимальное количество процессоров, габариты корпуса — связанные параметры.
Все значения структурных и свободных параметров указываются в едином файле конфигурации. Значения связанных параметров указываются непосредственно во фрагментах с описаниями блоков. Шаблон руководства, как обычно, содержит включающие ссылки на фрагменты единого источника, однако, они выражены через значения структурных параметров. Фрагменты единого источника могут содержать ссылки на параметры, иными словами, они «экспортируют» значения связанных параметров и «импортируют» значения свободных и связанных параметров.
Схема формирования параметрического руководства пользователя приведена на рис. 9.
[7] Налицо терминологическая проблема: в отечественной «компьютерной» периодике укоренился первый термин, а в ГОСТ серии 34 используется второй.
ГОСТ 2.105-95. Единая система конструкторской документации. Общие требования к текстовым документам
ГОСТ 2.601-95. Единая система конструкторской документации. Эксплуатационные документы
ГОСТ 34.003-90. Информационная технология. Комплекс стандартов на автоматизированные системы. Термины и определения
А. Н. Валиков. Технология XSLT - СПб.: БХВ-Петербург, 2002 - 544 c.: ил.
И. Ш. Хабибуллин. Самоучитель XML - СПб.: БХВ-Петербург, 2003 - 336 с.: ил.
Extensible Markup Language (XML) 1.0 (Third Edition). W3C Recommendation 04 February 2004
ISO/IEC 15288. System Engineering - System Life Cycle Processes. - 2001
Bob Stayton. DocBook XSL: The Complete Guide - Sagehill Enterprises, 2005 - 560 с.
Norman Walsh, Leonard Muellner. DocBook: The Definitive Guide - O'Reilly & Associates, Inc., 1999 - 644 с.
XML Inclusions (XInclude) Version 1.0. W3C Recommendation 20 December 2004
XML Path Language (XPath) Version 1.0. W3C Recommendation 16 November 1999
XML Path Language (XPath) 2.0. W3C Candidate Recommendation 3 November 2005
XML Pointer Language (XPointer) Version 1.0. W3C Last Call Working Draft 8 January 2001
Extensible Stylesheet Language (XSL) Version 1.0. W3C Recommendation 15 October 2001
XSL Transformations (XSLT) Version 1.0. W3C Recommendation 16 November 1999
XSL Transformations (XSLT) Version 2.0. W3C Candidate Recommendation 3 November 2005