XML в InDesign CS. Практикум

Вступление

Предыдущая статья по использованию xml в InDesign CS была несколько обзорной и ознакомительной, и не раскрывала всех преимуществ использования этой перспективной технологии. Мало  внимания было уделено именно практическим приемам работы в InDesign. Для восполнения этого недостатка и была запланирована эта статья.
К тому же, с выходом Adobe InDesign CS2 возможности использования xml были значительно улучшены и расширены. Эти возможности  мы сейчас и рассмотрим применительно к повседневным задачам верстальщика.

Термины

Начнем с того, что повторим описание терминов, которые будут использоваться. Отзывы читателей показали, что в предыдущей статье было мало уделено внимания базовым понятиям xml: тегу и элементу, что вызвало путаницу в понимании этих понятий.

Тег используется в качестве имени элемента. Обычно (и желательно) тег должен иметь некий смысл, указывающий, что элемент, помеченный этим тегом занимает определенное место в структуре документа. Причем, остальные элементы, помеченные этим же тегом, имеют некоторые схожие свойства с данным. Например, тег H1 обычно обозначает заголовок верхнего уровня, H2 — заголовок уровнем ниже. Вполне возможно, что в структуре документа будет несколько заголовков верхнего уровня. В этом случае резонно предположить, что эти заголовки относятся, например, к отдельным материалам. Заголовки второго уровня могут обозначать отдельные главы в этих материалах. Или, отвлекаясь от текстовых данных, представим себе документ, где в виде графических файлов присутствуют фотографии, рисунки и диаграммы. Вполне логично сделать так, чтобы всем фотографиям соответствовал тег Photo, рисункам — Picture, диаграммам — Diagram. При просмотре структуры документа человеку будет понятно, какого типа иллюстрация находится в каждом конкретном месте. Более того, если обработка документа будет производиться скриптом, расставляющим подписи, то в зависимости от тега элемента скрипт может делать разные подписи  под иллюстрациями, например для рисунков: «Рис. № N, текст подписи«, для диаграмм: «Диаграмма № N, текст подписи«, и так далее. Замечу, что даже нумерация может проводиться отдельно для каждого вида иллюстраций.

В предыдущей статье не было уделено должного внимания вопросу создания и редактирования тегов собственно в InDesign. Сейчас мы постараемся заполнить этот пробел.
Для добавления и редактирования тегов существует специальное окно Tag (Window->Tag). Добавление нового тега происходит при нажатии на кнопку New tag внизу окна (средняя кнопка стандартного вида добавления). Удаление тега производится при помощи кнопки с изображением мусорной корзины. Если нажать на стандартную кнопку вверху окна, то все возможные действия с выбранным тегом будут отображены в списке.

tag_window
Пункты New tag и Delete Tag обозначают соответственно создание и удаление тегов. Пункт Autotag (доступный только тогда, когда в текущей публикации выделен объект, который может быть занесен в структуру документа в качества xml-элемента) выполняет автоматическое заполнение структуры.
Пункт Tag Options открывает окно редактирования свойств тега, их всего два — имя тега и цвет, которым будет выделен элемент, отмеченный этим тегом, в документе.
Пункты Map Tags to Styles… и Map Styles to Tags...вызывают окна, в который можно настроить соответствие тегов стилям абзаца или знака и наоборот. Настройка соответствий действует при экспорте и импорте xml файлов — например, если в импортируемом файле есть элемент, помеченный тегом H1, а в документе InDesign настроено соответствие этого тега стилюHeader1, то при помещении на полосу (автоматически или вручную), текст, содержащийся в элементе, будет отформатирован стилем Header1. Об этом достаточно подробно рассказывалось в предыдущей статье.
Пункт Tagging Preset Options открывает окно, в котором можно отредактировать теги, которые будут соответствовать текстовым фреймам, таблицам и ячейкам при автоматическом заполнении структуры.
Пункты Load Tags и Save Tags позволяют загрузить теги из xml файла и сохранить теги в файл соответственно.

