第5章 PresentationML

スライドの仕組みとその内容

Presentation

pptフォルダにあるpresentation.xmlがPresentationMLのメインパーツです。プレゼンテーションを構成するスライドの情報を列挙しています。さらに、プレゼンテーションとしての属性を格納しています。

presentation.xmlはpresentation要素をルートとして、以下の子要素があります。

presentation要素の子要素一覧
要素名 説明
sldMasterIdLst スライドマスターIDリスト
notesMasterIdLst ノートマスターIDリスト
handoutMasterIdLst 配布資料マスターIDリスト
sldIdLst スライドIDリスト
sldSz 表示するスライドサイズ
notesSz ノートスライドサイズ
smartTags スマートタグ
embeddedFontLst 埋め込みフォントリスト
custShowLst

List of Custom Shows。

対応するプレゼンテーションでは表示順の変更ができます。custShowLst要素は子要素として複数のsldLst要素を格納します。sldLst要素は子要素にスライド参照情報を持つsld要素を格納します。

photoAlbum

Photo Album Information(フォトアルバム情報)。

フォトアルバムは画像のリストです。このリストは1つ以上のスライドに展開され、同じレイアウト、書式で表示されます。

custDataLst 顧客データリスト
kinsoku 禁則処理
defaultTextStyle 規定のテキストスタイル
modifyVerifier 更新
extLst 拡張リスト

sldIdLst要素でプレゼンテーションを構成するスライドを列挙しています。スライドのデータはslidesフォルダにありますが、ファイル名ではなく、スライドのID値を列挙しています。

たとえばスライドが2つのプレゼンテーションの場合、presentation/sldIdLstは次のように記述されています。

presentation/sldIdLstの例
<p:presentation ...>
  ...
  <p:sldIdLst ... > 
    ...
    <p:sldId id="256" r:id="rId2"/>
    <p:sldId id="257" r:id="rId3"/>
    ...
  </p:sldIdLst>
  ...
</p:presentation>

sldId要素でそのスライドデータを持つスライドパーツを指定します。スライドはsldId要素として、プレゼンテーションで表示するページ順に列挙されます。

sldId要素は2つの属性を持っています。id属性はプレゼンテーションにおけるスライド識別のID、r:id属性が関連付けの参照IDです。sldId要素の情報からスライドデータを参照するには、r:id属性のID値を使います。

presentation.xmlの関連付けファイルはppt/_relsフォルダのpresentation.xml.relsという名前のファイルです。

このファイルの内容は次のようになっています。

presentation.xml.relsの例
<Relationships
                     xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
  <Relationship Id="rId8"
    Type="http://schemas.openxmlformats.org/officeDocument/2006/
                     relationships/tableStyles" 
    Target="tableStyles.xml"/>
  <Relationship
    Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/
                     relationships/slide" Target="slides/slide2.xml"/>
  <Relationship Id="rId7"
                     Type="http://schemas.openxmlformats.org/officeDocument/2006/
                     relationships/theme" Target="theme/theme1.xml"/>
  <Relationship Id="rId2"
                     Type="http://schemas.openxmlformats.org/officeDocument/2006/
                     relationships/slide" Target="slides/slide1.xml"/>
  <Relationship Id="rId1"
                     Type="http://schemas.openxmlformats.org/officeDocument/2006/
                     relationships/slideMaster" Target="slideMasters/slideMaster1.xml"/>
  <Relationship Id="rId6"
                     Type="http://schemas.openxmlformats.org/officeDocument/2006/
                     relationships/viewProps" Target="viewProps.xml"/>
  <Relationship Id="rId5"
                     Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/presProps" Target="presProps.xml"/>
  <Relationship Id="rId4"
                     Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster" Target="notesMasters/notesMaster1.xml"/>
</Relationships>

この中で、sldId要素のr:id属性で指定されたID値を持つRelationship要素を探すと、次の2つが該当します。

スライドデータのr:Id値を持つRelationship
<Relationships ...>
  <Relationship Id="rId3"
    Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide"
    Target="slides/slide2.xml"/>
  <Relationship Id="rId2"
    Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide"
    Target="slides/slide1.xml"/>
</Relationships>

ここから、プレゼンテーションを構成するスライドがslides/slide1.xmlとslides/slide2.xmlであることがわかります。

sldIdLst要素と同様の形式でsldMasterIdLst要素、notesMasterIdLst要素、handoutMasterIdLst要素によってスライドマスター、ノートマスター、配布物マスターが列挙されています。

