アンテナハウス・オンラインショップ

XMLに関連したWord 2003の機能

Antenna House Home
[XML Top]
Oct 20, 2003 アンテナハウス株式会社


目次


本稿はWord 2003で新たに搭載されたXMLに関する機能に関して、編集と保存フォーマットを中心に調査の結果と活用法を報告します.評価のための使用したWord2003は、英語版のβ2にTechnical Refresh Patchesを適用したものです.実際の製品版とは若干の違いがあるかもしれません.あらかじめ御了解ください.

1 XMLに関する機能概要

Word 2003のXMLに関連した機能は大きく分類すれば以下の二つです.

WordMLの文書構造はXMLスキーマによって定義されています.このスキーマは「WordMLスキーマ」(正式にはMicrosoft Word XML Document Schema)と呼ばれます.つまりWordMLという形式はWordMLスキーマを満足するXML文書ということになります.以降で「ユーザー定義スキーマ」という用語が使用されますが、これはWordMLスキーマとは別のスキーマであることを意味しています.

さて編集機能と保存形式は本質的には別のカテゴリーの問題ですが、これらはXMLに関連した入出力機能を通じて密接に関連しています.Word 2003(Office 2003)をインストールすると、従来のWindows XP添付のMSXML3に代わって、MSXML5がインストールされます.Word2003はこのMSXML5をXMLを扱うバックボーンとして使用しています.

Word2003のXML機能はMSXML5を最大限に活用して構築されていると言って良いでしょう.

(図1)  Word2003の入出力ダイアグラム(XML関連のみ)

☞ NOTE: MSXML5はOffice 2003経由のみでインストールされます.10月の初め現在ではMicrosoftのWEBではダウンロード対象になっていません.

2 XMLの編集機能

Word 2003ではXMLファイルを入力して編集できますが、編集機能を引き出すためには、XMLスキーマを用意しなければなりません.これにより、文書編集時に自動的に妥当性検証をWordが行ってくれます.

2.1 スキーマなしのXMLファイルの編集

それではともかく、XMLスキーマなしのXMLファイルをWord 2003で開いてみます.XMLのタグは、以下の編集画面のような「ピンクのタグアイコン」で表示されます.

(図2)  XMLの表示Window

XMLのツリービューは、View - Task Pane により、Task PaneのXML Structureを開くことによって表示できます.属性の編集は、タグのアイコンの右クリックメニューからAttribute...を選択し、Attribute for ダイアログを開いて行います.これは属性の多いXML文書では手間のかかる操作でしょう.

(図3)  属性値の編集ダイアログ

しかし、XMLスキーマがアサインされていないXML文書でWordが提供する機能は限られています.文書の妥当性を検証できないだけでなく、例えば開いたXML文書に存在しない要素や属性は新規に入力する手段がありません.ただし文書に既存の要素を挿入したり、Copy&Pasteで増やすことは出来ます.

 TIP : XMLの編集といっても、編集画面や操作は通常のWordとそれほど変わりません.タグを表すピンクのアイコンを、Ctrl+Shift+Xで消せば 行が インデントされた ただの Word文書です.実際、Word2003はXML文書を直接編集しません.Office2003のインストールフォルダには、XML2WORD.XSLというスタイルシートがインストールされます.これは汎用のXML→WordMLの変換を行います.Wordは入力XML文書がWordMLでないと判断した場合、このスタイルシートによりXML文書をWordMLに変換し、その結果を編集対象にします.

2.2 スキーマ付きのXMLファイルの編集

XMLスキーマを作成して、それを適用したXMLファイルを編集してみます.

2.2.1 XMLスキーマの作成

Word 2003そのものにはXMLスキーマの作成を支援する機能はありません.XMLスキーマは属性ベースで記述します.そのままでは属性値が表示されないWord 2003では「見たいところがまったく表示されない」状態になります.他のエディタで作成した方が無難でしょう.XMLスキーマの例を以下に示します.

<?xml version="1.0" ?>
<xsd:schema targetNamespace="http://schemas.antenna.co.jp/mp/mpdoc" 
            xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            xmlns="http://schemas.antenna.co.jp/mp/mpdoc" >

<!-- Document base -->
<xsd:element name="doc">
  <xsd:complexType>
    <xsd:sequence minOccurs="1" maxOccurs="1" >
      <xsd:element ref="head" />
      <xsd:element ref="body" />
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>
...
</xsd:schema>

XML文書ファイルには、schemaLocation属性によりXMLスキーマを使用することを指定します.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doc xmlns="http://schemas.antenna.co.jp/mp/mpdoc"
     xmlns:NS1="http://www.w3.org/2001/XMLSchema-instance"
     NS1:schemaLocation="http://schemas.antenna.co.jp/mp/mpdoc mpdoc.xsd">
