Использование XML для автоматизации верстки в InDesign CS

Вступление

О том, что в InDesign существует хорошо поставленная поддержка импорта и экспорта документов в формат xml знают, или по крайней мере видели, что она существует, многие, но регулярно работают с этим форматом единицы, причем эти единицы не ведут активной пропаганды распространения xml в массах. А между тем правильное использование xml может в разы повысить скорость работы верстальщика и снизить коэффициент трения с автором или менеджером рекламного отдела, поскольку последний будет косвенно (уже то хорошо, что не лично) участвовать в верстке.
Единственное и основное, что препятствует широкому внедрению технологий на основе xml в массовое использование, является сравнительно малое количество хороших визуальных xml-редакторов. А те, которые есть, в основном продаются за очень нескромные деньги. Конечно, опытный html-кодер или программист могут быстро освоить написание xml в любом текстовом редакторе. А вот обучение работе в подобном стиле корреспондентов, авторов, рекламщиков и прочих неконгруэнтных прогрессу личностей, представляется мне весьма и весьма проблематичным. Будем надеяться на сознательность Microsoft, которая может когда-нибудь внедрить нормальную поддержку xml в пакет Office.

Базовые представления о xml

Для тех, кто еще ни разу не сталкивался с xml, что вполне простительно в силу новизны и сравнительно малой, в отличие от html, распространенности этого языка, объясняю суть. Аббревиатура XML расшифровывается как eXpanded Markup Language — расширяемый язык разметки. Язык xml предназначен для описания структур данных.

Что означает слово «расширяемый»? Это одно из главнейших и полезнейших, на мой взгляд, свойств языка заключается в том, что в нем нет определенного набора тэгов, придерживаться которых строго обязательно. Вы сами можете определить, какое имя дать тэгу, который будет соответствовать нужному элементу.
Тэг в xml похож по внешнему виду на тэг html. Но, в отличие от достаточно легко относящегося к отсутствию закрывающих тэгов языка html, xml не позволяет наличие открывающего тэга в отсутствие закрывающего, а равно и наоборот.  В общем виде элемент xml представляет собой примерно такую конструкцию:

<Article>Текст статьи</Article>

В имени тэга не должно содержаться пробельных символов!

В этом примере Article — это имя тэга, а «Текст статьи» — значение элемента, а вся запись — элемент xml.

Строгость к тэгам является следствием того, что xml, в отличие от неоднократно уже упоминавшемся языке разметки html или от знакомого и очень полезного языка разметки текстов InDesign Tagged Text, не дает представления об оформлении данных. Основное предназначение его — наглядно демонстрировать отношение данных, их упорядочивание. Например, чтобы определить структуру отдельной статьи, предназначенной для публикации, можно составить следующую схему в виде xml:

<Article>
<Autor>Васисуалий Лоханкин</Autor>
<Header>Трагедия русского либерализма</Header>
<Body>Роль Васисуалия Лоханкина в становлении русского либерализма трудно переоценить. Его бескорыстное служение Отечеству внесло огромный вклад...
 ...
Судьба его воистину трагична.
 </Body>
</Article>

Как видим, в данной структуре статьи присутствуют три элемента (поля данных): автор, заголовок и тест. Любая другая статья может описываться этой же структурой, нужно только заменить значения элементов.

Элемент xml может быть пустым, — в этом случае запись его будет выглядеть  проще:

<Signature/>

Каждый тэг может содержать произвольное количество атрибутов, и каждый элемент может содержать произвольное количество комментариев.
Атрибут применяется для описания любого свойства элемента, который соответствует тэгу. Например:

<Article TextStyle = "Small text" Position = "Top">Текст статьи</Article>

В этом примере тэг содержит два атрибута: «TextStyle» и «Position». Наличие этих атрибутов не означает, к сожалению, что при импорте InDesign примет их к сведению и отформатирует текст в соответствии. Такая тонкая работа требует доводки вручную, либо, что намного полезнее и правильнее, скриптом. Комментарий имеет вид:

<!-- К опубликованию -->

и располагается в элементе следующим образом:

<Article TextStyle = "Small text" Position = "Top">Текст статьи<!-- К опубликованию --></Article>

Кроме вышеописанных свойств, язык xml имеет еще некоторые специфические объекты, такие как Processing Instructions. Но, поскольку InDesign пока (надеюсь, что пока) их воспринимает, но никоим образом не обрабатывает, подробно останавливаться на них мы не будем.

От теории к практике

Дальше изучение будем продолжать на практике, поскольку задачи полностью и углубленно изучать структуру языка xml нам вообще-то без надобности. Да и полчаса практических занятий дадут пищи для размышлений больше, чем двухчасовая лекция по конструктивным особенностям языка.
На двух примерах (повторение — мать учения) мы продемонстрируем возможность автоматического размещения текстовых (в первом примере) данных и текстовых данных совместно с графическими (во втором примере) в шаблон, имеющий специальную xml-структуру. Одновременно продемонстрируем, что шаблоны могут иметь различные варианты оформления элементов, при том, что структура xml-файлов, предназначенных для каждого из них, не потребует изменения.

Для начала нам понадобится создать базовый макет страницы в InDesign для использования его в качестве шаблона.

base_view

На странице расположены:

  • текстовый фрейм для заголовка, содержащий соответствующий текст и оформленный стилем «Header»
  • текстовый фрейм для подзаголовка, содержащий текст и оформленный стилем «Subheader»
  • текстовый фрейм для имени автора, содержащий текст и оформленный стилем «Autor»
  • три связанных текстовых фрейма, в которых должен содержаться основной текст статьи, к которому применен стиль «Text»
  • один большой и два маленьких фрейма для фотографий, которые содержат картинки, предназначенные для заполнения места

Теперь откроем панель структуры (Structure) путем нажатия на кнопку слева окна выбора процента отображения страницы.structure_button

Затем, нажав на кнопку Structure, выберем пункт меню Add Untagged Items (Добавить не включенные в структуру элементы).

structure_window

В результате автоматического добавления элементов у нас получится упорядоченная структура, состоящая из четырех текстовых и трех графических элементов.  Причем, базовым объектом для вышеназванных объектов служит не объект <Root>, а автоматически созданный объект <Article>. Это означает, что и тексты, и картинки структурно относятся к одному объекту — статье.
Кроме того, можно заметить, что количество текстовых фреймов в документе не соответствует количеству элементов. Дело в том, что элементом является не сам текстовый фрейм, а объект Story, который может состоять из любого количества текстовых фреймов, начиная с одного.

structure_map

Для того чтобы раз и навсегда определить, каков статус у каждого элемента в статье, создадим для каждого из элементов новый атрибут с именем State, имеющим то значение, соответствующее его назначению:

  • «Заголовок» — «Header»
  • «Подзаголовок» — «Subheader»
  • «Основной текст» — «Main Text»
  • «Автор» — «Autor»

Добавление атрибутов производится при помощи нажатия левой кнопки мыши на соответствующем элементе и выборе соответствующего пункта меню.

edit_attribute

Атрибуты нужны для того, чтобы точно знать, какие данные вносить уже в процессе редактирования, поскольку к автору может (и должен) попасть xml в виде шаблона, то есть не содержащий того текста, который мы определили во фреймах.

Заметим, что элементы, соответствующие картинкам, уже имеют атрибут вида:

href = file:///C:/Documents and Settings/All Users/Documents/My Pictures/Sample Pictures/Winter.jpg

Наличие у элемента атрибута с именем href воспринимается InDesign как указание на то, что элемент является помещаемым файлом, предпочтительно — картинкой. Значение этого атрибута должно состоять из имени файла, записанного в виде URI.

Элементам картинок мы также добавляем атрибут с именем State:

  • Большой картинке — «Main picture»
  • Маленькой картинке 1 — «Small picture 1»
  • Маленькой картинке 2 — «Small picture 2»

map_tags