slide

スライドパーツがプレゼンテーションのコンテンツ(スライドデータ)を実際に格納するパーツです。スライドパーツはslidesフォルダにスライドの数だけ作成されます。

slidesフォルダのスライドパーツ
slidesフォルダのスライドパーツ(スライドが18ページの場合)

スライドパーツの内容は、sld要素をルートとして以下の構造になっています。

スライドパーツの内容
スライドパーツの内容

cSld要素にスライドのデータがあります。

PowerPointのスライドに記述される内容は、描画オブジェクトなどの図形データかSmartArtなどのオブジェクトとして挿入されます。したがって、これらはシェイプとして扱われます。

シェイプを親子、グループ関係で構造化したシェイプツリーを表すspTree要素が親要素となって、その中にすべてのシェイプデータが定義されています。

spTree要素の子要素一覧

要素名 説明
cxnSp (Connection Shape) シェイプとシェイプを繋ぐ、特殊なシェイプであるシェイプコネクターのための要素です。シェイプコネクターの代表例としては、矢印付きの直線や曲線などがあります。
extLst 拡張リスト
graphicFrame 描画フレーム
grpSp グループシェイプ
grpSpPr グループシェイプ属性
nvGrpSpPr 非表示グループシェイプ属性
pic 画像
sp シェイプコネクターを除く、シェイプ全般を表す要素です。この子要素としてシェイプデータを記述します。

sp要素の子要素一覧

テキストデータの場合、シェイプデータとしてsp要素に格納されます。

要素名 説明
extLst 拡張リスト
nvSpPr 非表示シェイプ属性
spPr シェイプのプロパティ
style シェイプのスタイル
txBody シェイプ中のテキストデータ

シェイプのテキストデータは、sp要素の子要素のtxBody要素の中に段落データとして格納されます。

PresentationMLでは段落に関するp要素などの仕様を持っていません。これらはDrawingMLという描画オブジェクトのためのXML仕様で定義されている要素を使います。したがって、txBodyの子要素はDrawingMLの名前空間が指定されています。

テキストデータの例
テキストデータの例
txBody要素例
<p:sld
  xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"
  xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
  xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main">
  <p:cSld>
    <p:spTree>
      ...
      <p:sp>
        <p:nvSpPr>
          <p:cNvPr id="2" name="Rectangle 1"/>
          <p:cNvSpPr>
            <a:spLocks noGrp="1"/>
          </p:cNvSpPr>
          <p:nvPr>
            <p:ph type="title"/>
          </p:nvPr>
        </p:nvSpPr>
        <p:spPr>
          <a:xfrm>
            <a:off x="457200" y="512763"/>
            <a:ext cx="8229600" cy="914400"/>
          </a:xfrm>
        </p:spPr>
        <p:txBody>
          <a:bodyPr/>
          <a:lstStyle>
            <a:extLst/>
          </a:lstStyle>
          <a:p>
            <a:r>
              <a:rPr kumimoji="1" lang="ja-JP"/>
              <a:t>画像を使って...</a:t>
            </a:r>
          </a:p>
        </p:txBody>
      </p:sp>
      <p:sp>
        (次のテキストデータ)
      </p:sp>
      <p:pic>
        (画像データ)
      </p:pic>
    </p:spTree>
  </p:cSld>
</p:sld

txBody要素の中にDrawingMLのp要素を使ってテキストデータが定義されています。

DrawingMLの段落であるp要素はWordprocessingMLでのp要素とほぼ同じ構造です。 p要素の中にr要素のRunがあり、その子要素のt要素の内容が実際のテキストデータです。

画像データはpic要素に格納されます。

スライドの画像データ
スライドの画像データ
画像データのpic要素
<p:pic>
  <p:nvPicPr>
    <p:cNvPr id="5" name="j0314068.jpg"/>
    <p:cNvPicPr>
      <a:picLocks noGrp="1" noChangeAspect="1"/>
    </p:cNvPicPr>
    <p:nvPr>
      <p:ph sz="half" idx="2"/>
    </p:nvPr>
  </p:nvPicPr>
  <p:blipFill>
    <a:blip r:embed="rId3"/>
    <a:srcRect b="16004"/>
    <a:stretch>
      <a:fillRect/>
    </a:stretch>
  </p:blipFill>
  <p:spPr>
    <a:xfrm>
      <a:off x="5638800" y="1371981"/>
      <a:ext cx="2209800" cy="1447800"/>
    </a:xfrm>
    <a:prstGeom prst="rect">
      <a:avLst/>
    </a:prstGeom>
    <a:noFill/>
    <a:ln>
      <a:noFill/>
    </a:ln>
  </p:spPr>
