スキーマのバージョニング

XMLスキーマを定義するとかならず発生するのがバージョンアップだ。どんなに素晴らしいスキーマを定義しても、更新は必ず必要になる。

そんなスキーマのバージョニングについての話題が Douglas 氏のブログで触れられている(ちなみに氏は XML Web サービスの Program Manger らしい)。

このポストによれば XML スキーマ(data contract)のバージョニングモデルにおけるバージョンアップに次の二種類の名前をつけているそうだ。

  • Non-breaking change
    • 新しいデータメンバの追加
  • Breaking change
    • 名前空間やローカル名の変更
    • 非互換な方法でのデータメンバの属性の変更
    • データメンバの削除

データ系 XML のバージョン管理を考える上で素直な方針だと思う。こういうものにきちんと名前をつけてもらえるとありがたい。

バージョンアップの規則以外にもバージョン番号をどこで明示するかも問題だ。たとえば HTML や Docbook では DOCTYPE 宣言で public identifier を使ってバージョン番号を付けていた。RELAX NG のように名前空間の最後がバージョン番号になっているケースもある。 XSLT ではルート要素の属性に version 属性がある。WS-* 系のスキーマは、名前空間に入っている日付が重要なようだ。