...
</doc>

Word 2003で使用する前に、XMLスキーマとXML文書はよくデバッグしておく必要があります.妥当性の検証を指定してロードするだけですが、次のようなスクリプトが便利でしょう.

[File Name : Validate.js]

var x = new ActiveXObject("MSXML2.DOMDocument.5.0");
var oArgs = WScript.Arguments;

x.async = false;
x.validateOnParse = true;
x.resolveExternals = true;
xmlFile = oArgs(0) + ".xml";
x.load(xmlFile);
if (x.parseError.errorCode != 0) 
   {
     WScript.Echo("Load Error Code=" + x.parseError.errorCode 
                 + "\n Line=" + x.parseError.line 
                 + "\n Position=" + x.parseError.linepos 
                 + "\n Reason=" + x.parseError.reason 
                 + "\n Source text=" + x.parseError.srcText 
                 + "\n URL=" + x.parseError.url); 
   }
else 
     WScript.Echo("*** Congratulations! There is no parse error ***\n\n" + x.xml);

このJScriptファイルは、"validate.js [XML文書ファイル名]"で動作します.

2.2.2 XMLスキーマの登録

XML文書ごとにschemaLocation属性を指定してやれば、Word 2003はそれを使用します.しかしWord 2003には、スキーマライブラリという機能があります.これによりスキーマを登録してやれば、同じネームスペースを使用したXML文書には自動的に登録したスキーマが適用されるようになります.

(図4)  スキーマライブラリへの登録

先ほどのXML文書の例では、以下の記述だけで自動的にXMLスキーマのmpdoc.xsdが適用されます.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<doc xmlns="http://schemas.antenna.co.jp/mp/mpdoc">
...
</doc>

2.2.3 XMLスキーマ付き文書の編集画面

XMLスキーマが適用された場合の文書編集は、スキーマなしの場合と比較して、どこが異なるのでしょうか?次の3点が大きく異なるところです.

(図5)  挿入可能な要素の表示

Task Paneの「List Only child elements of current eleemnt」のチェックをはずすと、カーソル位置に本来挿入できない要素も候補として表示されるようになります.この要素にはアイコンが表示されます.次の図は不正な要素を挿入してみた結果です.この例では、versionはchapterの子要素にはなれないので、XMLのツリービューにエラーを示すアイコンが表示されます.

(図6)  検証結果の表示

Microsoft Word XML Content Developer's Kitによれば、エラーは次の4つに分類されます.表示されるアイコンの種類は、β2から変更されたようです.3種類しか確認できませんでした.

IconDescription
Element cannot be empty according to the schema.
There is a problem with one or more attributes (missing reqired settings, invalid values, and so forth)
The element's content is not valid.
Element is unexpected in the structure.

(図7)  適用可能な属性が表示されるようになった属性編集ダイアログ

更にXMLスキーマがアサインされたXML文書においては、属性の入力も厳格になります.例えば、XMLスキーマで次のように定義された属性は、属性値の編集ダイアログではリストボックスから値を選択するようになります.ユーザーはnormal~inherit以外の値を入力することが出来ません.

<xsd:attribute name="font-style" type="type-font-style" />
...
<xsd:simpleType name="type-font-style">
  <xsd:restriction base="xsd:string">
    <xsd:enumeration value="normal" />
    <xsd:enumeration value="italic" />
    <xsd:enumeration value="oblique" />
    <xsd:enumeration value="backslant" />
    <xsd:enumeration value="inherit" />
  </xsd:restriction>
</xsd:simpleType>

3 XMLの編集機能に関する考察

事実上のワープロスタンダードのWordでXMLも扱えるようになったのは大変便利ですが、文書型のXML編集として使った場合はどうでしょうか?

3.1 WordでXMLを編集するメリット

Word 2003をXML編集に使うメリットとしては以下の点が挙げられるでしょう.

■ デファクトスタンダードのワープロでXMLが編集できる.

Wordは世界的に見ても最も多く使用されています.PCにMicrosoft Officeがプリンストールされていることも多く、使える人が多い、または一定程度使い慣れています.初心者にはこの延長上でXMLが編集できます.XML専用エディタだとこのような訳にはいきません.

■ XML専用のエディタと比べた価格

XML専用のエディタは一般に高価です.今後XMLを導入してゆく企業にとってオーサリングツールをWordで済ませられれば価格的に魅力でしょう.

■ 多言語の編集

多言語の編集を考えた場合、UNIX系の環境に比べてWindowsファミリーの環境は多言語機能が充実しています.Wordを使用すればこの機能をそのまま使用できます.

■ ワープロ機能の継承

従来から搭載されているワードプロセッサとしてのWordの機能をそのままXML編集でも使用できます.例えばスペリングチェック、グラマーチェック、翻訳など.