</p:pic>

この例では画像(jpg)を埋め込んでいます。cNvPr要素のname属性には埋め込んだオブジェクト名(ファイル名)があります。実際にパッケージに埋め込まれた画像データは、pptフォルダ下のmediaフォルダにすべて格納されています。

ppt/mediaフォルダ
ppt/mediaフォルダ

ここで、オブジェクト名=パッケージの画像ファイル名ではないことに注意してください。実際のパッケージの中の画像ファイルは、pic要素の中の下記の部分で指定されています。

pic要素下での画像ファイル指定
<p:blipFill> <a:blip r:embed="rId3"/>

blipFill要素は描画オブジェクトの画像タイプを表しますが、この中のblip要素(DrawingMLの要素です)で画像データへの参照を示しています。この参照のための関連付けIDは、“rId3” となっています。スライドパーツの関連付けのファイルは、slidesフォルダ下の_relsフォルダにスライドパーツのファイル名+“.rels”のファイル名で格納されています。

画像データへの参照
画像データへの参照

それぞれのスライドパーツに対応した関連付けのファイルを見ると、先ほどの画像ファイルの関連付けは以下のように書かれています。

画像ファイルの関連付け
<Relationship Id="rId3"
                     Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"
                     Target="../media/image2.jpeg"/>

ここから、埋め込まれた画像のデータが、"../media/image2.jpeg"であることがわかります。

slideMaster

スライドマスターはスライドを作成するときのベースとなるテンプレートです。presentation.xmlにはスライドマスターを示すsldMasterIdLst要素があり、ここでスライドマスターの関連付けIDが列挙されています。

presentation.xmlのsldMasterIdLst要素の内容例
<p:presentation
  xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"
  xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
  xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"
                                        removePersonalInfoOnSave="1" saveSubsetFonts="1">
  <p:sldMasterIdLst>
    <p:sldMasterId id="2147483648" r:id="rId1"/>
  </p:sldMasterIdLst>
  ...
<p:presentation>

さらに、ppt/_rels/presentation.xml.relsには、以下のように対象となるスライドマスターのIDとURIが定義されています。

ppt/_rels/presentation.xml.rels
<Relationship Id="rId1"
                     Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster"
                     Target="slideMasters/slideMaster1.xml"/> 

スライドマスターのパーツはpptフォルダ下のslideMastersフォルダに格納されています。

slideMastersフォルダ
slideMastersフォルダ

このサンプルではスライドマスターは1つだけですが、ユーザーが追加したスライドマスターにしたがってパーツは増えます。

スライドマスターのパーツにはルートをsldMaster要素に、以下の子要素があります。

sldMaster要素の子要素一覧
要素名 説明
clrMap カラースキーマMap
cSld スライドデータ
extLst 拡張リスト
hf スライドマスターのヘッダー・フッター情報
sldLayoutIdLst スライドレイアウトリスト
timing スライドレイアウトのためのタイミング情報
transition スライドレイアウトのスライド切り換え情報
txStyles スライドマスターのテキストスタイル

スライドマスターはスライドレイアウトの情報を持っています。したがって、sldLayoutIdLst要素にはスライドレイアウトの関係付けIDが列挙されています。

sldLayoutIdLst要素例
<p:sldMaster
  xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"
  xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
  xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main">
(省略)
  <p:sldLayoutIdLst>
    <p:sldLayoutId id="2147483649" r:id="rId1"/>
    <p:sldLayoutId id="2147483650" r:id="rId2"/>
    <p:sldLayoutId id="2147483651" r:id="rId3"/>
    <p:sldLayoutId id="2147483652" r:id="rId4"/>
    <p:sldLayoutId id="2147483653" r:id="rId5"/>
    <p:sldLayoutId id="2147483654" r:id="rId6"/>
    <p:sldLayoutId id="2147483655" r:id="rId7"/>
    <p:sldLayoutId id="2147483656" r:id="rId8"/>
    <p:sldLayoutId id="2147483657" r:id="rId9"/>
  </p:sldLayoutIdLst>        
  ...
</p:sldMaster>

このようにスライドマスターの中のスライドレイアウトの情報は関連付けIDを列挙する形になっています。

