XMLの名前空間
少し前に自社のASP.NETの製品に置いてWeb.configのカスタム部分をCLIで設定できるようにする作業をやっていた。
今回はその際に学んだ(正確には昔Javaでstrutsとか扱っていた際にも一度学んだような気もする)ものを書いておく。
まず、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)"を設定している。