При выполнении проекта мы старались придерживаться следующего:
максимально широко использовать минимальное число технологий;
отдавать предпочтения технологиям, основанных на международных стандартах, и, следовательно, хорошо документированных;
разделять представление и информации и ее структуру;
хранить и учитывать только исходные материалы, для которых выбирать наиболее компактное и стандартное представление, и всю обработку производить автоматически;
С самого начала предполагалось максимально использовать возможности SGML технологии, которая уже успешно применялась у нас около двух лет и идеально подходила для поставленной задачи.
С инструментами тоже особых проблем не возникало -- все использованное в проекте базовое ПО уже было успешно испытано в других проектах.
Надо было просто решиться и начать работу...
Хорошее представление о том, что такое SGML, дается в статье Бориса Тоботраса http://xtalk.price.ru/SGML/SGML-article.html. Наиболее полное собрание материалов можно найти на http://www.oasis-open.org/. Здесь же мы попытаемся дать лишь самое начальное представление.
SGML (Structured Generalized Markup Language) является стандартом ISO с 1986 года, т.е. документом стабильным по определению, ни одна буква в котором по определению не может быть изменена.
Этот стандарт определяет технологию разметки текста, т.е. технологию определения структуры текста путем разбиения его на вложенные друг в друга разделы, называемые SGML-элементами. Каждый элемент имеет определенный тип и может снабжаться дополнительной информацией в виде набора именованных атрибутов. Способ представления разметки в тексте полностью определяется стандартом, что позволяет создание универсального программного обеспечения для ее прочтения компьютером.
На структуру текста накладываются определенные ограничения: набор возможных типов элементов, атрибутный состав и содержание для элементов каждого типа, т.е. какие элементы и в какой последовательности могут входить в состав данного элемента. Такой набор правил называется DTD (Document Type Definition). Стандарт определяет также формат, в котором может быть представлен этот набор правил, что позволяет также читать эти правила программой и проверять на соответствие им структуру SGML документа.
Конкретные типы документов не являются объектом этого стандарта и могут быть практически любыми -- от собрания стихов до перечня деталей самолета (например, язык разметки Web страниц HTML является одним из таких типов). Важно то, что существует универсальный способ описания такого типа и проверки на соответствие этому типу SGML документа.
Как сказано выше, конкретная структура документа не определяется стандартом и есть объект разработки. Вполне естественно, что на первых этапах нами были предприняты попытки создания собственных DTD, предназначенных для описания конкретных информационных конструкций. Однако, довольно скоро выяснилось, что, во-первых, разработка такой схемы (как, впрочем, и любой схемы данных) есть весть не простая; во-вторых, для таких достаточно хорошо определенных классов документов, как техническая документация, уже существуют достаточно продуманные решения.
Одним из таких решений является DTD DOCBOOK. Эта структура предназначена именно для создания сопроводительной документации к программному обеспечению, и постепенно становится фактическим стандартом. Для нас определяющим явилось наличие готового легко настраиваемого программного обеспечения для производства документации как в печатном, так и в гипертекстовом видах. К тому же на момент начала проекта электронного журнала у нас уже был накоплен достаточный опыт работы как с DOCBOOK, так и с соответствующем программным обеспечением. Так что, выбор DTD был естествененным и безболезненным.
Более того, DOCBOOK оказался даже слишком универсальной структурой. Текст DTD состоит из более шести тысяч строк и содержит описание около трехсот элементов. Не все конструкции поддерживаются имеющимся программным обеспечением, что требует наложения определенных ограничений при разметке документов. Поэтому для облегчения работы занятых разметкой сотрудников нами была выработана упрощенная совместимая версия DTD DOCBOOK, специально предназначенная для описания структуры статей Jet Info.
Первое, с чем приходится сталкиваться при решении подобных задач — это материал, полученный по наследству.
Наследство легко делится на культурные пласты, по которым можно восстановить как пристрастия сменившихся за историю издания технических редакторов, так и пеструю картину электронно-издательского инструментария. Лишний раз убедились, что сказать, что файл имеет "формат Ворд" или в "формат EPS" значит не сказать ничего. Надо еще отыскать "тот самый Ворд" или тот самый QuarkPageIllustrator или PublisherExpressMaker, при помощи которого произведено данное чудо с лэйблом DOC или EPS на борту.
Некоторые пласты и вовсе оказались пустыми, что вынудило нас вынимать из пыльной Леты канувшие туда печатные экземпляры издания. Тогда же узнали, с какой стороны лучше подходить к сканеру и что означит красивое слово OCR.
В довершение всех бед, помимо анархии исходного материала, в то время еще отсутствовала полная ясность, каким должен быть наш собственный формат представления данных.
Одна мысль, что плод тяжкого труд предназначен для бессмертия, вдохновляла отчаявшихся...
А внутри у ей неонка...
С высоты птичьего полета электронный журнал выглядит примерно так:
единицей "текстовой" информации является статья (один или несколько файлов в формате SGML/DOCBOOK);
иллюстрации хранятся в виде файлов в GIF (снимки с экрана и прочий материал растрового происхождения) и PDF (все остальное) форматах;
весь исходный материал хранится в системе контроля версий, что позволяет восстановить состояние проекта на любой момент от сотворения Адама, а также не так часто кричать "Ой!" при одновременном редактировании файлов несколькоми людьми.
конечные HTML файлы с материалами статей производятся в пакетном режиме с использованием стилей DSSSL ( http://www.nwalsh.com/) с нашими модификациями (позволяющими использование HTML шаблонов). При этом также отфильтровывается учетная информация обо всех HTML фрагментах статьи. Для всех иллюстраций создаются соответствующие GIF файлы. Правила генерации и зависимости между файлами отслеживаются программой make. Внешний вид страниц определяется шаблоном в SGML/HTML формате.
Произведенная на предыдущем этапе учетная информация собирается в каталог, который используется в работе поисковой машины и при создании навигационных страниц;
все навигационные страницы динамически производятся CGI программой. При этом используется два шаблона внешнего вида (один для титульной страницы, другой -- для всех остальных);
для передачи всего этого пользователю используется де-факто стандартный Web-сервер Apache без каких-либо функциональных особенностей.
Таким образом, внешний вид всех страниц сервера определяется всего тремя небольшими документами-шаблонами в полном соответствии с принципом разделения содержания и внешнего представления информации.