第3章 WordprocessingML

document

WordprocessingMLのメインパーツはメイン文書パーツ(word/document.xml)です。このパーツのルート要素はdocumentです。

メイン文書パーツの代表的な構造例
メイン文書パーツの代表的な構造例
メイン文書パーツの構造
document
ルート要素
body
ドキュメントボディ
p,tbl
段落やテーブルのデータ
sectPr
セクション書式(ページレイアウトやセクションレイアウト)

メイン文書パーツでは、本文のデータはすべてbody要素の子要素となります。通常のテキストデータは段落要素、そのさらに子孫です。

段落

段落(p)要素はWordprocessingMLのデータを構成する基本となる要素です。OOXMLでは段落を次のように表現しています。

「段落はWordprocessingML文書で、改行から始まる、コンテンツのそれぞれの分割を定義する。」

分割を示す要素である段落だけでは、文章を表示したりといったことはできません。段落で区切られた中で、あるテキストを記述するため、Runという単位があります。

Runは、テキストの領域と、そこで適用されるプロパティの集合を定義します。要素としてはr要素で記述されます。

r要素はその領域内に、まとまった複数のRun Contentsを含むことができます。テキストを表すt要素はRun Contentsの1つで、テキストデータはt要素に記録されます。

テキストデータから考えると、テキストデータを記録したテキストの集合がRun、Runの集合を区切ったものが段落、段落の集合を格納するのがドキュメントボディ、という形でドキュメントパーツは構成されています。

ここで言うプロパティというのはスタイルやフォントなどの書式情報です。段落には、段落のスタイルを表すプロパティと、テキストレベル(インラインレベル)のスタイルを表すプロパティの2種類があります。

書式情報の構造
書式情報の構造

Wordで書式情報を反映したデータを見てみると次のようになっています。

Word上で反映された書式情報
Word上で反映された書式情報

この文書の最初と2番目の段落のXMLデータは次のようになっています。

pが段落、rがRun、tがテキストデータの要素です。(pPrとrPrの内容については次項で説明します)

document.xml
<w:p w:rsidR="000472BE" w:rsidRDefault="000472BE">
    <w:pPr>
    <w:rPr>
      <w:rFonts w:ascii="MS 明朝" w:hAnsi="MS 明朝" w:hint="eastAsia"/>
      <w:sz w:val="22"/>
    </w:rPr>
  </w:pPr>
  <w:r>
    <w:rPr>
      <w:rFonts w:ascii="MS 明朝" w:hAnsi="MS 明朝" w:hint="eastAsia"/>
      <w:sz w:val="22"/>
    </w:rPr>
    <w:t>社員各位</w:t>
  </w:r>
</w:p>
    <w:p w:rsidR="000472BE" w:rsidRDefault="000472BE">
    <w:pPr>
    <w:jc w:val="right"/>
  
    ...
  </w:pPr>
  <w:r>
    <w:rPr>
      <w:rFonts w:ascii="MS 明朝" w:hAnsi="MS 明朝" w:hint="eastAsia"/>
      <w:sz w:val="22"/>
    </w:rPr>
    <w:t>平成○年○月○日</w:t>
    </w:r>
</w:p>

通常のテキストデータが書かれた段落の場合、その子要素は段落書式であるpPr要素とr要素(Run)になります。

サンプルではテキストデータのみですが、Runのr要素の子要素には、注釈や相互参照など様々なRun Contentsを記述可能です。

段落データのサンプル

del要素およびdelText要素

Wordの機能で変更履歴をオンに設定した場合に、削除されたテキストを格納するための要素です。詳細についてはAnnotationsをご覧ください。

 del要素およびdelText要素
del要素およびdelText要素
p要素の内容
<w:p w:rsidR="000E14D8"
 w:rsidDel="00AE0425" w:rsidRDefault="004930A2" w:rsidP="004930A2">
  <w:pPr>
    <w:rPr>
      <w:del w:id="0" w:author=" " w:date="2007-06-17T22:25:00Z"/>
      <w:rFonts w:hint="eastAsia"/>
      <w:lang w:eastAsia="ja-JP"/>
    </w:rPr>
  </w:pPr>
  <w:del w:id="1" w:author=" " w:date="2007-06-17T22:25:00Z">
    <w:r w:rsidDel="00AE0425">
      <w:rPr>
        <w:rFonts w:hint="eastAsia"/>
        <w:lang w:eastAsia="ja-JP"/>
      </w:rPr>
      <w:delText>削除されたテキスト</w:delText>
    </w:r>
  </w:del>
