どうも、XSLT絡みでトラブル多発。仕事の進捗も遅くなっています。
こんな問題に遭遇している、という話を少し書いておきます。
XHTML Basic DTDによる検証ができない §
XHTML BasicのDTDで検証ができません。
配布ZIPファイルに含まれていないファイルを参照しているためです。
下記ページのxhtmlbasic.xmlに、解決方法が載っています。
実例が載っているページ
条件付きセクションで、xhtml-arch.moduleをIGNOREにして外せば良いのですが、XHTML Basic勧告にはパラメタ実体を書き換えちゃいかんよ、と書いてあるのでこれで良いか分かりません。
更に、こちらで試してみると、ローカルのDTDを使った時は検証に成功しますが、W3CのURLを使って検証すると通らない問題が。
これは未解決です。
未解決ですが、XHTML BasicはやめてXHTML 1.0を使う方法に転換したので、未解決のままになってしまうかも。
名前空間の宣言が抑止できない §
以下のページの以下の箇所に書いてある問題と同じです。
xsl:copy と exclude-result-prefixes
とりあえず、上記ページと同じような方法で回避。
空要素タグ出力不能 §
この問題は以下に書きました。
[xml-users 8815] MSXMLと.NET Framework Class LibraryのXSLT変換の相違
要するに、.NET FrameworkのSystem.Xml.Xsl.XslTransformクラスを使って変換すると、通常空要素タグになるものが開始タグ+終了タグに変換されちゃうケースがあって困るなぁ、というものです。
互換性を意識したXHTMLを出力する場合は、とても問題です。
たとえば、img要素の出力が絶対にできないことになるわけです。この要素はどうしても属性を付けないと機能しませんが、付けると空要素タグになってくれません。
この場の結論、何が問題かと言えば…… §
これらの問題の何が問題かと言えば、何が正しいのか自分でも良く分からない部分があると言うことです。
具体的に間違いが確定できれば、MSにバグレポートを送ることもできます。一応、MVPの肩書きもあるし。
しかし、どこがどう違うのかも明瞭ではないので、躊躇しています。
躊躇していますが、何も成果物が出てこない状況では、現状を説明しないと他人からは仕事をしてないように見えるかも知れないので、一応書いてみます。
XSLTって好きじゃないのに §
XSLTは好きではないのですが、今回、やむを得ず使っています。
でも、嫌いだからと言って避けておけば良かったかな。