Translation:What is in an IDML file
From IDMLWiki
IDMLファイルにあるもの
サンプルプログラム「Hello World」の次は、「Hello World」パッケージをみてみましょう。SDKの<IDMLTools>/samples/helloworldディレクトリに、下記の2つのパッケージがあります。
- InDesignによって作成されたhelloworld-1.idml
- テキストエディターで作成された、ミニマルなIDMLファイルであるhelloworld-2.idml
これらのファイルのコンテンツを表示するには、解凍する必要があります。IDMLToolsがセットアップされていれば、パッケージツールを使って解凍できます。手順は次のとおりです。
Windows
package.bat -d helloworld-1.idml helloworld-1 package.bat -d helloworld-2.idml helloworld-2
Mac OS
package.sh -d helloworld-1.idml helloworld-1 package.sh -d helloworld-2.idml helloworld-2
InDesignのIDML書き出し(helloworld-1.idml)では、各ストーリーファイル、スプレッドファイル、マスタースプレッドファイルを含むIDMLパッケージファイルすべてのタイプが意図的に含まれます。「Helloworld-1」の場合は下記のファイルです。IDML File Format Specificationに説明があります。
- designmap.xml
- mimetype
- MasterSpread_uc4.xml
- container.xml
- META-INF\metadata.xml
- Resources\Fonts.xml
- Resources\Graphics.xml
- Resources\Preferences.xml
- Resources\Styles.xml
- Spreads\Spread_ubd.xml
- Stories\Story_ud5.xml
- XML\BackingStory.xml
- XML\Tags.xml
それぞれのファイル内で、各プロパティは設定されています。designmap.xmlファイルは300行以上あります。各プリファレンス、スタイルおよびスウォッチはResourcesフォルダ内のファイルに記述されています。これは、空のドキュメントであらゆるプロパティを設定するスクリプトを書いて、さらに新しいコンテンツのあらゆる可能なプロパティを設定することにおよそ等しいことです。これは意図的なもので、デフォルトが異なる環境でドキュメントを開いても、結果が変わらないようにするためです。
InDesignのIDML書き出しが冗長である一方、読み込みはとても柔軟に設計されています。属性がすべて設定されている必要はありません。ないものは、デフォルト値が割り当てられます。helloworld-2.idmlファイルには、たった2つのXMLファイルしかなく、エレメントと属性の設定も少なめです。これは、デフォルト値を利用したスクリプティングです。例えば、ほんの数行のコードでテキストフレーム1つを含む、1ページ分のドキュメントを作成することができます。そのようなスクリプトには、プリファレンスやスタイル、スウォッチなどへの関連が必要ありません。アプリケーションのデフォルト値がきちんと設定されるからです。これは、InDesignが書き出すものに比べて、はるかに短いスクリプトです。
Helloworld-2は、Helloworld-1と比べるととてもシンプルです。designmap.xmlファイルは数行しかありませんが、idPkg:SpreadとidPkg:Storyエレメントを使うことにより、スプレッドとストーリーファイルドキュメントのエレメントを含んでいます。
<?xml version="1.0" encoding="utf-8"?><?aid style="50" type="document" readerVersion="6.0" featureSet="257"?><Document xmlns:idPkg="http://ns.adobe.com/AdobeInDesign/idml/1.0/packaging" DOMVersion="6.0" Self="d"><idPkg:Spread src="Spreads/Spread_spread1.xml"/><idPkg:Story src="Stories/Story_story1.xml"/></Document>
その他の重要なコンテンツはスプレッドファイルとストーリーファイルです。ストーリーファイルはシンプルです。idPkg:Storyエレメント内のStoryエレメントに、ストーリーのIDとなるSelf属性があります。これを使って、パッケージ中でならばどこでも、テキストフレームにストーリーを参照させることができます。スプレッドファイルでも可能です。Storyエレメントには「Hello World」というテキストがあります。このテキストは、デフォルトのテキスト属性で書式設定されています。
<?xml version="1.0" encoding="utf-8"?><idPkg:Story xmlns:idPkg="http://ns.adobe.com/AdobeInDesign/idml/1.0/packaging" DOMVersion="6.0"><Story Self="story1"><Content>Hello World!</Content>
</Story></idPkg:Story>
スプレッドファイルもシンプルです。ただし、いくつか説明が必要です。まずはコードをみてみましょう。
<?xml version="1.0" encoding="utf-8"?><idPkg:Spread xmlns:idPkg="http://ns.adobe.com/AdobeInDesign/idml/1.0/packaging" DOMVersion="6.0"><Spread Self="spread_1" PageCount="1"><TextFrame Self="textframe1" ParentStory="story1" ContentType="TextType" ItemTransform="1 0 0 1 -612 -396"><Properties><PathGeometry><GeometryPath PathOpen="false"><PathPointArray><PathPoint Anchor="36 36" LeftDirection="36 36" RightDirection="36 36"/><PathPoint Anchor="36 186" LeftDirection="36 186" RightDirection="36 186"/><PathPoint Anchor="172 186" LeftDirection="172 186" RightDirection="172 186"/><PathPoint Anchor="172 36" LeftDirection="172 36" RightDirection="172 36"/></PathPointArray></GeometryPath></PathGeometry></Properties></TextFrame></Spread></idPkg:Spread>
ストーリーファイルと同様、スプレッドファイルのドキュメントエレメントはidPkgネームスペースにあります。実際のSpreadエレメントには、Self属性によりユニークIDが与えられています。PageCount属性でスプレッドのページ数をコントロールしています。この属性がないと、デフォルトのページ数になります。ItemTransform属性は重要です。スプレッドが複数あるとき、どのIDMLドキュメントでもみられるように、各スプレッドはペーストボード上で縦方向に並びます。pagebuilderサンプルでも、テンプレートからそのようなドキュメントを生成します。
スプレッド内には、テキストフレームエレメントが1つあります。このフレームはParentStory属性を使うことにより、ID「story1」をもつストーリーと同一です。このストーリーファイルをみると、この値がストーリーのIDに定義されていることがわかります。TextFrameには独自のItemTransform属性もあります。もしこの属性に、恒等行列(“1 0 0 1 0 0”)と呼ばれる特別な行列が設定されると、座標原点はスプレッド中央になります。上記のTextFrameのItemTransform属性は、座標原点を左ページの左上隅に戻しています。ページ幅が612pt、高さ792ptなので、座標原点はノド中央(デフォルトではページの右側)から612pt左へ、ページ高さの半分(396pt)上に動きます。pagebuilderサンプルに、様々な閉じかたの複数ページスプレッドでのデモがあります。
PathPoint配列はTextFrameの配置を指定します。IDML File Format Specificationに、これらのエレメントの説明があります。