</w:p>
ルビ

ルビの場合、r要素の子要素にruby要素が出現します。その中でルビ文字がrt要素へ、ルビの対象文字列がrubyBase要素に格納されます。

ルビを使った場合の例
ルビを使った場合の例
ルビを使った場合のXMLの例
<w:r w:rsidRPr="00A77BB8">
    <w:rPr>
    (省略)
  </w:rPr>
  <w:ruby>
    <w:rubyPr>
      (省略)
    </w:rubyPr>
    <w:rt>
      <w:r w:rsidR="00A77BB8" w:rsidRPr="00A77BB8">
        <w:rPr>
          <w:rFonts w:ascii="MS 明朝" w:eastAsia="MS 明朝"
                                        w:hAnsi="MS 明朝" w:hint="eastAsia"/>
          <w:sz w:val="40"/>
          <w:szCs w:val="40"/>
          <w:lang w:eastAsia="ja-JP"/>
        </w:rPr>
        <w:t>ふりがな</w:t>
      </w:r>
    </w:rt>
    <w:rubyBase>
      <w:r w:rsidR="00A77BB8" w:rsidRPr="00A77BB8">
        <w:rPr>
          <w:rFonts w:hint="eastAsia"/>
          <w:sz w:val="40"/>
          <w:szCs w:val="40"/>
          <w:lang w:eastAsia="ja-JP"/>
        </w:rPr>
        <w:t>振り仮名</w:t>
      </w:r>
    </w:rubyBase>
    </w:ruby>
</w:r>

書式

段落のレイアウトは、段落単位の書式とRun単位の書式によって決定されます。段落の書式はpPr要素、Runの書式はrPr要素によって表されます。

WordprocessingMLでは、段落スタイルというものが存在します。段落スタイルは複数の書式をセットにして、参照のための情報を付加したものになります。段落スタイルを適用するとき、段落書式を表すpPr要素にはこの段落スタイルを参照する情報が格納されます。

「段落中のある文字1字に対して書式を変更する」というとき、その前後の文字とRunを分け、その文字を含むr要素の子rPr要素へ書式を指定します。

r/rPrとpPr/rPr

rPr要素がRunの書式であると説明しました。r要素の子要素として記述されるrPr要素の説明としてはこれだけでも十分です。

しかしpPr要素の子要素としてrPr要素が登場するとき、これは「Run Properties for the Paragraph Mark」、段落を示す記号(Wordでは段落の最後に表示される、ユーザーが入力したものではない記号)の書式指定となります。

つまり「pPr/rPrとr/rPrは別のコンテンツのためのプロパティ」であるため「pPr/rPrの指定はr/rPrには関係ない」ということです。

タグの名前は同じですが、WordprocessingMLのXMLスキーマ内でこのふたつは異なる型を与えられています。

簡単なサンプルデータで書式情報の内容を見てみましょう。

書式情報のサンプル
書式情報のサンプル

この例では、段落には段落スタイルが設定され、文字スタイルでは、“アンテナ”の部分は太字、“ハウス”の部分には下線が指定されています。

書式の例
<w:p w:rsidR="000C3E1C" w:rsidRPr="001726D4" w:rsidRDefault="00612D76"
                                                                    w:rsidP="001726D4">
  <w:pPr>
    <w:pStyle w:val="1"/>
    <w:rPr>
      <w:rFonts w:hint="eastAsia"/>
   </w:rPr>
  </w:pPr>
  <w:r w:rsidRPr="001726D4">
    <w:rPr>
      <w:rFonts w:hint="eastAsia"/>
      <w:b/>
    </w:rPr>
    <w:t>アンテナ</w:t>
  </w:r>
  <w:r w:rsidRPr="001726D4">
    <w:rPr>
      <w:rFonts w:hint="eastAsia"/>
      <w:u w:val="single"/>
    </w:rPr>
    <w:t>ハウス</w:t>
  </w:r>
</w:p>

段落の書式を表すpPr要素に段落スタイルのデータがあります。pStyle要素が段落スタイルを参照していることを意味します。段落スタイルのレイアウトの詳細は別のパーツにスタイル情報として格納されていて、pPr要素はそれを参照する形になっています。参照方法はスタイル情報の項で説明します。

また、段落が2つに分けられて別々の書式が指定されているので、p要素の中には2つのRunがあることがわかります。この場合、複数の文字セットの書式データがr要素内のrPr要素に記述されます。rPr要素の子要素のb要素はボールド(太字)を意味します。2番目のRunのrPr要素の子要素であるu要素は下線(アンダーライン)を意味します。u要素のval属性は線種を意味しています。b要素のように要素のみで書式を表すものと、u要素のように要素とその属性値で書式を表すものがあります。