3.2 WordでXMLを編集する際の問題点

一方、やはり問題点も存在します.用途にもよりますが、次の点が挙げられます.

■ XMLスキーマが必須であること

2.2 スキーマ付きのXMLファイルの編集で示したように、ユーザーがXMLを編集するためには、XMLスキーマを用意しなければなりません.

■ 属性編集のやりづらさ

属性編集を行うためには、

を行って、Attribute for ...のダイアログを表示してやる必要があります.属性が多用されているXML文書では、この操作は結構手間がかかります.また属性値がダイアログを開かないと確認できないのも文書によっては大変です.普段テキストエディタでバリバリXML編集をやっている方なら、苦痛に感じるのではないでしょうか?

■ DTDに関する問題

機能的な 弱点 を抱えているとはいえ、多くのXML文書がDTDを使用しています.しかしWord2003ではDTDによる検証はサポートされていません.今後はDTDからXMLスキーマの時代になってゆくでしょうが、Wordを使用するなら既存のDTD資産はXMLスキーマに変更してゆかねばなりません.

また、XML文書によっては DTDの中に要素型宣言、属性リスト宣言は記述しないで 、内部サブセットに実体宣言(<!ENTITY ...>) のみ を記述する場合もよくあります.Word2003でこのようなXML文書を編集すると、実体参照は、まさに「置き換えられた結果」になってしまいます.これはWord 2003が「XMLを直接編集する」のではなく、「MSXML5によってロードされた結果を編集する」方式を取っている以上やむを得ない結果でしょう.

(図8)  実体参照の扱い

■ Office 2003 Professional版かWord 2003単体製品が必要

ユーザー定義のXMLスキーマがサポートされるのは上記の2製品で、Office 2003 Standard版ではサポートされません.つまり今までのOfficeシリーズと異なり、Wordは版によって機能が異なる製品となりました.WordのXML編集機能を使いたいと考えた場合、Professional版か単体のWord2003を購入する必要があります.

■ XMLのビジュアルな編集はできないか?

現在までのWod 2003の紹介では、Word 2003がXML文書を編集できるといっても、その表示形式はいわゆるXMLエディタ(例えば弊社のTag Editor)と同じ平凡なツリー表示でした.これはWordの豊富な表現機能を使用していないためです.しかし、せっかくWordでXMLを編集するなら、要素に一定のスタイルをマッピングさせてビジュアルにXMLを編集できないものか?と考えるのが人情です.この問題については、次項で説明します.

3.3 WordでのXMLのビジュアルな編集

"Microsoft Word XML Content Development Kit Beta 2"の中には、Plain Memoというサンプルがあります.これは、入力XMLに対するXSLTスタイルシートを作成することによりXMLデータをビジュアルな表示で編集するサンプルとなっています.(図9)XML Content Development Kitのサンプル は、以下のXMLファイルに対して、添付されていたスタイルシートprofessional.xmlを適用させて表示させたものです.

<?xml version="1.0" encoding="UTF-8"?>
<memo xmlns="urn:schemas-microsoft-com.office.demos.memo">
  <to>John Doe</to>
  <from>Jane Doe</from>
  <subject>My memo to all</subject>
  <priority>High</priority>
  <date>1/15/2003</date>
  <body>Select text you would like to replace, and type your memo...</body>
</memo>

(図9)  XML Content Development Kitのサンプル

☞ NOTE: このサンプルを見ると、タグを示すアイコンには2種類あるのがわかります.WordMLの段落などのブロック要素を囲んでいるユーザー定義の要素はで示されます.行中のインラインを囲んでいる要素はで示されます.

このスタイルシートは、入力XML文書をWordMLに変換するスタイルシートとなっています.スタイルシートを変更すれば、様々なWordの表示を実現でき、更にユーザーにデータを入力してもらったあとは、それをXML文書として取り出すことができるというシナリオです.

しかしこのサンプルは入力項目が限定されており、どちらかといえばデータ型のXMLです.文書型のXMLは要素数が固定的ではありません.文書の内容の追加/修正で要素は増加したり、また構造が変化します.それではそれでは文書型のXMLを「それなりのスタイルのWord表示」に変換した場合では編集機能はどうなるでしょうか?以下のステップで試してみました.

  1. まずXML文書とXMLスキーマを用意します.XML文書はリスト、テーブルを含んだマニュアルの原稿の一部を利用し、XMLスキーマはそれにあわせて新規に作成しました.MSXML5を使用して、XML文書とXMLスキーマに誤りがないことを確認します.
  2. WordMLのSchema資料やWordのXML保存内容を参考にして、XML文書→[XSLT]→WordML を行うXSLTスタイルシートを作成します.XML文書の要素をそれにあった、章・節のスタイル、表、箇条書きに変換します.
  3. Word 2003でマニュアルのXML文書を開く際にこのXSLTを指定します.あらかじめコマンドラインでXSLTを動かしてWordMLに変換した結果をWord 2003に読みこませても同じ結果が得られます.(ここではValidationを行うわけではないのでMSXML3も使えます.)
  4. Word 2003は作成されたWordMLにエラーが検出されるとそこでダイアログを出して読み込みを中止してしまいます.そこでデバッグして不正個所を修正します.ここは試行錯誤の繰り返しです.

