XMLに関連したWord 2003の機能 |
[XML Top]
Oct 20, 2003 アンテナハウス株式会社
本稿はWord 2003で新たに搭載されたXMLに関する機能に関して、編集と保存フォーマットを中心に調査の結果と活用法を報告します.評価のための使用したWord2003は、英語版のβ2にTechnical Refresh Patchesを適用したものです.実際の製品版とは若干の違いがあるかもしれません.あらかじめ御了解ください.
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ではダウンロード対象になっていません.
Word 2003ではXMLファイルを入力して編集できますが、編集機能を引き出すためには、XMLスキーマを用意しなければなりません.これにより、文書編集時に自動的に妥当性検証をWordが行ってくれます.
それではともかく、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に変換し、その結果を編集対象にします.
XMLスキーマを作成して、それを適用した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文書ファイル名]"で動作します.
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>
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種類しか確認できませんでした.
Icon | Description |
---|---|
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>
事実上のワープロスタンダードのWordでXMLも扱えるようになったのは大変便利ですが、文書型のXML編集として使った場合はどうでしょうか?
Word 2003をXML編集に使うメリットとしては以下の点が挙げられるでしょう.
Wordは世界的に見ても最も多く使用されています.PCにMicrosoft Officeがプリンストールされていることも多く、使える人が多い、または一定程度使い慣れています.初心者にはこの延長上でXMLが編集できます.XML専用エディタだとこのような訳にはいきません.
XML専用のエディタは一般に高価です.今後XMLを導入してゆく企業にとってオーサリングツールをWordで済ませられれば価格的に魅力でしょう.
多言語の編集を考えた場合、UNIX系の環境に比べてWindowsファミリーの環境は多言語機能が充実しています.Wordを使用すればこの機能をそのまま使用できます.
従来から搭載されているワードプロセッサとしてのWordの機能をそのままXML編集でも使用できます.例えばスペリングチェック、グラマーチェック、翻訳など.
一方、やはり問題点も存在します.用途にもよりますが、次の点が挙げられます.
2.2 スキーマ付きのXMLファイルの編集で示したように、ユーザーがXMLを編集するためには、XMLスキーマを用意しなければなりません.
属性編集を行うためには、
を行って、Attribute for ...のダイアログを表示してやる必要があります.属性が多用されているXML文書では、この操作は結構手間がかかります.また属性値がダイアログを開かないと確認できないのも文書によっては大変です.普段テキストエディタでバリバリXML編集をやっている方なら、苦痛に感じるのではないでしょうか?
機能的な 弱点 を抱えているとはいえ、多くのXML文書がDTDを使用しています.しかしWord2003ではDTDによる検証はサポートされていません.今後はDTDからXMLスキーマの時代になってゆくでしょうが、Wordを使用するなら既存のDTD資産はXMLスキーマに変更してゆかねばなりません.
また、XML文書によっては DTDの中に要素型宣言、属性リスト宣言は記述しないで 、内部サブセットに実体宣言(<!ENTITY ...>) のみ を記述する場合もよくあります.Word2003でこのようなXML文書を編集すると、実体参照は、まさに「置き換えられた結果」になってしまいます.これはWord 2003が「XMLを直接編集する」のではなく、「MSXML5によってロードされた結果を編集する」方式を取っている以上やむを得ない結果でしょう.
(図8) 実体参照の扱い
ユーザー定義のXMLスキーマがサポートされるのは上記の2製品で、Office 2003 Standard版ではサポートされません.つまり今までのOfficeシリーズと異なり、Wordは版によって機能が異なる製品となりました.WordのXML編集機能を使いたいと考えた場合、Professional版か単体のWord2003を購入する必要があります.
現在までのWod 2003の紹介では、Word 2003がXML文書を編集できるといっても、その表示形式はいわゆるXMLエディタ(例えば弊社のTag Editor)と同じ平凡なツリー表示でした.これはWordの豊富な表現機能を使用していないためです.しかし、せっかくWordでXMLを編集するなら、要素に一定のスタイルをマッピングさせてビジュアルに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表示」に変換した場合では編集機能はどうなるでしょうか?以下のステップで試してみました.
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)というトピックが公開されています.その文書では次のように解説されています.
確かに従来のバイナリーフォーマットや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文書データ構造に関する知識はどのようなフォーマットであれ、引き続き必要です.
WordMLの概要を解説します.詳細は「Microsoft Word XML Content Development Kit Beta 2」を参照ください.
Woerd2003で文書を作成し、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 関連資料 を参照)
簡単な文書を作成して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 name | Contents |
---|---|
w:wordDocument | ルート要素 |
o:DocumentProperties | Title, Author ...Versionなど..doc形式の場合にWindowsのエクスプローラ上でファイルのプロパティに表示される内容です. |
w:fonts | デフォルトフォントを定義するw:defaultFontsと、複数のフォントテーブルw:fontから構成されます.基本的に文書で使用されているフォントが列挙されます.RTFのフォントテーブルに対応しますが、内容は必ずしも同一ではありません. |
w:lists | 複数のw:listDef, w:listから構成されるリストテーブル.箇条書きの書式を表します.RTFのList TableとList Override Tableに対応します. |
w:styles | w: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の子要素が定義されています.
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>
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の子要素です.
w:tblはw:pと並ぶ重要なブロックレベルの要素です.典型的なテーブルの構造は以下のようになります.
(図14) 典型的なテーブル(w:p)の構造
WordではHTMLと異なり、次のような「特殊な(?)テーブル」が作れてしまいます.この場合、W1~W4の幅がw:tblGridに記録されます.Cell 1は論理的には一個のセルですが、「またぐグリッドの数」は2個になります.
(図15) 特殊なテーブルの例
Wordのテーブルの表現はHTMLとは異なります.HTMLはcolspan="結合するセル数", rowspan="結合するセル数"でそれぞれ横結合・縦結合を表しました.w:tblの場合は以下のようになります.
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のヘルプもあわせて参照するのが良いでしょう.資料は文末に示してあります.
Word2003にはどのような活用法が考えられるでしょうか?当然「他形式→WordML」「WordML→他形式」の2方向が考えられますが、他形式といっても、その筆頭にあがるのはやはりXMLでしょう.
一部復習になりますが、他形式からWordへの変換におけるWordMLの特徴は次のようになります.
これらの特徴はWordを業務システムの一環として利用している場合に大きな意味があります.相手がWord2003を持っていることが前提ですが、定型的なXML文書にユーザー定義スキーマのタグを埋め込んで配布/回収し、記入してもらったデータ部分のみXMLとして抽出する、またXML文書を元にサーバー上で動的にWord文書を作成し配信するなどの用途はWordMLを使えば可能になります.
このカテゴリの例は、3.3 WordでのXMLのビジュアルな編集の、(図9)XML Content Development Kitのサンプル と、(図10)XMLから作成したWord文書の表示画面例 があります.
以下の点に注意する必要があるでしょう.(以下で「ユーザー定義タグ」とはユーザー定義スキーマで定義された要素を指すものとします.)
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という変換は、ちゃんとやろうとすると階層的なデータ構造を非階層的なデータ構造で表現するように変換する作業となります.
WordMLから他形式へ変換する用途は、例えば次のような分野が考えられます.
前者は企業内に蓄積されているWord文書をWord2003を使用していったんWordMLに保存し、そこを出発点としてXML化を行う方法です.Word文書をXML化するツールは世界でも日本でも様々な製品があります.すでにWordMLはXML形式になっているので、バイナリー(.doc)やRTF(.rtf)を元にXML化するよりも有利でしょう.
また後者の例については、マイクロソフトはすでに 7月 にWordMLをHTMLに変換するXSLTスタイルシートを公開しています.まだ画像が変換できませんが、WordMLからの変換を調べる上では参考になるでしょう.
ここではいくつかのサンプルを御覧ください.
この例では次のような規則で一般的なWord文書をXML化しています.
このままでは、文書が入れ子構造になっていません.次のような「重み」を各タグにつけ、この値を元に階層化します.つまり要素を順にスキャンし自分より重みの高い要素を自分の子として取り込むようにします.
要素 | 重み付けの値 | 備考 |
---|---|---|
body | 1 | 文書本体 |
chapter | 2 | 章(スタイル:Heading1の段落) |
section | 3 | 節(スタイル:Heading2の段落) |
subsection | 4 | 副節(スタイル:Heading3の段落) |
subsubsection | 5 | 副々節(スタイル:Heading4の段落) |
p | 50 | 段落(Heading1~Heading4以外の通常段落) |
ul, ol | 50 | リスト(箇条書き:段落でw:listPrの存在するもの) |
table | 50 | テーブル(表:w:tbl) |
この例はまだ参考出品です.対象は一般的なWord文書.およそ次のような変換を行います.
以下の点に注意する必要があるでしょう.
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などで処理するプログラムを作成して呼び出してやる必要があります.
以下が関連資料の一覧です.URLは正確を期しましたが変更される場合があります.御了解ください.
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 >