1つのp要素の中に、pPr要素は0または1つだけ存在します。段落スタイルが指定されていない場合は、pPr要素が無い場合もあります。同様に、1つのr要素内にrPr要素は0または1つだけです。

いろいろな段落書式、文字書式のサンプル

段落罫線
段落罫線
段落罫線

段落罫線は、pPr要素の子要素のpBdr要素で表されます。

段落罫線
<w:pPr>
  <w:pBdr>
    <w:bottom w:val="single" w:sz="4" w:space="1" w:color="auto"/>
  </w:pBdr>
文字列揃え
文字列揃え
文字列揃え

左寄せ、中央揃え、右寄せ、両端揃え、均等割付などの文字列を揃える指定はpPr要素の子要素のjc要素で表されます。左寄せの場合が既定値なので、この場合はpPr要素の中にはjc要素は現れません。

中央揃えの例
<w:pPr>    
  <w:jc w:val="center"/>
</w:pPr>
右寄せの例
<w:pPr>
  <w:jc w:val="right"/>
</w:pPr>
両端揃えの例
<w:pPr>
  <w:jc w:val="both"/>
</w:pPr>
均等割付の例
<w:pPr>
  <w:jc w:val="distribute"/>
</w:pPr>
上付き、下付き
上付き、下付き
上付き、下付き

文字を小さくしてベースラインの上下に配置する上付き、下付きはRunの書式であるrPr要素の子要素のvertAlign要素で表されます。

上付きの指定
<w:rPr>
  <w:vertAlign w:val="superscript"/>
</w:rPr>
下付きの指定
<w:rPr>
  <w:vertAlign w:val="subscript"/>
</w:rPr>

テーブル

WordprocessingMLのテーブルはHTMLのテーブルとよく似た構造を持ちます。tblをルートとし、行(r要素)が並び、行の子としてセル(tc要素)が並びます。

他にテーブル幅やテーブルの書式、ボーダー指定などのテーブル書式情報を持つtblPr要素、テーブル列の幅などの列単位の書式情報を持つtblGrid要素がtblの子要素として存在します。

tbl
<w:rPr>
  <w:vertAlign w:val="subscript"/>
</w:rPr>
<w:tbl>
  <w:tblPr>
    <w:tblStyle w:val="a3"/>
    <w:tblW w:w="0" w:type="auto"/>
    <w:tblLook w:val="04A0"/>
  </w:tblPr>
  <w:tblGrid>
    <w:gridCol w:w="1740"/>
    <w:gridCol w:w="1740"/>
    <w:gridCol w:w="1740"/>
    <w:gridCol w:w="1741"/>
    <w:gridCol w:w="1741"/>
  </w:tblGrid>
  <w:tr w:rsidR="006D0A0F" w:rsidTr="006D0A0F">
    <w:tc>
      <w:tcPr>
        <w:tcW w:w="1740" w:type="dxa"/>
      </w:tcPr>
      <w:p w:rsidR="006D0A0F" w:rsidRDefault="006D0A0F">
        <w:r>
          <w:rPr>
            <w:rFonts w:hint="eastAsia"/>
          </w:rPr>
          <w:t>あいうえお</w:t>
        </w:r>
      </w:p>
    </w:tc>
  </w:tr>
</w:tbl>
tbl要素の構造
tbl要素の構造

tblPr要素はテーブル全体の書式を定義する要素です。子要素に罫線の種類を表すtblBorders要素や、幅を表すtblW要素などがあります。

tblPrの子要素一覧
要素名 説明
bidiVisual Bidi指定
jc 表の配置
shd 塗りつぶし
tblBorders 罫線
tblCellMar セルのマージンの既定値
tblCellSpacing セルの余白の既定値
tblInd インデント
tblLayout テーブルレイアウト
tblLook テーブルの表示に関する情報
tblOverlap 他のテーブルとの重なり
tblpPr 表の位置情報
tblPrChange テーブル属性の改定情報
tblStyle テーブルスタイル参照
tblStyleColBandSize カラム数
tblStyleRowBandSize 行数
tblW テーブル幅

tblGrid要素はテーブルの列単位の書式プロパティを定義するための要素です。主としてテーブルの列の幅をgridCol要素で示します。

次のようなセル結合の無い表の場合をみてみましょう。

セルの結合の無い表
セル結合の無い表

tblGrid要素の内容は、次のようになります。

