- PR -

XML+XSLT→HTMLにする場合のXML構造についてのご相談

1
投稿者投稿内容
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2002-10-04 01:57
XML+XSLT→HTMLという形の一般的な物を作っていまして、先日悩んだことをご相談させていただきます。例えば、短い文章とOKボタンが一つあるHTMLページの元データとして次のようなXMLを作ったとします。

<page>
<comment>OKボタンを押してください</comment>
</page>

これをXSLTでHTMLに変換する場合、OKボタンをフォームなりボタンの絵にリンクを設定するなどして作ると思うのですが、そのボタン部分のHTMLをXML側に持たせてしまって良いのか、XSLTファイル内で出力するようにした方がいいのか、どちらが良いのかということを悩んでしまうんですよ。<comment>タグで囲んでいるということは、コメントというデータを表現するためにあるデータであり、HTMLとして出力することを年頭に置いていません。たまたまXSLTを適用してHTML出力しているだけであり、CSV、RTFなど、どの形式で出力するかはXMLデータの時点では意識しなくて良いはずです。ところが、ページを作っていくうちにいつのまにかHTML出力に気持ちが引っ張られたXML構造になってしまい、思わずこんな情報を含めてしまいました。

<page>
 <comment>OKボタンを押してください</comment>
 <control>
<input type="submit" name="ok" />
 </control>
</page>


controlタグの中身を<xsl:copy-of>で出力すれば、そのままブラウザに出力されフォームボタンが現れます。なんらかのデータを表すのがXMLであり、ページに出力するボタン(に限らず)物に関するデータを含めてしまうのは、ちょっと違うのでは無いかと悩んでいるんですいつも。

<page>
 <comment>OKボタンを押してください</comment>
 <control>
<ok/>
 </control>
</page>

とやっても、HTMLタグを直接記述してしまうということは排除できても、一つのXMLの中にコメントデータとOKボタンを出すという2つの異なる系統のデータを含むことになってしまいます。データの論理的な構造をXMLで表しているつもりが、ブラウザに表示するときの情報をその中に含んでしまうのはいかがなものなんですかね。



永井和彦
ぬし
会議室デビュー日: 2002/07/03
投稿数: 276
お住まい・勤務地: 東京都
投稿日時: 2002-10-04 10:53
引用:

小僧さんの書き込み (2002-10-04 01:57) より:
とやっても、HTMLタグを直接記述してしまうということは排除できても、一つのXMLの中にコメントデータとOKボタンを出すという2つの異なる系統のデータを含むことになってしまいます。データの論理的な構造をXMLで表しているつもりが、ブラウザに表示するときの情報をその中に含んでしまうのはいかがなものなんですかね。



レイアウト情報としては

<page>
<comment/>
<control>
<ok/>
</control>
</page>

のような構造になるかと思います。

元文のコメント内容が紛らわしいのでちょっと混乱するのですが
「コントロール上での操作に関するインフォメーション」が
コメント内容である場合は

<page>
<control>
<comment/>
<ok/>
</control>
</page>

にでもなるでしょう。
これを「汎用レイアウト情報」としたときに

[data] - [汎用レイアウト情報] - [汎用->HTML変換情報]

という繋がりで分けていけば、かなり綺麗に分かれるとは思います。
「汎用レイアウト情報」がちょっと分かり難いかも知れませんが
これが「有効(表示対象)データ特定用情報」とかでも構わないので
とりあえずこういう構造にしておきます。

実際に扱う場合には2段階にデータ変換するのもなんですので
[汎用レイアウト情報]と[汎用->HTML変換情報]を纏めて[data-HTML変換情報]を
動的にでも作成することになると思います。この場合[data-HTML変換情報]は
HTML固有操作に関するベタ文でのインフォメーションとレイアウト情報が混在します。

[data-HTML変換情報]だけをいきなり見るとプラットフォーム固有の
情報と共有情報が混在しているように見えるかも知れませんが
上のように考えると問題無いと思います。

もう一つの選択肢としては[data]と[汎用レイアウト]を纏める方法もあると思います。
これを[data-汎用レイアウト]とすると、その内容は

<page>
<comment>何か短い文章</comment>
<control>
<ok/>
</control>
</page>

のような感じになるかと思います。これは想定している全ての出力に必要なメタ情報と
dataが混在したデータになります。あるプラットフォームに関して考えれば
冗長な情報もあるかも知れませんが、必要そうな情報は全て埋め込んでおいて
やらないと、適切な変換を自動で行うことは出来ません。

で、色々見て廻っていると後者の方が多いような気がします。
小僧さんが最後に書いてらした

引用:

<page>
<comment>OKボタンを押してください</comment>
<control>
<ok/>
</control>
</page>



もこちらの部類だと思います。ということで

引用:

一つのXMLの中にコメントデータとOKボタンを出すという2つの異なる系統のデータを含むことになってしまいます



というのは別に問題無いのではないかと思ったりします。
#しかし、先々まで見越した[data-汎用レイアウト]を考えるのは何と難しいことか(TT


[ メッセージ編集済み 編集者: 永井和彦 編集日時 2002-10-04 15:20 ]
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2002-10-04 13:04
永井さんご返答ありがとうございました。周囲にXMLを扱っている人が全く居ないので、今回のような作り始めてふと思う、作り方に関する疑問を解決することができずに困っておりました。汎用レイアウト情報が混じっているだけだから一緒でもいいんでないの?ということですね。楽になりました。
汎用レイアウト情報という異なった系統のデータを一緒に記述するということなら、名前空間を別にした方がよりベターかなと思いました。

<page xmlns:layout='URI'>
<comment>ありがとうございますm(_ _)m<comment>
<layout:control>
<layout:ok/>
</layout:control>
</page>

作り始めたときは、名前空間を使うことを想定していなかったのですが、今回のようなケースで使うと便利なのかもしれないと思うのですが、どうですかね?。
1

スキルアップ/キャリアアップ(JOB@IT)