設定ファイル(.dicon)の検証と入力補間(VS2005 Schema編)

以前にVisual Studio 2005(以降VS2005)上でのXMLファイルの入力補間はDTDでも可能である、というエントリを書いた(設定ファイル(.dicon)の検証と入力補間)が、当時の記事にトラックバックを頂いたのを良い機会と思い、同様の事をDTDでは無くW3C Schemaで行う手順を、備忘録の意味も込めて書いておこうと思う。

※追記: このエントリは成り行き上、Seasar2(s2dotnet)で使用しているような語彙による設定ファイルの入力補間を、VS2005上で行うことを目的として書いていますが、DTD、又はW3C Schemaにより構造化されたXMLファイルであれば、どんなXMLファイルでも入力補間が可能です。
また、この機能はVisual Studio 2005のStandard Edition以上の製品で使用可能と思われます。(解説では、全てVisual Studio 2005 Professional Edition 英語版を使用しています)

最初からスキーマがある場合は作成する必要は無いが、seasar2の設定ファイル(.dicon)を筆頭にDTDを使用しているケースは極めて多いので、その場合はDTDを元にスキーマを生成する。
DTDからW3C Schemaの変換はVS2005では非常に簡単であり、対象のDTDをエディタペインで開いた状態で、以下のように"メニュー->XML->Create Schema"を選択すると

VS2005はDTDから推論したスキーマを以下のように、エディタ上に自動生成して表示するので、構造に問題があれば修正し、ネームスペースを適正なURLに変更して保存する。

予めスキーマが準備されている場合はそのスキーマを保存する。保存するスキーマの用途によって、保存するディレクトリを以下のどちらかから選ぶ。

1. {VS2005_HOME}\Common7\Packages\schemas\xml配下に保存
どのようなプロジェクトでも、インテリセンスでネームスペースが補間対象として選択可能になる
2. カレントディレクトリやプロジェクト等、XMLから位置が解決可能な場所に保存
現在の配置場所から解決可能な場合のみ、インテリセンスでネームスペースが補間対象として選択可能になる。

  • 入力補間対象のスキーマ(ネームスペース)を選択する

生成したスキーマを「1. {VS2005_HOME}\Common7\Packages\schemas\xml配下」に保存した場合は、一度VS2005を再起動してから対象のXMLファイルを開き、ルート要素で対象のネームスペースを選択する
生成したスキーマを「2. カレントディレクトリやプロジェクトのディレクトリ」に保存した場合、対象のXMLファイルを開き、ルート要素で対象のネームスペースを選択する。
なお、どちらの保存場所を使用していても、ルート要素から属性を示す"xmlns='"と記述することにより入力補間がかかり、選択できるネームスペースが以下のように表示されるので、入力対象のネームスペースを選択する。

以上でXMLへのスキーマの割り当ては完了する。

  • 入力補間を利用してXMLを入力する

この状態でやっとXMLの入力補間が有効になります。入力補間は勿論のこと、スキーマとのバリデーションも行われるため、ミスしがちなXMLの入力がスマートに行えます。

なお、Visual Studio 2003(以降VS2003)の場合、該当のディレクトリ(%VS2003_HOME%\Common7\Packages\schemas\xml)にコピーする事で、ネームスペースを明示的に指定しなくともXMLの入力補間は有効になりますが、VS2005の場合は、同様のディレクトリにスキーマをコピーしておいても、対象のXMLのルート要素などで明示的にネームスペースを指定しないと、入力補間は有効になりませんでした。
自動的に割り付けるスキーマは、XMLを開いているエディタからプロパティウインドウに移り、"Schema" -> "..."ボタンを押して表示する、以下のダイアログで、明示的に追加もできますが、やはりXML側で明示的にネームスペースを指定しない限りは入力補間は有効になりませんでした。

理由はまだ不明ですが、VS2005は内部で使用するスキーマが非常に多くあるので、VS2003のように自動的に補間の対象にしてしまうと、補間処理が非常に重い処理になってしまうのを避けているような気がします。

オチ:無理やりまとめたけど、これならXMLと同一のディレクトリにDTDを放り込んでおいた方がよほど楽かもしれません。