tblGrid
<w:tblGrid>
  <w:gridCol w:w="1740"/>
  <w:gridCol w:w="1740"/>
  <w:gridCol w:w="1740"/>
  <w:gridCol w:w="1741"/>
</w:tblGrid>

このように4列の幅がgridCol要素のw属性の値で示されます。

次に、テーブル内でセルの幅が一定ではない特殊な場合を見てみましょう。

テーブル内でセルの幅が一定ではない特殊な場合
テーブル内でセルの幅が一定ではない特殊な場合

テーブルの各行を見る限り、この表は3列の表の一部のセル幅が変化したように思えます。しかし、この場合WordprocessingMLのテーブルでは、次の図のように考えます。

WordprocessingMLでのテーブル構造
WordprocessingMLでのテーブル構造

点線の部分を見てください。ここには実際には罫線はありませんが、Wordではこのような場合に、あたかもここに罫線があってセルがあるように考えます。つまり、この表の場合は4列のテーブルであると考えて定義されています。

このとき、tblGrid要素は次のようになっています。

テーブル内でセルの幅が一定ではない場合のtblGrid
<w:tblGrid>
  <w:gridCol w:w="1831"/>
  <w:gridCol w:w="1104"/>
  <w:gridCol w:w="3192"/>
  <w:gridCol w:w="1953"/>
</w:tblGrid>

このように4列のテーブルとして、各列の幅を示します。そして、後述のtc要素でセルの情報としてセルが結合していることを示します。

次に、テーブルの構造は、tr要素がテーブル行の数だけ連続します。tr要素はテーブル行の書式属性としてtrPr要素を持つ場合があります。

trPr要素の子要素一覧
要素名 説明
cantSplit 行の途中で改ページしない
cnfStyle テーブル行の条件付表示
del 削除された行
divId HTML div要素への関連付け
gridAfter (変形したテーブルの)最後のセルの後のカラム数
gridBefore (変形したテーブルの)最初のセルの前のカラム数
hidden 隠された行
ins 挿入された行
jc 行配置
tblCellSpacing 余白
tblHeader すべてのページにヘッダを表示する
trHeight 行高さ
trPrChange 行属性の改定情報
wAfter (変形したテーブルの)gridAfter要素と共に使用され、行の幅を示す
wBefore (変形したテーブルの)gridBefore要素と共に使用され、行の幅を示す

tr要素の子要素としてtc要素がテーブルセルの数だけ連続します。tc要素はセル単位の罫線や塗りつぶしなどの情報を持つために、tcPr要素があります。テーブルの内容はtc要素の中に段落(p)として保存されています。

tcPr要素の子要素一覧
要素名 説明
cellDel 削除されたセル
cellIns 挿入されたセル
cellMerge 分割/結合されたセル
cnfStyle 条件付きテーブルセル表示情報
gridSpan スパンされたセル数
hideMark 行高さの計算に行マーカを含まない
hMerge 横方向に結合されたセル
noWrap セルの途中で文字を折り返さない
shd 網掛け
tcBorders 罫線
tcFitText 文字列の幅に合わせる
tcMar 余白
tcW
textDirection テキスト方向
vAlign 縦方向の文字揃え
vMerge 縦方向に結合されたセル

セクション

WordprocessingMLは文書の中にセクションという分割単位を持っています。セクション単位に書式を定義することが可能なので、セクションの情報を格納するためのsectPrという要素があります。ページレイアウトで指定した情報もこのsectPr要素の中に格納されます。通常、単一のセクションのWordprocessingML文書の場合、セクションは以下のように現れます。

セクション
セクション

段落などの要素の後に、それらが含まれるセクションの情報としてsectPr要素が出現します。

sectPrに格納される内容は、ページサイズ、ページマージン、ヘッダーやフッター、カラム数などのページやセクション単位の書式です。

ヘッダーやフッターのデータは後述のパーツに格納されているので、sectPr要素の中にはそのパーツを参照するための情報があるだけです。

sectPrの例
<w:sectPr w:rsidR="00BE43F4" w:rsidSect="00D853CA">
  <w:headerReference w:type="default" r:id="rId8"/>
  <w:footerReference w:type="default" r:id="rId9"/>
  <w:pgSz w:w="11906" w:h="16838" w:code="9"/>
  <w:pgMar w:top="1985" w:right="1701" w:bottom="1701" w:left="1701" w:header="851"
                                                           w:footer="992" w:gutter="0"/>
  <w:cols w:num="2" w:space="420"/>
  <w:docGrid w:type="lines" w:linePitch="360" w:charSpace="-3589"/>