XML文書をWordMLに変換する場合の問題については後述します.ここでは、編集の問題にだけ絞ります.まず、上記で作成したスタイルシートを使って変換した結果をWordで開きます.以下のような画面になります.章・節のタイトル、リスト、テーブルなどが変換されているのを確認することができます.

(図10)  XMLから作成したWord文書の表示画面例

次のようなことを試してみます.

 これからわかるように、残念ながらユーザー定義要素とWordの文書要素の関係・ユーザー定義要素とスタイルの関係は、Wordの編集機能のなかでは保持されません. 

これはユーザー定義スキーマに基づいたタグとWord2003の文書要素・スタイルとは、Word内部ではなんら対応関係がなく、また対応関係をつける仕組みもないことによります.結局Wordに文書型のXMLのビジュアルな編集を期待してもそれは元々無理な注文という結論になります.

☞ NOTE: Wordは元々ワードプロセッサです.XMLが編集できると言っても、それは直接XMLを相手にしている訳ではなく、実際にはWordMLで表される形式、つまり内部的には今までのWord文書に変換して編集できるようにしています.これに対してXMLの専用エディタは直接XMLを編集対象にして、要素とスタイルを結びつけて編集できるように設計されています.このような構造から見て、WordにあまりXML編集に関する高度な機能を期待するのは荷が重いのではないかと思われます.



新しいフォーマットWordMLは、バイナリー(.doc)やリッチテキスト(.rtf)と比べてどのような特徴があるのでしょうか?