tag_window_list
Пункт Load DTD предназначен для загрузки в документ Data Type Definition — определения типа данных. Описание и написание  DTD не входит в задачи этой статьи, интересующиеся могут обратиться к специальным учебникам по XML. Сообщу лишь, что при помощи DTD может быть проверена структура документа. Например, если в DTD задано, что элементы, обозначенные тегами H2 могут содержаться только в элементах, обозначенных тегами H1, и не в коем случае в каких-либо других, то при проверке структуры будет выдано сообщение об ошибке.
Пункт Select All Unused Tags позволяет выделить все неиспользуемые в документе теги — те, которыми не обозначен ни один элемент.

Что стоит запомнить.

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

Элемент — это «реальный» объект в структуре документа InDesign, в некотором роде «ссылка» на некий объект в публикации. С элементом может быть связан текст, картинка, фрейм любого вида. В Indesign CS2 появилась возможность использовать таблицы в качестве элементов. Этот факт не может не радовать, поскольку пользы от такой возможности можно извлечь очень много.
Главным свойством элементов является то, что с их помощью можно влиять на связанный с ними объект. Например, можно связать с элементом структуры некий текст, экспортировать структуру в xml файл, отредактировать значение нужного элемента. При импорте отредактированного xml файла текст в публикации будет изменен в соответствии.

structure_elementsЭлемент структуры может быть не связан с объектом на странице. Например, можно удалить текстовый объект из публикации, но оставить соответствующий ему элемент в структуре. В этом случае элемент будет выглядеть соответствующим образом. На рисунке справа верхний элемент Text (помеченный тегом Text, который был создан ранее) связан с текстом в публикации, а нижний — нет.
Несвязанный элемент сохраняет свои свойства, например текст, поэтому его в любой момент можно связать с любым объектом в публикации методом Drag and Drop — взяв и положив на нужный объект или просто на страницу. В последнем случае автоматически будет создан новый объект.

Что стоит запомнить.

Удаление объекта, связанного с элементом в структуре не удаляет элемент, а удаление элемента удаляет и связанный с ним объект. Для того, чтобы разорвать связь существует команда Untag, которая удаляет элемент из структуры, но оставляет в публикации связанный с элементом объект.

Важнейшим из искусств для нас является…

Перейдем непосредственно к практике. В качестве первого задания разберем, как можно автоматизировать обновление репертуара кинотеатра, сведя к минимуму ручную доработку. Для этого изготовим специальный пример (который можно скачать по ссылке ниже)

cinema_prev

В первую очередь запланируем будущую структуру документа. Для наглядного представления нужно сделать как минимум следующее. В первую очередь нам нужен элемент для объединения всего репертуара в единый элемент, поскольку так будет намного проще понимать структуру. Для этого элемента создадим специальный тег Cinema. Элемент не будет связан ни с одним объектом в публикации, он будет выполнять только организаторскую роль. Теперь, поскольку репертуар у нас расписан на два дня, создадим еще один тег для организаторского элемента, соответствующего отдельному дню, и назовем этот тег без затей: CinemaDay. Каждому дню в репертуаре будет соответствовать отдельный элемент CinemaDay. В нашем случае таких элементов будет два, причем каждый из них, также как и элемент Cinema не будет связан с конкретным объектом в публикации. Теперь создадим теги для действительных объектов. Этих тегов нам нужно минимум два — один для указания дня, другой собственно для описания репертуара. Итак, нам нужно создать теги CinemaHeader и CinemaText.

cinema_tags

В панели структуры вручную создадим запланированные структурные элементы. Для создания элемента нужно воспользоваться соответствующей стандартной кнопкой вверху окна структуры.
cinema_base_elements

Следующим шагом надо настроить соответствие тегов и стилей в обе стороны. Для этого нужно воспользоваться опциями Map Tags to Styles… и Map Styles to Tags… с нужными настройками. Не забудьте, что соответствие нужно обязательно настроить в обе стороны, иначе при экспорте с последующим импортом не произойдет автоматического восстановления стилей в публикации.

cinema_map_styles

После того, как мы закончим соответствие, в структуре документа автоматически будут созданы четыре элемента Story, содержащие вложенные объекты Text, содержащие элементы-тексты, уже оформленные специальными тегами, в соответствии с настройками. Заметим, что располагаются эти новые элементы внутри элемента Root, а не так, как нам нужно. Но это совсем не создаст проблем, поскольку мышкой очень легко перетащить элементы структуры туда, куда нужно нам по запланированной схеме.

cinema_full_elements

