XMLの名前空間

少し前に自社のASP.NETの製品に置いてWeb.configのカスタム部分をCLIで設定できるようにする作業をやっていた。

今回はその際に学んだ(正確には昔Javastrutsとか扱っていた際にも一度学んだような気もする)ものを書いておく。

まず、XDT変換する際に利用するXMLはこのようなものである。

<?xml version="1.0" encoding="utf-8"?>

<!-- web.config 変換の使用方法の詳細については、https://go.microsoft.com/fwlink/?LinkId=125889 を参照してください -->

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <appSettings>
    <!-- Remove -->
    <add key="hogeKey" xdt:Transform="Remove" xdt:Locator="Match(key)" />
  </appSettings>
</configuration>

この設定によって、configuration/appSettingsの中のhogeKeyの要素が削除されることになるというのは知っていたが
このxdtであるとかURLとかが何者であるかが分かっていないと、XDT変換用のxmlを生成するプログラムを書こうと思った際に、ドキュメントなどを読んでも、理解が難しかったので、メモをしておきたい。

下記が本当に分かりやすかったので、そのまま読んでおけばいいが、私の知っておきたかった部分だけをメモしておく
XMLにおける名前空間 - データ記述とXML

最初に用語をいくつか確認すると、

<hoge></hoge>

hoge 要素という。

<hoge>  ...  </hoge>

と要素に囲まれた中身をコンテンツという。

<hoge src="img.png" />

と書かれた場合に、これはhogeタグのsrc属性の属性値は"img.png"ということを意味する。

<!-- comment -->

と書かれたものはコメント。


さて、今回私がよく分かっていなかったのは下記の表現である。

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">

xmlnsというのは xml namespaceであり、ここではXML-Document-Transform の名前空間の名前は http://schemas.microsoft.com/XML-Document-Transform で、 これは長いので xdt という別名をつけています。

で、次がこれ。

<add key="hogeKey" xdt:Transform="Remove" xdt:Locator="Match(key)" />

この xdt:TransformというのはXDTで定められたスキーマ内のxdt:Transform属性に"Remove"を設定し、XDTで定められたスキーマ内のxdt:Locator属性"Match(key)"を設定している。