Теперь нужно синхронизировать тэги xml и стили документа. Сделать это нужно для того, чтобы сохранить форматирование при экспорте и импорте отредактированного xml-файла. Делается это при помощи команд «Map Tags to Styles» и «Map Styles to Tags». У нас будут соответственно:

  • Header — H
  • Subheader — H1
  • Autor — H2
  • Text — P

Не забудьте, что нужно настроить соответствие в обе стороны, иначе не полной синхронизации не будет.

После синхронизации структура документа изменится — текстовые значения, которые были ранее у объектов Story, получат новые xml-элементы, содержащиеся в объектах Story, и имеющие названия соответствующие тем тэгам, которым задано соответствие со стилем, которым оформлен текст. Например, в xml-элементе Header элемент, содержащий текст заголовка, будет назван «H».

Описание структуры полностью подготовлено.
Теперь осталось только сохранить ее в файл и отдать авторам для использования. Для этого нажимаем на элементе <Root> левой кнопкой мыши и выбираем «Export XML».

export_xml

После того, как вы выберете имя для файла xml, в меню экспорта будет предложено выбрать настройки экспорта. Ничего сложного в них нет, собственно и менять их не нужно, а особо — не стоит менять кодировку. Вот пример получившегося xml-файла. Как видим, содержание его полностью соответствует формату xml.

<Root>
<Article>
<Story State="Header">
<H>Заголовок</H>
</Story>
<Story State="Subheader">
<H1>Подзаголовок</H1>
</Story>
<Story State="Main Text">
<P>Основной текст</P>
</Story>
<Story State="Autor">
<H2>Автор</H2>
</Story>
<Figure State="Main picture" href="file:///C:/Documents%20and%20Settings/All%20Users/Documents/My%20Pictures/Sample%20Pictures/Winter.jpg"/>
<Figure State="Small picture 1" href="file:///C:/Documents%20and%20Settings/All%20Users/Documents/My%20Pictures/Sample%20Pictures/Winter.jpg"/>
<Figure State="Small picture 2" href="file:///C:/Documents%20and%20Settings/All%20Users/Documents/My%20Pictures/Sample%20Pictures/Winter.jpg"/>
</Article>
</Root>

Сохраните документ как InDesign Template — из него мы будем делать различные по дизайну, но близкие по структуре документы. Тимплейт нужен для того, чтобы созданные из него документы имели подготовленную структуру, которая будет автоматически заполнятся данными. Если использовать «чистый» документ InDesign, то после импорта отредактированного xml придется вручную перетягивать методом drag and drop элементы из панели структуры в публикацию и заново из форматировать.

Редактирование xml

Просмотреть xml можно при помощи Internet Explorer (версия 6.0 поддерживает просмотр xml).
Но редактировать, а тем более — визуально, Explorer не умеет. А нам нужно, чтобы редактировать могли бы даже авторы или рекламщики.
С этого момента нам никак не обойтись без редактора xml. В сети можно найти пару относительно приличных xml-редакторов. Если у вас нет на примете ни одного подходящего, можно взять PXE. Это бесплатный редактор, но он, тем не менее, обладает возможностями, которые нам нужны. Откроем в нем получившийся у нас xml-файл, выберем Tree View и увидим вот что:

tree_structure

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

edit_text

Пример №1. Текст

Для первого варианта редактирования xml, без использования измененной графики, будем использовать первую главу»Сказки о тройке» братьев Стругацких (взять можно на lib.ru). Заменим текстовое значение тэгов, полученное в результате экспорта на нужные нам, получив новый xml-файл. Получится довольно большой объем текста.

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

trinity_page

Затем легким движением руки, шаблон превращается… превращается… превращается шаблон… в элегантно оформленную страницу. Причем превращается он гораздо быстрее, чем вы успеете прочитать эту фразу. Для этого нужно только импортировать xml. И вот, что получается через секунду:

trinity_final

При правильно сделанном шаблоне верстальщику остается только окинуть опытным глазом созданную публикацию, заметить и устранить мелкие недостатки и почистить текст при помощи скрипта sZam самой свежей версии.

