XMLの要素と属性、どちらが便利か
こんなの便所の落書きだよ
このコラムを読んだ同僚の感想だ。同僚が言うには、「自分の思い」ばかりが先行していて、「何が言いたいのか」が伝わってこないそうだ。
文章を読みやすくする
猛烈に反省した。これからは主観的な思いは抑えめにして、より「客観的」に書くことを意識しよう。また、文章の内容だけでなく、「デザイン上の読みやすさ」も配慮しよう。以下、もう少し考えながら文章を書いてみるテスト。
■
■
■
■
■
XMLの要素と属性、どちらが便利か
.NETでアプリケーションの設定ファイルといえば、「App.config」や「Web.config」である。主な目的は「データベースへの接続文字列」など、後から設定の変更が予測される値を格納することである。このconfigファイルはXMLで記述されている。XMLには値を格納する方法が2つあり、要素(element)と、属性(attribute)が考えられる。それでは、要素と属性のどちらが便利なのだろうか。
答えは、「要素」である。
なぜなら、要素は自分の内部に「要素」を持つことができるから。逆に言うと、属性は自分の内部に「属性」を持つことはできないから。
例えば、四国の人口を例に考えてみる。
要素と属性の表現の違い
■四国の人口
このXMLは四国の人口データを格納している。もしここで、四国4県ごとの人口データを追加する必要が出てきたとする。要素ならば、以下のように表現するだろう。
■各4県のデータを追加(要素)
要素は入れ子にできる。そこで、「香川」「徳島」「愛媛」「高知」の4県は、「四国地方」の子ノードとして追加してやればよい。ところが、属性の場合は一工夫必要になる。
■各4県のデータを追加(属性)
各県名をプレフィックスにした属性名を作成して対処した。一見、要素の場合と大した差はないように思える。しかし、もし地域を更に細かくして、高知県内の高知市や安芸市などの人口情報を追加する必要が出てきた場合はどうだろう。属性がどんどん増えていって、いびつなノードになる。入れ子にできないということは、入れ子構造を無理やり属性名でカバーする必要があるということだ。
要素が便利であるもう1つの理由
要素が属性よりも便利である理由が「入れ子」以外に、もう1つ存在する。それは、要素は「同じ階層に同じ値を複数持てる」という点である。
■人類として「すずきいちろう」が4人いる(要素)
属性は、同じ階層に同じ値を持てない。以下のXMLはエラーを起こす不正なXMLである。
■人類として「すずきいちろう」が4人いる(属性)※エラー
最後にまとめ
実際にXMLのサンプルで見たように、「要素」の方が「属性」よりも断然便利である。もし今後、「要素」にするか「属性」にするか迷うことがあったら、「要素でGo!」と言いたい。
コメント
エンジニー
すばらしい!
言い切ってもらって、すっきりです。MicrosoftのXAMLで、要素多用を個人的に疑問に感じていましたが、都道府県・市町村の例、同値を複数表す例でよく理解できました。