- PR -

属性と要素

1
投稿者投稿内容
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2002-02-05 13:14
XML の構造を決める場合に、属性にするか子要素にするかって、なにか指針はありませんか?属性と要素の互換はできるのでそれほどインパクトのあることではないのですが…。

XSL で扱っている限りはそれほどかわらないような気もするのですが、DOM/SAX での操作ととか validation とかのしやすさに影響がでるものでしょうか。
井上孝司
ぬし
会議室デビュー日: 2001/09/08
投稿数: 668
お住まい・勤務地: 東京都
投稿日時: 2002-02-05 13:20
井上です。
私は属性と要素の使い分けについて訊かれたとき、「階層構造を持たせるなら要素、
プロパティ的情報なら属性」と答えるようにしています。前者はともかく、後者は
すこぶるアバウトな基準ですが…
_________________
www.kojii.net
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2002-02-06 13:44
うーん、逆にそこなんですよね。

プロパティ的情報にさせるべきか否か、なんです。悩むのは。
たとえば HTML ならわかりやすいんですよね。width は単独ではありえなくて、やっぱり attribute なんです。

たぶん、

- 独立性が高いもの(親との関係が薄いもの、もしくは別の関係を取れるもの)
- 複数存在できるもの

あたりが、子要素にすべき or せざるをえないもので、

- 親なしにはありえないもの
- 親のバリエーションを規定するもの(バリエーションがなにかというのも難しいな…)

あたりが属性かなぁとつらつら思いつつ…

井上孝司
ぬし
会議室デビュー日: 2001/09/08
投稿数: 668
お住まい・勤務地: 東京都
投稿日時: 2002-02-06 13:55
井上です。
そうですね。ソフトウェアをデザインする際に、右クリックして [プロパティ] で
設定させるようなものは属性かな…と

あと、DTD みたいに属性じゃないと型指定ができないようなものもありますから、
そういうときには文句なしに属性になるケースが出てくると思います。たとえば、
ID 型属性値を使って本文中でブックマークするようなケースです。あと、候補の
列挙ができるのも、DTD では属性だけですし。
_________________
www.kojii.net
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2002-02-06 16:11
なるほど。型系ですか。
このあたり、こう、なんか指標になりそうな資料はないでしょうか?
いかにも FAQ っぽいのでありそうだなぁと探してはみたのですが…。
なければ、ここでちょっとまとめてみましょうかね…。

# 親はコンテナと考えればまとまりやすいのかな…。

○ 属性にすべきもの

- 親そのもののバリエーションを規定するもの(子要素に関係なく)
- 親なしにはありえないもの(結合度が高いもの)
- DTDを使うなら、型指定したいもの
- 単純なもの

○ 子要素にすべきもの

- 複数入れたいもの
- 親がなくても考えうるもの(結合度が低いもの)
- 構造を持っているもの(ツリーだったり、グループ化したかったりするもの)

--
あと、たとえばグループですね。
html でいえば、<select> で囲んだ <option> 群なのか、<input type="radio" name="group"> なのか、とか。
XML的にはグルーピングタグで囲むほうがよさげな気はするのですが。
やなぎ
会議室デビュー日: 2001/12/11
投稿数: 12
投稿日時: 2002-02-08 17:08
みなさんのようなベテランの方でも、この辺はお悩みなんですね。
ちょっと、ほっとしました。
ちなみに私は、いろいろ調べたり聞いたりした結果
「ユーザーに見えない(処理のためだけに必要な)データは属性、それ以外は要素」
というのも簡単な割切り方だと思っています。
あの村田真さんも「ソースとしての読みやすさから、上記のような割切り方もある」と、おっしゃっていました。
井上孝司
ぬし
会議室デビュー日: 2001/09/08
投稿数: 668
お住まい・勤務地: 東京都
投稿日時: 2002-02-08 18:24
井上です。
引用:

「ユーザーに見えない(処理のためだけに必要な)データは属性、それ以外は要素」


なるほど、これはナイスなアイデアですね。私の Web のコンテンツ生成用に
使っている XML 文書にも制御用の要素がいくつか含まれているんですが、そ
んなときに応用できそうです。
あと、ADO のレコードセットを XML で出力したときのように、「表」的なデー
タを「レコードは要素、フィールドは属性」として出す事例もありますね。
_________________
www.kojii.net
よねくら
常連さん
会議室デビュー日: 2002/04/24
投稿数: 29
投稿日時: 2002-04-24 19:22
既に終わってしまった話題だと思いますが、気づいたことがあったので投稿しました。

XML文書をプログラムで処理する場合、要素の情報の並びはXML文書に記述した順番と一致しますが、属性の情報の並びはXMLプロセッサの実装に依存します。例えば次のような記述があるとき、

<x a="1" b="2"/>

DOMでx要素のattributesアトリビュートを参照したとき、取得できるノードリスト内のノードの順序は、a-->b とは限りません。

その他、属性ではデフォルト値やとり得る値の列挙が定義できますが、利用するスキーマ言語の種類によっては、要素でも可能ということになります。
1

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