Что такое технология единого источника? (часть 1)

В этом посте начнем разбираться с тем, что же такое технология единого источника (ТЕИ).

Disclaimer: в данном посте будет изложено авторское видение ТЕИ, которое не претендует на истину в последней инстанции.

Сразу же следует отметить, что:

  • в общем случае ТЕИ стоит рассматривать не как чистый инструмент, сколько совокупность стандартов, подходов к документированию и соответствущих инструментов;
  • мы говорим о ТЕИ в применении к документам и документации (безотносительно их вида).

Для начала выделим характерные свойства ТЕИ:

  1. xml-based - технологии основаны на каком-либо словаре xml;
  2. разделение логического содержимого и представления на основе семантических структур данных;
  3. вывод в разные целевые форматы представления;
  4. валидация и контроль;
  5. конструктор текста;
  6. алгоритмизация управления контентом.

Далее мы посмотрим на ТЕИ более подробно и дадим детальную характеристику первых двух свойств (об остальных речь пойдет в следующих постах).

1.   xml-based

В основе технологии единого источника лежит представление данных (документов), основанное на каком-либо словаре xml. Причем словарь является:

  • либо формальным стандартом (например, стандартами OASIS, W3C);
  • либо имеет признаки стандарта [1].

Сочетание xml-based основы и стандартизации для документов дает:

  • базовый фундамент для всех остальных свойств (о них подробно в следующих разделах);
  • управляемость - создание, редактирование и обработка документов происходит по принятым открытым стандартам;
  • предсказуемость - в любой момент времени понятен основной roadmap развития стандартов и технологий.

2.   Разделение логического содержимого и представления

Разделение логического содержимого и представления изначально было главным свойствам ТЕИ и его основным преимуществом. Суть разделения логического содержимого и представления состоит в том, что в документе описываются семантические структуры не связанные с выходными форматами, элементами дизайна и т.п. Иными словами в документе описывается суть - “что это такое?”. А как это будет представлено для внешних и внутренних потребителей остается за рамками.

Для начала приведем пример документа, созданного в обычном текстовом процессоре (на картинке: LibreOffice Writer 4.3, формат файла - .odt)

Вид документа при использовании обычного текстового процессора

В примере хорошо видно оформление документа (с использованием встроенных стилей или прямое изменение стиля). Обратите внимание, что System A выделено цветом, но не несет никакой смысловой нагрузки. Также run.sh выделено моноширным шрифтом, но также не несет никакой логической и смысловой нагрузки. Они являются всего-лишь обычными словами с примененным к ним оформлением.

Теперь посмотрим на тот же фрагмент документа, но созданного с использованием семантических структур стандарта DocBook 5.1.

Вот пример рассматриваемого документа DocBook 5.1 (полный документ, вид в редакторе XMLMind ):

Вид документа DocBook 5.1 при использовании редактора

На первый взгляд - практически одно и то же (за исключением немного другого оформления и добавленной мета-информации). Однако, разница огромна. Посмотрим “под капот” документа и редактора - на сам исходный файл.

Пример документа DocBook 5.1 (полный документ, исходный xml-файл (1.5KB) ):

 <?xml version="1.0" encoding="UTF-8"?>
 <article version="5.1" xml:lang="ru" xmlns="http://docbook.org/ns/docbook"
       xmlns:xlink="http://www.w3.org/1999/xlink"
       xmlns:xila="http://www.w3.org/2001/XInclude/local-attributes"
       xmlns:xi="http://www.w3.org/2001/XInclude"
       xmlns:trans="http://docbook.org/ns/transclusion"
       xmlns:svg="http://www.w3.org/2000/svg"
       xmlns:m="http://www.w3.org/1998/Math/MathML"
       xmlns:html="http://www.w3.org/1999/xhtml"
       xmlns:db="http://docbook.org/ns/docbook">
 <info>
  <title>Руководство администратора System A</title>

  <author>
    <personname><firstname>Eduard</firstname><surname>Tibet</surname></personname>
  </author>

  <orgname>singlesourcing.ru</orgname>

  <pubdate>09.02.2018</pubdate>
</info>

<section>
  <title>Введение</title>

  <para>Для запуска <productname>System A</productname> версии
  <productnumber>1.3</productnumber>:</para>

  <procedure>
    <step>
      <para>В меню выберите пункт
      <guimenuitem>Запустить</guimenuitem>.</para>
    </step>

    <step>
      <para>В окне <guilabel>Запуск System A</guilabel> выберите файл
      <filename>run.sh</filename> и нажмите кнопку
      <guibutton>OK</guibutton>.</para>
    </step>
  </procedure>
  </section>
</article>

Кратко обрисуем его структуру, относящуюся к документу. В этом примере виден фрагмент исходника документа с его параметрами-метаданными (выходные данные документа):

<info>
 <title>Руководство администратора System A</title>

 <author>
 <personname><firstname>Eduard</firstname><surname>Tibet</surname></personname>
 </author>

 <orgname>singlesourcing.ru</orgname>

 <pubdate>09.02.2018</pubdate>
 </info>

Следующий фрагмент ясно показывает, что мы работаем с логическими сущностями, а не представлением вида Bold (Запуск System A), Italic или monospaced run.sh. Перед нами цельная структура документа, которая несет в себе семантическую нагрузку “что это?” (название продукта productname; элементы графического интерфейса guimenuitem, guibutton; названия файлов filename и т.п.)

<section>
  <title>Введение</title>

  <para>Для запуска <productname>System A</productname> версии
  <productnumber>1.3</productnumber>:</para>

  <procedure>
    <step>
      <para>В меню выберите пункт
      <guimenuitem>Запустить</guimenuitem>.</para>
    </step>

    <step>
      <para>В окне <guilabel>Запуск System A</guilabel> выберите файл
      <filename>run.sh</filename> и нажмите кнопку
      <guibutton>OK</guibutton>.</para>
    </step>
  </procedure>
</section>

Здесь сразу надо предостеречь от типичной ошибки новичков, только начинающих работать с ТЕИ - создание и редактирование исходника без использования специализированного WISIWYM-редактора. Все преимущества работы с ТЕИ в этом случае будут полностью нивелироваться временем, затрачиваемым на расстановку тегов, проверку правильности вложенности тегов (валидацию) и т.п.

При работе с ТЕИ вы должны помнить: сосредотачивайтесь на контенте и работайте в WISIWYM-режиме. Удобство редактирования, логическую разметку и скорость работы вам обеспечит только xml-редактор.

В следующих постах мы продолжим подробно разбирать оставшиеся характерные свойства ТЕИ.

Напоминаю, что содержание этого поста всегда можно обсудить прямо на этой странице с помощью сервиса Disqus (см. далее по странице), а также в соответствующем разделе форума.

[1]Под “имеющим признаки стандарта” в данном случае понимается совокупность таких факторов, как открытая спецификация, технический комитет, возможность влиять на развитие стандарта со стороны третьих лиц (например, посредством вхождения в состав технического комитета), опубликованный roadmap развития стандарта и т.п.