Как видно из приведенной схемы, каждый элемент CinemaDay содержит два элемента Story, которые, в свою очередь, содержат элемент CinemaHeader (название дня)  и CinemaText (название фильма).
На этом подготовительная часть закончена. Теперь нужно экспортировать структуру документа в xml файл для последующего редактирования и использования (ссылка на скачивание ниже).

Откроем полученный файл в PXE и отредактируем текст репертуара так, как хотим. Для этого нужно только развернуть все вложенные элементы для того, чтобы добраться до текстовых значений. К сожалению, символы табуляции, которые используются для определения Nested Style в тексте репертуара, PXE не понимает, поэтому редактировать нужно осторожно, стараясь не удалить их. Каждую строку репертуара нужно заканчивать символом ввода. Можно удалить несколько строк или добавить их, удалив или создав соответствующие элементы. Полученный файл сохраним как новый xml файл.

edit_xml

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

cinema_prev_result

Скептически настроенный читатель скажет: «Ну надо же, какое нововведение! Столько заморочек для того, чтобы обновлять тексты. Зачем это мне, если я могу поместить в публикацию документ rtf и регулярно его обновлять?». Конечно, использование rtf — это тоже вариант, причем наборщикам этот вариант более интересен, чем изучение xml, для которого еще нужно искать качественные редакторы. Действительно, из-за двух дней репертуара кинотеатра внедрять новые технологии нет смысла. А вот если нужно верстать публикацию, где содержатся репертуары на неделю двух десятков театров, тридцати кинотеатров, описание выставок десяти художественных галерей и экспозиции семи музеев, причем верстать быстро и качественно? Это нудная и неинтересная работа — одно изменение дат может довести до бешенства однообразием процедуры «скопировал-вставил», поскольку организовать раздельное обновление текстов в двух и более фреймах из одного rtf файла так, чтобы сохранилось форматирование, очень трудно. А при использовании xml — элементарно. И это первая, но не единственная выгода, которую можно извлечь, грамотно применяя xml в InDesign.

Льет ли теплый дождь, падает ли снег…

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

weather_prev

Для этой создания структуры таблицы нам понадобится создать четыре новых тега: Weather (для организационного элемента, который будет содержать в себе таблицу погоды), WeatherHeader и WeatherBody для заголовка и текста таблицы соответственно и WeatherImage для погодных картинок.
После создания тегов, зададим соответствия для WeatherHeader и WeatherBody в обе стороны. В результате у нас таблица будет автоматически занесена в структуру. В структуре создадим элемент с тегом Weather, куда переместим элемент Story, содержащий таблицу. В результате у нас получится вот такое дерево структуры:

weather_full_elements

Элементов Cell в таблице больше, чем отображено на рисунке. Теперь нужно экспортировать структуру в xml файл.
Въедливый читатель, конечно, заметит тут некоторый подвох и скажет: «Позвольте, но ведь при экспорте в файл запишется и элемент Cinema со всеми своими внутренностями? Он что, будет бесполезно болтаться в новом файле? А вдруг, в репертуар нужно будет внести изменения, то придется обновлять и погоду? Но ведь это крайне неудобно!». Конечно, не придется, ведь это действительно очень неудобно. Тем более, что файл репертуара мы еще раз модифицируем в следующей главе. Дело в том, что при экспорте документа можно (а в нашем случае — нужно) включить опцию Export From Selected Element — экспортировать от выбранного элемента.

export_window

В этом случае экспортируется только тот элемент, который в данный момент выбран в окне структуры. Именно для этого нам и нужны несвязанные элементы — при экспорте и импорте они служат базовыми элементами для обработки.