マイクロソフトのWEBサイトに「Microsoft Office SystemにおけるXMLの考察」(http://www.microsoft.com/japan/office/using/column21.asp)というトピックが公開されています.その文書では次のように解説されています.

Microsoft Word は、ワードプロセッサの先駆けとして構築されましたが、Word ドキュメント内の貴重なデータは、事実上不可能ではないものの、往々にして抽出が困難です。Microsoft Office Word 2003 は、その改善を目的に設計されました。

確かに従来のバイナリーフォーマットやRTFに加えてXMLという保存形式がサポートされたことは、Wordを様々な業務で使用してゆく上で新しい可能性を開いたと言えるでしょう.WordでXMLが編集できるようになったことよりも、遥かに大きい意味があると考えられます.

WordMLは他の保存形式と比較して以下のような特徴があります.

■ 仕様が公開されている.

XMLでの保存形式がサポートされたとはいえ、その仕様が公開されなければ利用することは困難です.マイクロソフトは、MSDNのWEBサイトで「Microsoft Word XML Content Development Kit Beta 2」を公開しました.この中には、WordMLのスキーマファイル本体とリファレンスがついています.もちろん全てを詳細に解説している訳ではありませんが、WordMLを利用する上で欠かすことが出来ません.ちなみにWordのバイナリーフォーマットはWord97でMSDNに掲載されて以降、完全に非公開になってしまいました.RTFは更新がある都度MSDNにドキュメントが発表されています.

■ 可読性が良い

バイナリーフォーマットは論外として、RTFも同じようなテキスト形式を採用しています.しかし漢字は16進数値で表されるためそのままでは元の文字をそのままの形で見ることが出来ません.またRTFはバックスラッシュ("\")で始まる制御情報、中括弧"{""}"で囲まれたグループ、更にプレーンテキストの3つの要素で構成されています.XMLのような親子関係を表現する構造はありません.精通したプログラマでなければ理解するのは困難でしょう.これに対してWordMLはXMLであるため、内部のテキストを見たり、文書データ構造を理解する上でわかりやすい表現形式であると言えます.

■ 抽出や加工などが容易

今までWord文書を扱うためには、バイナリー・RTFの場合は専用のプログラムを作成しない限り無理でした.ユーザーレベルで出来ることは、Wordに搭載されているVBAを使用してテキストを抽出したりWord文書を作成することが限界です.WordMLはXML形式であるため、XSLTを使用して以前より簡単に、しかもマルチプラットフォーム上でWord文書にアクセスできます.これが最も大きな特徴と言えるでしょう.

このようにWordMLは他の保存形式に比べた優位性を持っていますが、本質はWord97以来引き継がれてきた文書データ構造を表しているに過ぎません.文書へのアクセスは容易になりましたが、Word文書データ構造に関する知識はどのようなフォーマットであれ、引き続き必要です.

5 WordMLの概要

WordMLの概要を解説します.詳細は「Microsoft Word XML Content Development Kit Beta 2」を参照ください.

5.1 ネームスペース

Woerd2003で文書を作成し、XMLフォーマットで保存してみると、複数のネームスペースが使用されていることを確認できます.一覧を以下に示します.

(表1)XML保存形式で使用されるネームスペース
Prefix URI Comment
w http://schemas.microsoft.com/office/word/2003/wordml ● WordMLのネームスペース
wx http://schemas.microsoft.com/office/word/2003/auxHint ● 解説文書がないが補助的な情報として重要.
v urn:schemas-microsoft-com:vml Word200より使用.Wordの「シェイプ」を表すVector Markup Languageのネームスペース.
w10 urn:schemas-microsoft-com:office:word Word200より使用.
sl http://schemas.microsoft.com/schemaLibrary/2003/core ● スキーマライブラリで使用するネームスペース.
aml http://schemas.microsoft.com/aml/2001/core  <aml:annotation ...>の形で使用される. 
o urn:schemas-microsoft-com:office:office Word200より使用.Officeシリーズ共通.文書情報を表すのに使用される.著者やページ数、文字数など.
dt uuid:C2F41010-65B3-11d1-A29F-00AA00C14882 Word200より使用.

 TIP : ネームスペースはβ2とTechnical Refresh Patchesの間で変更がありました.黒丸印●を付したネームスペースは、β2では、URIが/2003/2/となっています.β2で作成したWordML形式の文書も、これを/2003/に修正すれば最新版のWord2003で読み込んでくれます.またIEは<w:wordDocument>の前にある処理命令<?mso-application progid="Word.Document"?>を判断してWordを起動するようです.IEで表示したい場合はエディタでこの処理命令を削除します.

WordML以外のうち、Office2000のHTMLから使用されているものに関しては、"Microsoft® Office HTML and XML Reference"として資料がダウンロードできます.(7 関連資料 を参照)

5.2 全体の構造

簡単な文書を作成してWordMLの構造を概観してみましょう.

以降のXML表示はインターネットエクスプローラでの表示イメージを使用しています.「-」は子要素が展開されています.「+」は以下に子要素があることを示していますが折りたたんであります.終了タグは存在するが表示が省略されているものと御了解ください.

(リスト7)  WordML形式の最上位の構造

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
<?mso-application progid="Word.Document"?>
- <w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" 
  xmlns:v="urn:schemas-microsoft-com:vml" 
  xmlns:w10="urn:schemas-microsoft-com:office:word" 
  xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core" 
  xmlns:aml="http://schemas.microsoft.com/aml/2001/core" 
  xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" 
  xmlns:o="urn:schemas-microsoft-com:office:office" 
  xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" 
  w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no" xml:space="preserve">
  + <o:DocumentProperties>
  + <w:fonts>
  + <w:lists>
  + <w:styles>
  + <w:docPr>
  + <w:body>
  </w:wordDocument>
最上位の要素構造
Element nameContents
w:wordDocumentルート要素
o:DocumentPropertiesTitle, Author ...Versionなど..doc形式の場合にWindowsのエクスプローラ上でファイルのプロパティに表示される内容です.
w:fontsデフォルトフォントを定義するw:defaultFontsと、複数のフォントテーブルw:fontから構成されます.基本的に文書で使用されているフォントが列挙されます.RTFのフォントテーブルに対応しますが、内容は必ずしも同一ではありません.
w:lists複数のw:listDef, w:listから構成されるリストテーブル.箇条書きの書式を表します.RTFのList TableとList Override Tableに対応します.
w:stylesw:versionOfBuiltInStylenames, w:latentStylesと複数のw:styleから構成されるスタイルテーブル.w:styleはw:type attributeでparagraph, character, table, listの値を持つ.すなわちスタイルには段落スタイル、文字スタイル、テーブルスタイル、リストスタイルの種類があります.最も多いのは段落スタイル.
w:docPr「Pr」はpropertyを表している.従ってw:docPrは文書属性.様々な文書レベルでの属性が定義されている.デフォルトのタブ位置、行頭・行末の禁則文字など.RTFの"Document Formatting Properties"に対応している.
w:body文書本体.

☞ NOTE: WordMLのスキーマでは、この他にも多くのw:wordDocumentの子要素が定義されています.

5.3 w:bodyの構造

WordMLのスキーマでは、w:bodyは以下のような構造 として 定義されています. (丸い矢印は繰り返しを表します.) 

(図11)  w:bodyのスキーマ定義

この 構造 

ということを表しています.しかし実際の文書を見ると、以下のようにセクションを表すwx:sectでラップされる形になっているようです.w:sectPrはWordMLの定義に忠実に最後のセクションにしかwx:sectの直下に現れません.途中のセクションでは、最後の段落にw:p/w:pPr/w:sectPrの形で配置されます.

(図12)  実際のw:bodyの構造

以下が実際の文書のw:bodyの例です.

(リスト8)  w:bodyの例

- <w:body>
  - <wx:sect>        ← 最初のセクション
    + <w:p>
    + <w:tbl>
    ...
    - <w:p>
      - <w:pPr>
        + <w:sectPr> ← セクション属性は最後の段落の段落属性中に現れる.(wx:sect/w:p/w:pPr/w:sectPr)
      </w:pPr>
    </w:p>
  </wx:sect>         ← 2番目のセクション
  - <wx:sect>
    + <w:p>
    + <w:p>
    ...
    + <w:sectPr>     ← セクション属性はwx:sectの子要素として現れる.(wx:sect/w:sectPr)
  </wx:sect>
</w:body>

このままではw:bodyは、セクション(wx:sect)の平坦な横並び構造でしかありません.しかし元々Wordには、アウトラインという階層機能があります.これは段落(通常は章や節の見出し)にアウトラインレベルと呼ばれる数値を設定することにより、文書を階層化するものです.文書にアウトラインを設定した場合、WordMLでも文書は階層化されます.この構造を表現するのにはwx:sub-sectionという要素が使用されます.

(リスト9)  アウトラインレベルが適用された文書の例

- <w:body>
  - <wx:sect>
    - <wx:sub-section>      ←Outline Level=1
      + <w:p>
      - <wx:sub-section>    ←Outline Level=2
        + <w:p>
        - <wx:sub-section>  ←Outline Level=3
          + <w:p>
          + <w:p>
          + <w:p>
        </wx:sub-section>
        - <wx:sub-section>  ←Outline Level=3
          + <w:p>
        </wx:sub-section>
      </wx:sub-section>
    </wx:sub-section>
    - <wx:sub-section>      ←Outline Level=1
      + <w:p>
        - <wx:sub-section>  ←Outline Level=2
          + <w:p>
          + <w:p>
        </wx:sub-section>
    </wx:sub-section>  
    - <wx:sub-section>      ←Outline Level=1
      + <w:p>
      - <wx:sub-section>    ←Outline Level=2
        + <w:p>
        + <w:p>
        + <w:sectPr>
        </w:sectPr>
      </wx:sub-section>
    </wx:sub-section>
  </wx:sect>
</w:body>

5.4 段落(w:p)の構造

w:pは文書本体を構成する重要なブロックレベルの要素です.最も典型的な段落の構造は以下のようになります.

(図13)  典型的な段落(w:p)の構造

例えば、「BoldItalicUnderline」という段落は、次のようになるでしょう.

(リスト10)  段落の例

- <w:p>
  + <w:pPr>
  - <w:r>
    +<w:rPr>        ← Bold属性を指定
    -<w:t>Bold</w:t>
  </w:r>
  - <w:r>
    +<w:rPr>        ← Italic属性を指定
    -<w:t>Italic</w:t>
  </w:r>
  - <w:r>
    +<w:rPr>        ← Underline属性を指定
    -<w:t>Underline</w:t>
  </w:r>
</w:p>

☞ NOTE: これは典型的な例であり、w:p、w:rの下位にはこれ以外の要素も定義されています.例えばルビ(w:ruby)、ハイパーリンク(w:hlink)はw:pの子要素です.またタブ(w:t)や画像(w:pict)はw:rの子要素です.

5.5 テーブル(w:tbl)の構造

w:tblはw:pと並ぶ重要なブロックレベルの要素です.典型的なテーブルの構造は以下のようになります.

(図14)  典型的なテーブル(w:p)の構造

WordではHTMLと異なり、次のような「特殊な(?)テーブル」が作れてしまいます.この場合、W1~W4の幅がw:tblGridに記録されます.Cell 1は論理的には一個のセルですが、「またぐグリッドの数」は2個になります.

(図15)  特殊なテーブルの例

Wordのテーブルの表現はHTMLとは異なります.HTMLはcolspan="結合するセル数", rowspan="結合するセル数"でそれぞれ横結合・縦結合を表しました.w:tblの場合は以下のようになります.

5.6 リストの構造

WordMLでは、リストは段落のw:pにリストの属性が付加された形式で表されます.つまりリスト独自のタグを持ちません.

(図16)  典型的なリスト(w:p)の構造

リストには、行頭のラベル部分があります.番号なしリストならこれは1個の文字か画像、番号付きリストなら数字と付随する括弧など.これらは、w:listPrから参照されるリストテーブル(w:lists)の中に書式として定義されています.

一般的には段落属性にw:listPrが存在すればリストとみなせるでしょう.しかしHTMLやXSL-FOではリストは前後をリストブロックを表すタグで囲んでやらなければなりません.例えばHTMLなら<ul>~</ul>, <ol>~</ol>です.このようなリストの範囲を表す要素を持たないWordMLから、他の形式のリストに変換してやるのは少々技術が要ると考えられます.

※ 以上で主な文書構成要素である段落、テーブル、リストの内容を見てきました.Wordにはまだ多くの文書構成要素があります.WordMLの解説だけではなかなか理解が難しいので、RTFの仕様書やWordのヘルプもあわせて参照するのが良いでしょう.資料は文末に示してあります.

6 WordMLの活用法

Word2003にはどのような活用法が考えられるでしょうか?当然「他形式→WordML」「WordML→他形式」の2方向が考えられますが、他形式といっても、その筆頭にあがるのはやはりXMLでしょう.

6.1 他形式からWordMLへ

一部復習になりますが、他形式からWordへの変換におけるWordMLの特徴は次のようになります.

これらの特徴はWordを業務システムの一環として利用している場合に大きな意味があります.相手がWord2003を持っていることが前提ですが、定型的なXML文書にユーザー定義スキーマのタグを埋め込んで配布/回収し、記入してもらったデータ部分のみXMLとして抽出する、またXML文書を元にサーバー上で動的にWord文書を作成し配信するなどの用途はWordMLを使えば可能になります.

6.1.1 他形式からWordMLへ変換するサンプル

このカテゴリの例は、3.3 WordでのXMLのビジュアルな編集の、(図9)XML Content Development Kitのサンプル と、(図10)XMLから作成したWord文書の表示画面例 があります.

6.1.2 WordMLを作成する場合の留意点

以下の点に注意する必要があるでしょう.(以下で「ユーザー定義タグ」とはユーザー定義スキーマで定義された要素を指すものとします.)

■ ユーザー定義タグの埋め込み

WordMLのスキーマではユーザー定義タグはw:bodyの子として配置できる仕様になっていますが、実際にはその他の箇所にも可能です.

これら以外の場所にも可能かもしれませんが、駄目な場合はWordMLの読み込みの際にWord2003がエラーを検出して文書を表示してくれません.

■ ユーザー定義タグの表現形式

各フォーマットにおけるユーザー定義タグは

という制約があります.つまりユーザー定義のタグは、バイナリーフォーマットとWordMLで保持可能、しかし書き込みインタフェースがあるのはWordMLのみ、RTFではユーザー定義タグはやり取りできないということです.

■ ブロックやインラインの入れ子が表せない.

いくらWordMLがXMLであるとはいえ、Wordそのものの文書要素の構造は平坦です.従って

    <p>
      例えば~には、
      <ul>
        <li>最初の○×△□</li>
        <li>次の%#&@</li>
      </ul>
      の2つがあります.
    </p>

というXML文書があった場合、「例えば~には、」「の2つがあります.」を1つの段落(w:p)で表すことは出来ません.2つの段落に分割する必要があります.これはWordではリストも段落で表さねばならず、また段落の入れ子が出来ないためです.

  + <w:p>  ←「例えば~には、」
  + <w:p>  ←「最初の○×△□」
  + <w:p>  ←「次の%#&@」
  + <w:p>  ←「の2つがあります.」

また次のようなインライン要素をWordMLに変換する場合も注意が必要です.w:rをネストしてはなりません.

    <i>ここはitalic<b>ここはboldとitalic</b>ここは再びitalic</i>
  

italicとboldをつけてやりたい場合、次のように表す必要があります.

  + <w:r>  ←「ここはitalic」(w:rPrにイタリック属性 w:iを指定)
  + <w:r>  ←「ここはboldとitalic」(w:rPrにイタリック・ボールド属性 w:iとw:bを指定)
  + <w:r>  ←「ここは再びitalic」(w:rPrにイタリック属性 w:iを指定)
  

☞ NOTE: Word2003のデフォルトのXML→WordMLのXSLTスタイルシートでは、ユーザー定義タグはすべて段落に変換されます.しかしこれでは要素の切れ目にすべて改行が入ってしまいます.インライン要素はやはりインラインで表したいということになると、それなりの工夫が必要です.文書型XML→WordMLという変換は、ちゃんとやろうとすると階層的なデータ構造を非階層的なデータ構造で表現するように変換する作業となります.

6.2 WordMLから他形式へ

WordMLから他形式へ変換する用途は、例えば次のような分野が考えられます.

前者は企業内に蓄積されているWord文書をWord2003を使用していったんWordMLに保存し、そこを出発点としてXML化を行う方法です.Word文書をXML化するツールは世界でも日本でも様々な製品があります.すでにWordMLはXML形式になっているので、バイナリー(.doc)やRTF(.rtf)を元にXML化するよりも有利でしょう.

また後者の例については、マイクロソフトはすでに 7月 にWordMLをHTMLに変換するXSLTスタイルシートを公開しています.まだ画像が変換できませんが、WordMLからの変換を調べる上では参考になるでしょう.

6.2.1 WordMLから他形式へ変換する例

ここではいくつかのサンプルを御覧ください.

■ WordMLとして保存された文書をXML化する.

この例では次のような規則で一般的なWord文書をXML化しています.

このままでは、文書が入れ子構造になっていません.次のような「重み」を各タグにつけ、この値を元に階層化します.つまり要素を順にスキャンし自分より重みの高い要素を自分の子として取り込むようにします.

要素重み付けの値備考
body1文書本体
chapter2章(スタイル:Heading1の段落)
section3節(スタイル:Heading2の段落)
subsection4副節(スタイル:Heading3の段落)
subsubsection5副々節(スタイル:Heading4の段落)
p50段落(Heading1~Heading4以外の通常段落)
ul, ol50リスト(箇条書き:段落でw:listPrの存在するもの)
table50テーブル(表:w:tbl)

■ WordMLからXSL-FOに変換する.

この例はまだ参考出品です.対象は一般的なWord文書.およそ次のような変換を行います.

6.2.2 WordMLから変換する場合の留意点

以下の点に注意する必要があるでしょう.

■ WordMLからXMLへの変換ステップ

WordMLはすでにXML化されている結果ですが、WordMLに落とせばすぐ望む結果のXMLが得られるという訳ではありません.以下の点では他のフォーマットからのXML化と同じことを考えねばなりません.

■ 画像の扱い

WordMLのスキーマでは画像は文字型としてBase64エンコーディングでw:binData中に格納されています.

(リスト15)  WordMLで表された画像の例(...:一部省略)

- <w:p>
  + <w:pPr>
  - <w:r>
    + <w:rPr>
    - <w:pict>
      + <v:shapetype ... >
        <w:binData w:name="wordml://02000001.jpg">/9j/4AAQ...55O7uddCm6cOVn/9l=</w:binData> 
      + <v:shape id="_x0000_i1025" type="#_x0000_t75" style="width:244.5pt;height:356.5pt">
    </w:pict>
  </w:r>
</w:p>

いままでの変換サンプルはすべてXSLTを使用していますが、XSLTでは当然バイナリデータの入出力が出来ません.従ってこのような画像のバイナリーデータを扱う箇所は、XSLTの外部にJavaなどで処理するプログラムを作成して呼び出してやる必要があります.

7 関連資料

以下が関連資料の一覧です.URLは正確を期しましたが変更される場合があります.御了解ください.

資料名備考
Microsoft Word XML Content Development Kit Beta 2 Word2003のXML機能の解説、WordMLのリファレンス.サンプルが納められています.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dno2k3ta/html/ODC_Office2003Page.asp
http://download.microsoft.com/download/4/9/7/49799b71-5502-40c6-b7ce-c791f87f65cd/xmlcdkb2.msi
Microsoft® Office HTML and XML Reference Word2000から使用されている要素・属性のリファレンスです.(10月の初め現在リンク切れ!? もうすぐ直るようです.)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnoffxml/html/ofxml2k.asp
WordML to HTML XSL Transformation WordMLからHTMLへ変換するXSLTスタイルシートです.
http://www.microsoft.com/downloads/details.aspx?FamilyID=d5dcf263-8e19-4054-b599-70371b6cc2b4&DisplayLang=en
Rich Text Format Specification, version 1.7 RTFの現時点での最新仕様書です.
http://msdn.microsoft.com/library/default.asp?url=/downloads/list/word.asp
http://www.microsoft.com/downloads/details.aspx?FamilyId=E5B8EBC2-6AD6-49F0-8C90-E4F763E3F04F&displaylang=en
Microsoft Office 2003 Beta 2 Technical Refresh Patch β2向けのパッチです.すぐOffice2003は発売ですが、もうすこしβ版で試したい方に! (10/19現在消失!) 
http://www.microsoft.com/downloads/details.aspx?displaylang=en&familyid=37F9D6B2-8354-4DDA-B86B-CF9CE8616D98

 TIP : この他にもマイクロソフトのMSDNのサイトhttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dno2k3ta/html/ODC_Office2003Page.aspには、OfficeシリーズのXMLに関する解説や、Word文書にスキーマを適用するデモのビデオクリップなどXMLの機能を知る上で興味深い内容が紹介されています.興味のある方は是非一度御覧ください.

< END OF DOCUMENT >