XMLからWord(.docx)への変換、DrawingMLかVMLか?
XMLからXSLTスタイルシートとantを使ってWord(.docx)を生成しようとしています.
ここでWord上に図形を挿入しなければならないのですが、例えばMicorosoft Wordで一個の長方形を挿入し背景色をつけて、内部にテキストを入れて保存すると概略次のような構造のWordprocessingMLが生成されます.(余分なネームスペースは省いてあります)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing"
xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
mc:Ignorable="w14 w15 wp14">
....
<w:r>
<w:rPr>
<w:noProof/>
</w:rPr>
<mc:AlternateContent>
<mc:Choice Requires="wps">
<w:drawing>
<wp:anchor distT="0" distB="0" distL="114300" distR="114300"
simplePos="0" relativeHeight="251659264" behindDoc="0" locked="0"
layoutInCell="1" allowOverlap="1">
<!-- ここからはDrawingMLの世界:長いので省略-->
</wp:anchor>
</w:drawing>
</mc:Choice>
<mc:Fallback>
<w:pict>
<v:rect id="正方形/長方形 1"
style="position:absolute;left:0;text-align:left;margin-left:1.5pt;margin-top:-71.25pt;width:58.8pt;height:78.6pt;z-index:251659264;visibility:visible;mso-wrap-style:square;mso-width-percent:0;mso-height-percent:0;mso-wrap-distance-left:9pt;mso-wrap-distance-top:0;mso-wrap-distance-right:9pt;mso-wrap-distance-bottom:0;mso-position-horizontal:absolute;mso-position-horizontal-relative:text;mso-position-vertical:absolute;mso-position-vertical-relative:text;mso-width-percent:0;mso-height-percent:0;mso-width-relative:margin;mso-height-relative:margin;v-text-anchor:middle"
fillcolor="#001f76" stroked="f" strokeweight="1pt">
<!--ここはVMLの世界:長いので省略-->
</v:rect>
</w:pict>
</mc:Fallback>
</mc:AlternateContent>
</w:r>
これを見るとわかりますが、Wordは2つのフォーマット、DrawingMLとVMLを両方入れてくれます.ただしVMLはフォールバックの扱いのようです.
ちなみに手作業でDrawingMLの部分だけ、VMLの部分だけに編集してもWordはちゃんとその結果の.docxをエラーなしに読み込んでくれます.
さて実際に中を見てみるとわかるのですが、複雑さの度合いは完全にDrawingML > VML です.DrawingMLは後発のためか山ほどのパラメータがあり、とてもXMLから自動生成するのは心がくじけてしまいます.これに対して、VMLは比較的単純で、かつCSSでスタイルが書けるのでXSLTスタイルシートによる変換はまだ対応できそうです.使用する機能は単に矩形に背景色をつけてテキストを内部に配置するだけなので、複雑なことはまったくしません.
あまりこの世界の動向を知りませんが、今後システムとして使う場合、DrawingMLとVMLのどちらを採用すべきでしょうか?VMLは互換性のためだけに存在しているなどという話を耳にすることがあるので、はるかにプログラミングしやすいVMLへの変換にしたいのですが悩んでいます.
助言をいただければ幸いです.
以上 よろしくおねがいします.