XMLデータをそのままInDesignに流し込んでも、体裁を整えることはできません。
Indesignのマッピングという機能を使うと、XMLタグと段落スタイル・文字スタイルを紐づけられ、レイアウトを整えることができます。
XMLタグをスタイルにマッピングする作業は、InDesignドキュメントにXMLデータを読み込む前でも、読み込んだ後でも行うことができます。
読み込む前に設定しておけば、XMLデータが読み込まれた時点でスタイルが適用されるので、読み込み完了と同時にレイアウトも出来上がります。
一方で、マッピングなしでXMLデータを読み込んだあとでマッピングしても、XMLタグとスタイルとが連携され、レイアウトを整えることができます。
ここでは、InDesignにXMLデータを読み込む前にマッピングしておく方法を、一連の流れとして紹介します。
Adobe公式サイト Adobe InDesignの機能を詳しく見てみる
InDesignドキュメントの準備
まずは、InDesignでどういうレイアウトを作るのか、その見本作りをします。
ここでは、次のような体裁をXML組版でやってみます。
紙面先頭に「今月の発表」として大見出しを置き、その次に発表番号とタイトル、顔写真と発表者、その所属、発表内容の概要を掲載します。
発表は複数のグループが登場する想定ですが、サンプルなので1グループのみ作成しました。
段落スタイル・文字スタイルの作成
作ったサンプルに、下のような構成で段落スタイル・文字スタイル・オブジェクトスタイルを充てました。
オブジェクトスタイルは、マッピングには対応していませんが、「対応していない」ことの確認のためにもオブジェクトスタイルを作成してあります。
そして、なにより、スタイルを充てておく方が、あとで修正が入ったときの対応がラクなのです。スタイルを修正すれば、そのオブジェクト全てが修正できるのですから。
XMLデータの作成
InDesignのドキュメントに流し込むXMLデータを準備します。
作成するXMLデータは、InDesignのレイアウト構成に見合った構造でなければいけません。
InDesignには、XMLデータを読み込む際にXSLTを使うこともできます。
XSLTを使うと、もとのXMLデータを直接変更することなく、データの形式を変えることができます。
コツその1:InDesignドキュメントを「構造」という視点で見る
XMLデータを作る上で考え方のベースとなるのは、InDesignドキュメントの構成を「構造」として捉えることです。
「構造として捉える」というと、なんとなく難しそうですが、そんなことはありません。意外と単純です。
まず、忘れてはいけないのは<Root>です。
<Root>は、InDesignドキュメントひとつにつき、必ずひとつあります。この<Root>の子要素としてその他すべてが入ります。
次に、<ストーリー>です。
<ストーリー>は、テキストフレームです。もちろん、<Root>の子要素になります。
テキストフレームに何もタグのついていない状態で、そのテキストフレーム内の一部分の文字などにXMLタグをつけると、そのタグの親として自動的に<ストーリー>タグが付けられます。
そして、そのテキストフレーム内で、次の2点を考えます。
- テキストフレームの中に、段落がある
- 段落の中に、文字やインラインオブジェクトがある
要するに、InDesignの階層構造の基本は、[Root]-[ストーリー]-[段落]-[文字]。これだけです。
InDesignのレイアウトを構造として捉える際の着眼点の基本は、次の3つです。
- テキストフレーム
- 段落
- 文字
これらに、画像などのオブジェクトがインラインで入ったり、表が入ったりしますが、レイアウトの構造を考える上ではいたってシンプルなのです。
テキストフレームに自動で適用される[ストーリー]というXMLタグ名は、デフォルトの名前です。
「タグつきプリセットオプション」で変更することができます。
コツその2:XMLタグ名とスタイル名は同じにする
XMLデータで使うXMLタグ名は、作成したスタイルと同じ名前にします。
例えば、段落スタイル「タイトル」と、その行にある文字スタイル「発表番号」は、XMLデータでは<タイトル>と、その子要素<発表番号>として作成します。
こうすると、マッピングの手間も大幅に削減できますし、なにより、InDesignのレイアウトとXMLデータの構造の関係が直感的に分かりやすくなります。
コツその3:InDesignの改行文字やタブ文字をXMLデータ内でどう記述するのか決める
本来、XMLデータの中では「改行」や「タブ」には、データとしての意味はありません。タグの後ろや文章の途中で改行しても、単にテキストとしての見た目が変わるだけです。
でも、InDesignでの改行は「改行文字」であり、タブには「タブ文字」という役割があります。
この役割の違いを吸収する仕組みが、InDesignには用意されています。
先に作成したInDesignのサンプルドキュメントでは、先頭の大見出し、タイトル行、発表者名、所属、本文の後ろで改行しています。
今回は、XMLデータでも、InDesignと同様に改行を入れておくことにします。
そして、あとでXMLデータをInDesignに読み込む際の読み込みオプションで、XMLデータの改行がそのまま改行文字として読み込まれるように設定します。
ですから今回は、必要個数より多くの改行を入れてはいけません。
他の方法として、InDesignの改行箇所には、改行にタグをつけてXMLデータを作成する方法も考えられます。
InDesignレイアウトとXMLタグとの連携
ここからは、レイアウトとXMLとの連携を作っていく作業です。
InDesignでXMLタグ作成をしてマッピングする作業は、XMLデータの作成ができていなくても進めることができます。
組版仕様ができていれば、XMLデータの作成と、InDesignの作業は同時進行することができます。
InDesignドキュメント内にXMLタグを作成する
XMLタグの作成には、タグの親子関係は考えません。
タグ作成は、単に、そのドキュメントで使われるタグ名を登録する作業です。
InDesignドキュメントにXMLタグを作成する方法はいくつかあります。
- InDesignドキュメントのタグパネルから、「手作業で一つ一つ作成する」
- XMLタグのみを記述した「XML形式のテキストから読み込む」
- XMLタグを作成してある「InDesignドキュメントから読み込む」
- 既にある「XMLデータから読み込む」
今回使用するタグは、スタイルの名前と同じ名前にするので、段落スタイル・文字スタイル・オブジェクトスタイルの名前をそのままXMLタグ名として作成しておきます。
その他にInDesignのデフォルトとして、<Root>タグと<ストーリー>タグがあります。これもそのまま使います。
手作業でのXMLタグ作成についてはこちら
「スクリプト」で作成するならこちら
XMLタグと各スタイルをマッピングする
ここまでで、InDesignドキュメント上で次の準備が整いました。
- 段落スタイル・文字スタイルの作成
- 使用するXMLタグの作成
スタイル作成とXMLタグ作成ができたら、タグをスタイルにマッピングしていきます。
タグパネルから「タグをスタイルにマップ」を開きます。
画面左にXMLタグ名が並び、右側でそれに対応するスタイルをドロップダウンリストから選択していきます。
最初は全て[マップなし]になっています。
一つ一つ選択していくこともできますが、今回は、スタイル名とXMLタグ名を同じにしてあるので、画面左下の「名前順にマップ」をクリックします。
すると、XMLタグと同名のスタイルが一発で選択できます。
画面の一番下に「顔写真」のタグがありますが、オブジェクトスタイルはマッピングには対応していないので、スタイルも[マップなし]です。
ドロップダウンボックスの中を見ても、選択項目の中に「顔写真」のオブジェクトスタイルはありません。
マッピング作業はInDesignドキュメント内だけでの作業なので、この時点でXMLデータが必要なわけではありません。
ですが今回は、マッピング前にXMLデータを準備することで、「このスタイルに、あのXMLタグの内容がくるんだな」ということがイメージしやすくなると考えました。
XMLデータをInDesignドキュメントに読み込む
XMLデータ読み込むドキュメントの準備
サンプルドキュメントに手を加えて、XMLデータを読み込める状態に作り変えます。
まず、先頭の大見出し以下、文章は全て削除しますが、顔写真の入る画像枠はそのまま残します。
テキストフレームの先頭行に、<顔写真>タグのついたアンカーオブジェクトのみがぶら下がっている状態になりました。
先に準備したXMLデータには2つの顔写真タグが入りますが、枠は多めにあっても、読み込み時に自動で削除するよう設定できるので、問題はありません。
ここでは、3つの顔写真用の枠を置いてみました。
今回のXMLデータの読み込みでは、読み込みと同時にレイアウトを実現したいので、ページ上にはテキストフレームを置いておきます。
そして、そのテキストフレームには<ストーリー>タグをつけておきます。
先頭行の顔写真の枠にも、忘れずに<顔写真>タグをつけます。
XMLデータの読み込み
下準備がようやく整いました。
構造画面から「XMLを読み込む…」をクリックして、作成したXMLファイルを選択します。
画像ファイルはXMLデータ内で<顔写真 href=”file://riptin.jpg”>と記述したので、XMLファイルと同じフォルダに置いておきます。
ここで、読み込みオプション画面を表示して、必要なオプションを選択します。
先ほどの「改行」と「タブ」に関する項目は「空白のみの要素を読み込まない」です。
今回は、XMLデータの改行を「改行文字」として読み込むので、「空白のみの要素を読み込まない」にはチェックをしません。
今回チェックするのは「読み込まれたXMLに一致しない要素、フレームおよび内容を削除」のみです。
これにチェックすることで、3つ準備した顔写真用の枠オブジェクトの不必要な分が自動で削除されます。
「改行」「タブ」の扱いが問題となるのは、<ストーリー>の直下に「改行」「タブ」がある場合です。
例えば、今回のサンプルで<本文>の中にある改行は、「空白のみの要素を読み込まない」のチェック如何にかかわらず、改行文字として読み込まれます。
「タブ」については、今回のサンプルでは、タグ内にテキストと一緒に入っているので「空白のみの要素」には該当せず、この項目のチェック如何にかかわらず、タブ文字としてInDesignに読み込まれます。
XMLデータの階層構造がスタイル構造と一致しないとき
全てのタグが、スタイルにマップされなければいけないということはありません。
実は、ここで作成したXMLデータでは、<発表者>の子要素として<発表者名>があります。
でも、InDesignではこれに対応する文字スタイルは作っていません。
したがって、マップもされていません。
こういう場合<発表者名>は、その親である<発表者>にマップされた段落スタイルが適用されます。
InDesignの段落スタイル・文字スタイルの関係を考えれば、すぐ納得できますね。
表組みをXMLデータから作成する事例を紹介
スクリプトで「XML読み込みオプション」を設定する事例を紹介