Очень познавательно рассмотреть структуру этого файла. Например, элемент Table имеет атрибуты aid:tableaid:trows,aid:tcols со значениями table5соответственно. Это обозначает, что элемент является таблицей, имеющей 5 строк и четыре столбца. Первый элемент Cell в таблице имеет атрибуты aid:tableaid:crowsaid:ccolsaid:ccolwidth со значениями cell2158.228474608122376 соответственно. Эта запись обозначает, что данный элемент является ячейкой таблицы, которая занимает две строки и один столбец (а в публикации это так и есть) и имеет ширину 58 с мелочью пунктов (sic!).
Как мы можем использовать эту информацию? Используя описанные атрибуты, можно, при известном умении создавать сложные по структуре таблицы в InDesign при помощи xml файлов. К сожалению, невозможно в xml файле описать форматирование таблицы (это, кстати, согласуется с принципами xml — представление структуры данных, а не форматирование их), но возможность из xml формировать таблицы очень сложно переоценить. Например, можно использовать заранее отформатированную в InDesign таблицу, в которую будет импортироваться данные, например прайс-листы. При условии, что в новой таблице точно такое же количество строк и столбцов (а такое бывает очень часто), обновление данных произойдет таким образом, что оформление таблицы сохранит свою актуальность. Разве это не упрощение и облегчение повседневного труда в десятки раз?

Тем, кто знаком с программированием в среде Microsoft Office не составит большого труда написать макрос, который экспортировал бы таблицы, например из Exel в xml файлы, которые можно импортировать в InDesign. В результате и наборщикам можно не переходить на новые технологии, и верстальщикам можно облегчить труд. Используя атрибуты для объединения ячеек и для задания им размеров, можно создать таблицу нужного вида и размера. А если взять на себя труд и написать скрипт для InDesign который форматировал бы помещенные таблицы в соответствии с установленными атрибутами, то автоматизацию процесса можно довести до логического завершения. Например, задав при экспорте из Exel атрибут ячейки color равный Black, атрибут tint, равный 30, после импорта xml файла скриптом InDesign можно считать значения атрибутов и применить их к соответствующей ячейке.
Для изданий, где модульная реклама составляет все содержание полосы, подойдет вариант с таблицей, которая занимает всю полосу и имеет количество ячеек соответственное количеству модулей. Оперируя специальными атрибутами ячеек и помещая в них элементы со ссылками на графические файлы, можно добиться автоматической верстки рекламных полос.

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

weather_prev_result

Что следует запомнить

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

В окончательном виде

Вспомним, что xml файл для хранения репертуара кинотеатра у нас не отделен от основной структуры публикации. Следует урегулировать это несоответствие и исправить некоторые погрешности в структуре. Выделите элемент Cinema и экспортируйте выделенный элемент в файл. Откройте файл для редактирования в PXE.

cinema_edit_final

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

При импорте получившегося xml файла в публикацию InDesign обязательно включите опцию Show Import Options для изменения свойств импорта.

import_options

Доступные опции импорта xml:

  • Create link — создать связь с xml файлом. Нужно отметить обязательно, поскольку впредь мы не намереваемся всякий раз для обновления файла производить импорт.
  • Clone repeating text elements — клонировать повторяющиеся текстовые элементы. Назначение этой опции мне пока не ясно, но ее изменение никак не влияет на решение нашей задачи.
  • Only import elements that match existing structure — импортировать только существующие в структуре объекты. Эта опция не позволяет InDesign создавать новые элементы в структуре в том случае, если даже они есть в импортируемом файле.
  • Import text elements into tables if tags match — импортировать текстовые элементы в таблицы при соответствии тегов. Включать при импорте файла, содержащего табличные данные.
  • Do not import contents of whitespace-only elements — не импортировать пустые текстовые элементы. Включать для контроля над импортом элементов, не содержащих ничего, кроме пробельных символов.
  • Delete elements, frames and content that do not match imported xml — удалять элементы, фреймы и содержимое из структуры публикации, если они не содержатся в импортируемом файле. Нужно отметить обязательно, поскольку при выключенной опции произойдет наложение данных в репертуаре. В файле было изменено количество элементов, поэтому нужно удалить те элементы, которые не будут больше использоваться. Вообще, эту опцию следует включать всегда при изменении структуры файла.

После импорта файла репертуара, импортируйте файл таблицы погоды с теми же настройками. Теперь вы сможете обновлять связь с xml файлом точно также, как и с обычным, из окна Links, что очень удобно. Теперь для того, чтобы обновить данные в публикации нужно всего лишь отредактировать xml файлы и щелкнуть всего на одну кнопку в InDesign. И все!

links_window

Приложения

  1. Файл InDesign, в котором я проводил опыты + картинки погоды. (~500 кб).
  2. Все xml файлы (~2,5 кб).

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

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

Логотип WordPress.com

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

Фотография Twitter

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

Фотография Facebook

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

Connecting to %s