スライドマスターの関連付けファイルは、ppt/slideMasters/_relsフォルダに“スライドマスターのファイル名”+“.rels”という名前で存在します。

スライドマスターの関連付けファイル
スライドマスターの関連付けファイル

この関連付けファイルには、スライドレイアウトパーツのURIが定義されています。

<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
  <Relationship Id="rId8"
    Type="http://schemas.openxmlformats.org/officeDocument/2006/
                                                              relationships/slideLayout"
    Target="../slideLayouts/slideLayout8.xml"/>
  <Relationship Id="rId3"
    Type="http://schemas.openxmlformats.org/officeDocument/2006/
                                                              relationships/slideLayout"
    Target="../slideLayouts/slideLayout3.xml"/>
  <Relationship Id="rId7"
    Type="http://schemas.openxmlformats.org/officeDocument/2006/
                                                              relationships/slideLayout"
    Target="../slideLayouts/slideLayout7.xml"/>
  <Relationship Id="rId2"
    Type="http://schemas.openxmlformats.org/officeDocument/2006/
                                                              relationships/slideLayout"
    Target="../slideLayouts/slideLayout2.xml"/>
  <Relationship Id="rId1"
    Type="http://schemas.openxmlformats.org/officeDocument/2006/
                                                              relationships/slideLayout"
    Target="../slideLayouts/slideLayout1.xml"/>
  <Relationship Id="rId6"
    Type="http://schemas.openxmlformats.org/officeDocument/2006/
                                                              relationships/slideLayout"
    Target="../slideLayouts/slideLayout6.xml"/>
  <Relationship Id="rId5"
    Type="http://schemas.openxmlformats.org/officeDocument/2006/
                                                              relationships/slideLayout"
    Target="../slideLayouts/slideLayout5.xml"/>
  <Relationship Id="rId10"
    Type="http://schemas.openxmlformats.org/officeDocument/2006/
                                                              relationships/theme"
    Target="../theme/theme1.xml"/>
  <Relationship Id="rId4"
    Type="http://schemas.openxmlformats.org/officeDocument/2006/
                                                              relationships/slideLayout"
    Target="../slideLayouts/slideLayout4.xml"/>
  <Relationship Id="rId9"
    Type="http://schemas.openxmlformats.org/officeDocument/2006/
                                                              relationships/slideLayout"
    Target="../slideLayouts/slideLayout9.xml"/>
</Relationships>

slideLayout

スライドはそれぞれスライドレイアウトの情報が付随しています。このスライドレイアウトのパーツがpptフォルダ下のslideLayoutsフォルダに格納されています。PowerPointでスライドレイアウトを変更しようとすると、複数の色々なレイアウトが表示されます。パッケージのスライドレイアウトのパーツはこのすべてのスライドレイアウトの数だけ存在します。ファイル名はslideLayout1.xml、slideLayout2.xmlのように番号付けがされています。

PowerPointでのレイアウトマスターの種類
PowerPointでのレイアウトマスターの種類
ppt/slideLayoutsフォルダの内容
ppt/slideLayoutsフォルダの内容

これら複数のスライドレイアウトから1つを選択し、そのスライドの表示レイアウトが決まります。slideフォルダ下のスライドデータには、直接どのスライドレイアウトが選択されているのかは指定されていません。スライドレイアウトとスライドデータを結び付けるのは関連付けです。

スライドデータの関連付けファイルはslides/_relsフォルダにあります。ファイル名は、それぞれのスライドデータに応じてslide1.xml.rels、slide2.xml.relsとなっています。

この中で、スライドレイアウトの関連付けがあります。

スライドレイアウトの関連付け
<Relationship Id="rId1"
                     Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout"
                     Target="../slideLayouts/slideLayout1.xml"/>

スライドレイアウトのType定義を持つRelationship要素によって、どのスライドレイアウトが使われているかがわかります。

スライドレイアウトのパーツの内容は、sldLayout要素をルートに、以下のように定義されています。

sldLayout要素の子要素一覧
要素名 説明
cSld スライドレイアウトに適用される共通スライドデータ
clrMapOvr OverrideするカラースキーマMap
transition スライドレイアウトで定義されるスライド間の遷移アニメーション情報
timing アニメーションやスライド制御におけるタイミング情報。スライドマスターによる共通設定をそのスライドレイアウトにおいて上書きする。
hf スライドレイアウトのヘッダー・フッター情報
extLst 拡張リスト

スライドと同様に、cSld要素にスライドレイアウトの内容が格納されます。