Пример №2. Работаем графику

Работа с графикой несколько сложнее, чем с текстом потому, что одна неправильная буква в имени файла может привести к тому, что автоматического размещения не произойдет. К тому же имя файла и путь к нему предпочтительнее хранить в виде URI, что отличается от привычного вида имени файла в Windows.
Выход в этой ситуации достаточно прост. Дело в том, что в xml-файле можно использовать относительные пути — то есть, если файл картинки находится в той же папке, что и xml-файл, то значение атрибута href может быть такого вида:

href = file://picture.jpg

Значение атрибута href должно начинаться с file://, что обозначает, что картинку следует искать в локальной файловой системе. Есть предположение, что file:// можно заменить на http:// — в этом случае в публикацию будет помещена картинка из сети.
Относительный путь к картинке может содержать указания на вложенные папки, например

href = file://pictures/picture_1.jpg

означает, что картинка находится в папке pictures, которая находится в той же папке, в которой расположен xml-файл.

InDesign позволяет использовать в качестве пути к файлу и запись, соответствующую Windows-представлению пути файла, только начинаться описание пуи все равно должно с file://.

Отредактируем xml-шаблон. В качестве текста используем первую главу повести «Багровый остров» Михаила Булгакова, в качестве новых изображений — картинки из папки Sample Pictures, скопировав их в папку pictures, которую создадим в той папке, куда сохраним xml.
Затем в xml пропишем пути к картинкам. Для этого в PXE нужно два раза щелкнуть по элементу, соответствующему картинке и выбрать нужный атрибут:

modify_image

Сохраним файл как island.xml.

Снова откроем тимплейт и отредактируем его, кардинально изменив не только взаиморасположение элементов, но и их размеры. Также немного подправим стили.

island_page

Имортируем xml и получаем именно то, что стоило ожидать: и текст, и картинки автоматически изменились в соответствии с новым xml-файлом.

island_final

К сожалению, картинки не растягиваются автоматически в соответствии с фреймами, поэтому работы верстальщику будет несколько больше, чем при работе с текстом. Но это с лихвой компенсируется отсутствием затрат времени на поиск нужных файлов. Стоит заметить, что при импорте значение атрибута href автоматически приводится к записи в URI виде с указанием полного пути к файлу.

На что следует обратить внимание при работе с графикой. Очень полезное свойство атрибута href  — это возможность помещать автоматически файлы любого типа, который может быть помещен в InDesign. Можно помещать и pdf, и eps, и даже текстовые файлы, указав в качестве значения атрибута href путь к этому файлу.
В том случае, если InDesign не может найти файл картинки, например, из-за ошибки в имени, во время импорта xml будет предложено вручную указать путь к файлу.

Послесловие

Данную статью не стоит рассматривать как инструкцию по работе с xml в InDesign. Это только пример, показывающий как при помощи шаблонной структуры можно ускорить и облегчить работу с печатными изданиями самых различных типов. В статье даже не упомянается о DTD (заинтересовавшиеся могут поискать дополнительную информацию), многих других понятий, специфичных для xml. Совершенно не коснулись мы потрясающе эффективной связки xml — скрипты, которая дает неограниченные возможности автоматизации верстки. Даже на доскональную правильность и полноту описания единственного упомянутого приема работы с xml статья не претендует. Но если хотя бы в одной редакции или в одном издании под влиянием этой статьи перейдут на использование xml в качестве формата хранения данных, автор будет считать свою задачу выполненной. Тут не обходится без своекорыстных интересов — влиять на руководство, побуждая его перейти к новым технологиям намного легче, указывая на опыт коллег и конкурентов.

Приложения

Файлы примеров, использованных в статье:
Базовый шаблон
Сказка о тройке
Багровый остров
Все xml-файлы и картинки

1 комментарий на “Использование XML для автоматизации верстки в InDesign CS

  1. Уведомление: Новое из сделанного | Adobe scripts

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s