XML におけるコメントの書き方って、こうしている方がほとんどじゃないですか?
<appSettings>
<!-- ログ保存先ディレクトリ設定 -->
<add key="logDir" value="C:\log"/>
</appSettings>
私は定期的に XML におけるコメントの書き方ってこれでいいのかと?頭をよぎることがあります。
プログラミング言語において、コメントは 100% 人のためのものです。
しかし XML において、コメントはコメントノードという立派なひとつの構成要素であり、処理系から操作することができます。
処理系から操作できるということは、システムのためにコメントを書くのもアリだということです。
そして、コメントはほとんどの場合、どれかの要素の子要素です。(コメントはルート要素の外にも記述できます)
つまり、構造的にも関連を持たせるためには子要素にするのがよいのじゃないか?と思うのです。
要するに、上記の例で言うと下記のようにということですね。
<appSettings>
<add key="logDir" value="C:\log">
<!-- ログ保存先ディレクトリ設定 -->
</add>
</appSettings>
実際に、XML Schema には xsd:annotation という、XML Schema の各定義に対する注釈を記述するための要素があり、子要素に xsd:documentation と xsd:appinfo を持ちます。
xsd:documentation はスキーマ文書の読者、つまり人のための注釈を記述し、xsd:appinfo にはスキーマを処理するアプリケーションのための注釈を記述します。
対象の定義と関連を持つ必要があるため、定義の子要素として記述しなければなりません。
ちなみに、xsd:schema 以外の定義に対しては、最初の子要素である必要があります。
もちろん注釈=コメントではありません。コメントの一部とみなすことはできると思いますが。
しかし、設定ファイルのようなファイルの場合、XSLT・XPath・DOM 等を利用して定義内容を一覧にしたい場合は無いですか?
そんな時、設定にたいするコメントを一緒に記載したくないですか?
コメントを子要素にしておけば、そんな場合に対するコーディングが非常に素直なものになります。(特に XSLT)
決して、常にコメントをこう書くべきだというつもりはありません。
- 人から見ると、読みにくい(その他の書式にない形式なため、なれてない)
- ネストが必要以上に深くなる
- 全体的に冗長になる
のように、デメリットも多々あります。
私も定期的に頭をよぎる割には、そのたび色々考えて、ほとんどの場合前者を採用してしまいます。
設定ファイルのように、他人に見せるファイルならなおさらです。
見てのとおり、デメリットは「人が見たとき」という面に集中しています。
しかし、システムが扱う場合は、このデメリットはほとんど意味がないでしょう。そして前述したメリットが生きてくる場合があります。
つまり、何らかの処理系で扱う XML の場合、処理内容によっては後者の方がいい場合もあるんじゃねーの?ってことですな