</w:sectPr>

headerReference/footerReference要素はそれぞれヘッダー・フッターパーツへの参照です(参照方法は後述)。pgSz要素がページサイズ、pgMar要素はページマージン、cols要素は段組のカラム数を表します。

文書でセクション区切りを挿入せずにページレイアウトのみが指定されている場合は、sectPr要素はbody要素の子要素として1つ現れます。文書でセクション区切りを挿入して、複数のセクションがある場合、sectPr要素はpPr要素の子要素として挿入されます。つまり、段落の中にセクション情報が格納されることになります。

文書中にセクション区切りが無く、ページレイアウトのみの場合
文書中にセクション区切りが無く、ページレイアウトのみの場合
文書中に複数のセクションがある場合
複数のセクションの例(Wordレイアウト)
複数のセクションの例(Wordレイアウト)
複数のセクションの例(document.xml)
<w:document ...>
  <w:body>
    <w:p w:rsidR="000E14D8" w:rsidRDefault="00962D44" w:rsidP="00962D44">
      <w:pPr>
        <w:outlineLvl w:val="0"/>
        <w:rPr>
          <w:rFonts w:hint="eastAsia"/>
        </w:rPr>
      </w:pPr>
      <w:r>
        <w:rPr>
          <w:rFonts w:hint="eastAsia"/>
        </w:rPr>
        <w:t>A</w:t>
      </w:r>
    </w:p>
    <w:p w:rsidR="00962D44" w:rsidRDefault="00962D44" w:rsidP="00962D44">
      <w:pPr>
        <w:outlineLvl w:val="0"/>
        <w:rPr>
          <w:rFonts w:hint="eastAsia"/>
        </w:rPr>
      </w:pPr>
      <w:r>
        <w:rPr>
          <w:rFonts w:hint="eastAsia"/>
        </w:rPr>
        <w:t>B</w:t>
      </w:r>
    </w:p>
    <w:p w:rsidR="00962D44" w:rsidRDefault="00962D44">
      <w:pPr>
        <w:rPr>
          <w:rFonts w:hint="eastAsia"/>
        </w:rPr>
      </w:pPr>
      <w:r>
        <w:rPr>
          <w:rFonts w:hint="eastAsia"/>
        </w:rPr>
        <w:t>C</w:t>
      </w:r>
    </w:p>
    <w:p w:rsidR="00962D44" w:rsidRDefault="00962D44">
      <w:pPr>
        <w:sectPr w:rsidR="00962D44" w:rsidSect="000E14D8">
          <w:pgSz w:w="11906" w:h="16838"/>
          <w:pgMar w:top="1985" w:right="1701" w:bottom="1701" w:left="1701"
                                             w:header="851" w:footer="992" w:gutter="0"/>
          <w:cols w:space="425"/>
          <w:docGrid w:type="lines" w:linePitch="360"/>
        </w:sectPr>
      </w:pPr>
    </w:p>

    <w:p w:rsidR="00962D44" w:rsidRDefault="00962D44" w:rsidP="00962D44">
      <w:pPr>
        <w:outlineLvl w:val="0"/>
        <w:rPr>
          <w:rFonts w:hint="eastAsia"/>
        </w:rPr>
      </w:pPr>
      <w:r>
        <w:rPr>
          <w:rFonts w:hint="eastAsia"/>
        </w:rPr>
        <w:lastRenderedPageBreak/>
        <w:t>D</w:t>
      </w:r>
    </w:p>
    <w:p w:rsidR="00962D44" w:rsidRDefault="00962D44" w:rsidP="00962D44">
      <w:pPr>
        <w:outlineLvl w:val="0"/>
        <w:rPr>
          <w:rFonts w:hint="eastAsia"/>
        </w:rPr>
      </w:pPr>
      <w:r>
        <w:rPr>
          <w:rFonts w:hint="eastAsia"/>
        </w:rPr>
        <w:t>E</w:t>
      </w:r>
    </w:p>
    (省略)
    <w:sectPr w:rsidR="00962D44" w:rsidSect="00962D44">
      <w:type w:val="continuous"/>
      <w:pgSz w:w="11906" w:h="16838"/>
      <w:pgMar w:top="1985" w:right="1701" w:bottom="1701" w:left="1701"
                                             w:header="851" w:footer="992" w:gutter="0"/>
      <w:cols w:num="2" w:space="425"/>
      <w:docGrid w:type="lines" w:linePitch="360"/>
    </w:sectPr>
  </w:body>
</w:document>