(直前の投稿の続き)
…、んん、待てよ。
コメントアウトせざるを得ない、やむにやまれぬ事情ってのは、「ブラウザが要素内容のテキストを表示してしまう」ってことですよね。(追記:日記のコメントも見てください。)そもそも、未知要素のタグだけ無視してテキストを平然と表示するというブラウザの動作がトンデモナイのだけど、、、って言ってもしょうがないから止めよう。
で、内容テキストを属性にしてしまうなら、そもそもコメントアウトしなくていいのではないか、と。もう一度繰り返しますが、僕はそもそもがコメントアウト反対派なのです、囲み要素案は「ホントにどうにもならないなら、しょうがないから最後の一工夫」ということですから。
ここで少し一般論をしておきます。子要素<foo>text here</foo>
を親要素の属性foo="text here"
に“巻き上げる”ことはよく使われるし、それでことが済むなら、十分合理的な解決だと思います。ただし、このとき大域属性(接頭辞修飾付きの属性)にするかどうかはちょっと問題で、僕は修飾の必要はない、つうか修飾しちゃいかんと思ってます(理由は長くなるので別な機会に)。
「子要素→属性」変換が使えないなら、<foo>text here</foo>
を、<foo><text data="text here"/></foo>
とでもするしかないでしょう。しかし今度は、この<text>という要素が問題になるかもしれません。
大域的一般的な<text>要素を適当な名前空間内で定義して:
とでもして、本来のアプリケーションに渡すまえの前処理として、「<t:text>要素ノード→テキストノード」という変換を行ってアプリケーションに渡すとかの手段しかないでしょう。
<foo><t:text xmlns:t="http://xmlnamespaces.org/markup-utilities"
data="text here"
/></foo>
もっとも、前処理のためのボキャブラリってのは、これはこれで問題有りで、処理順序をどうやって判断するかでトラブルになりそうです。できるなら、各ボキャブラリ内で、内容テキストを避けるための代替マークアップを準備して欲しいところです。それらのマークアップの共通方式のコンベンションとしては:
- 子要素を同名の属性に変換する
- それができないなら、ローカル名がtextである要素のローカル属性dataにテキストを指定する
のような規定はあったほうがいいでしょうけどね。