- PR -

属性と子要素の使い分け

1
投稿者投稿内容
MASATO
常連さん
会議室デビュー日: 2002/06/25
投稿数: 22
投稿日時: 2002-06-25 03:43
こんばんわ。MASATOです。

現在、XML文章の構造を設計する際に、
属性と子要素(子ノード)のどちらを使うべきか良く迷うときがあります。

例えば、Titleという要素をもったBookという要素を記述するとします。
Titleは、Book毎にかならず1つという前提があった場合、
-----
<Book>
<Title>あいうえお</Title>
</Book>
-----
とするか、
-----
<Book Title="あいうえお"/>
-----
とするかで良く悩みます。

文法的に制限があって、属性か子要素かどちらかしか選択できない場合は
話は簡単です。

例えば、BookにさらにAuthorという要素を追加するとしまして、
Authorは複数存在することもありえるとしますと、
Authorは迷うことなく子要素としています。
(同じ名前の属性を複数もつことはできないからです)

例えば、以下のようになります。
-----
<Book Title="あいうえお">
<Author>Aさん</Author>
<Author>Bさん</Author>
</Book>
-----
Authorはこれで良いと思いますが、
この場合も、Titleは属性とするべきか、子要素とするべきか良く分かりません。

どういった場合に属性とし、どういった場合に子要素(子ノード)とするべきか、
何か方針のようなものをお持ちの方がいらっしゃいましたら、
お教えて頂けないでしょうか。

例えば、上のようなBookとTitleの関係があった場合、
皆様は前者と後者のどちらの構造の方が良いと思いますか?
よねくら
常連さん
会議室デビュー日: 2002/04/24
投稿数: 29
投稿日時: 2002-06-25 09:46
過去のスレッドに「要素と属性」というタイトルのものがありますから、これも参考にされたらいいと思います。

さて、「Title」と「Author」のような同じレベルの情報を子要素と属性を混在して定義するのはいかがでしょう?

子要素だけを使うとか、属性だけを使うとかポリシーをもった方がXML文書として洗練されているように見えると思います。

プログラムで文書を処理する場合を考えても、子要素か属性かでロジックが異なります。プログラムをスマートにするためにもポリシーがあった方がいいでしょう。ちなみにDOMを使って文書を処理する場合、属性を扱うほうが子要素を扱うよりも低コストです。しかし属性では同名の情報を扱えない、データが正規化されてしまうなどを考慮する必要があります。

何かの足しになりましたでしょうか。
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2002-06-25 10:47
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=711&forum=9&7
ですね。

ふと思ったこと。Title ってそんなに restrict に決めちゃっていいんですかね。

<Title>
なんちゃら大事典<Volume num="32">第32巻</Volume>
<SubTitle>インデックス A〜C</SubTitle>
<Original>
FooBar Excellent Dictionaries Vol.32
</Original>
</Title>

なーんてなってると、用途によってはうれしいのかなぁと思ったり。
MASATO
常連さん
会議室デビュー日: 2002/06/25
投稿数: 22
投稿日時: 2002-06-26 00:14
返答どうもありがとうございました。

引用:

過去のスレッドに「要素と属性」というタイトルのものがありますから、これも参考にされたらいいと思います。



完全に既出問題でしたね。それも結構最近のものでした。
見落としておりました。申し訳ありません。

引用:

ふと思ったこと。Title ってそんなに restrict に決めちゃっていいんですかね。

<Title>
なんちゃら大事典<Volume num="32">第32巻</Volume>
<SubTitle>インデックス A〜C</SubTitle>
<Original>
FooBar Excellent Dictionaries Vol.32
</Original>
</Title>

なーんてなってると、用途によってはうれしいのかなぁと思ったり。


なるほど、属性にしてしまうと、その属性に子を追加することが
できなくなるわけですね。
属性にしてしまうと、後々拡張が必要になった時に苦労しそうです。

引用:

子要素だけを使うとか、属性だけを使うとかポリシーをもった方がXML文書として洗練されているように見えると思います。


ということを考えますと、良く分からないままに属性にした結果、
後々の拡張により、一部を子要素としなければならないことになり、
属性と子要素が混ざって混沌としたXML文書になる恐れもありそうです。

どっちにするべきか良く分からなかったら、
とりあえず子要素にしてしまうというのが良いと思いました。

属性とするべきものを子要素としても、たいした被害はありませんが、
子要素とするべきものを属性としてしまうと大変なことになりそうです。

前述のスレッドも参考にして、色々考えてみます。
どうもありがとうございました。
1

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