Visio XML

Visio は Visio 2002 から XML 形式での入出力をサポートするようになりました。XML の作成方法は簡単で、図面、ステンシル、テンプレートを保存する際の形式に XML 形式を選択するだけです。なんでもいいので図面を作成して VDX 形式で保存し、メモ帳でそのファイルを開いてみてください。図面が XML だけで表記された、Visio XML ワールドを垣間見ることができると思います。ファイル サイズも通常の形式の倍くらいになり、Visio が読み込む時間も長くなります。スキーマは複雑ですが、慣れると図面やシェイプの構造の確認ができて、ソリューション開発時のリファレンスとしても使えます。大本命は XML 形式をソリューションで活用すること。例えば図面テンプレートを XML 形式で作成しておいて、ユーザーが入力した情報をもとに図面を作成するときは、Visio のオブジェクト モデルを呼び出さなくても、XML パーサーを使って所定の場所に情報を書き込んでいく、という使い方があります。ほかのアプリケーションから図面内の情報を参照する必要があるときも、XML 形式で保存しておけば Visio ライブラリを使わなくても XML をスキャンで読み取り処理が可能です。従来のバイナリ形式に保存しても XML で保存しても図面の情報はまったく変わりませんから、必要な処理が終わったらバイナリ形式に変換して (このときは Visio オブジェクト モデルが必要です) 読み書きのスピードアップをはかることもできます。

ちなみに、Visio XML は W3C 標準の形式ではありません。W3C 準拠の形式を扱う必要がある場合は、もう 1 つの XML 形式である SVG 形式を使ってください。こちらも通常と同じ操作で保存できます。

さて、作成した VDX ファイルをメモ帳でみると、5 行目あたりからいきなり大量の文字列がみえると思います。これは Base64 でエンコードされた図面のプレビュー画像ですが、かなりの量がありますね。プレビュー画像は、[図面の種類の選択] 画面に登録したときに表示される画像で、普段はほとんど使いません。この画像をソリューションで使う予定がない場合は、プレビューなしで保存してファイル サイズを小さくすることをおすすめします。[ファイル] - [プロパティ] で [プレビューの画像を保存する] チェックボックスをオフにしてください。

ファイルがすっきりしたところでもう一度 VDX を開いてみると、なんとなく構造がわかる…人はほとんどいないと思います。改行記号がほとんどないのでとても読みづらい状態ですね…というわけででだいたいの大まかな構造を紹介します。ファイル全体は Document というコンテナで表現されていて、その下にスタイル、ページ、マスタについての情報を格納するコンテナがある、というイメージです。基本的には Visio のオブジェクト モデルと同じ構造ですね。

この構造を対応するタグで表現するとこのようになります。
<VisioDocument>
...
<StyleSheets>
<StyleSheet>
...
<Masters>
<Master>
<Shapes>
<Shape>
...
...
<Pages>
<Page>
<Shapes>
<Shape>

スキーマの詳細はここにある資料 (英語) で公開されています。
https://www.microsoft.com/downloads/details.aspx?familyid=fe118952-3547-420a-a412-00a2662442d9&displaylang=en
ガッツのある人は資料を開いてみてください。スキーマが複雑なのがみてとれると思います。これを駆使するのは結構大変で、実際にソリューションでデータの取得をするのに、この構造の中を探すとなるとコーディングも面倒ですし、パフォーマンスも悪くなります。そこでお勧めするのが SolutionXML です。SolutionXML は任意のデータを格納しておくことのできる XML 要素で、例えばよくアクセスする図形のプロパティを自分の好きな構造でここに保存しておき、後で再利用、などといった使い方が想定されています。

…といいところまできましたが今回はここまで。次回に続きます! 次回は以前紹介した SDK にある C# サンプル コードを使って SolutionXML の使い方をみていく予定です。

<担当: M>
この投稿は現状のまま何の保証もなく掲載しているものであり、何らかの権利を許諾するものでもありません。マイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません