階層構造の深さによるメリット・デメリット
XML文書の階層の深さにによるメリット・デメリットはありますか? あまり深くしすぎるのなら、複数のXML文書に分割するほうがよいのでしょうか?

回答/富士ソフトABC株式会社 技術センター
2001/10/17

 結論から申しあげますと、階層の深さはXML文書化するデータの内容や目的によって決めることが望ましいので、階層構造を深くすることによるメリット・デメリットについては、あまり考えなくてもよいでしょう。

 階層構造を浅くするメリットとしては、データを処理しやすいことが挙げられます。階層が浅いことで、深い構造をたどることなく目的のデータにアクセスできます。デメリットとしては、データの関連性が分かりづらくなることと、同様の意味を持つ要素を使いまわすことができなくなることなどが挙げられます。

 例えば個人情報のデータがあったとして、個人の情報と勤務先の情報が同じ階層で定義されていたら見づらいし、名前などは要素の定義としては個人名であれ会社名であれ変わらないものなので、それぞれの階層の下で同じ要素名を使用した方がよい場合があります。結果、階層が浅い場合、名前付けで多大な労力が必要になる場合があります。

<担当者名>山田太郎</担当者名>
<部門>第二営業部</部門>
<部門電話番号>03-xxx-xxxx</部門電話番号>
<製品名>Webサーバ</製品名>
<価格>28万9000円</価格>
<企業名>アットマーク・アイティ商事</企業名>
<職種>流通</職種>
<企業電話番号>03-xxx-xxxx</企業電話番号>
文書構造が浅いXML文書の例。すべての情報を、異なるタグで表現しようとしている

 次に階層構造が深い場合ですが、メリットとしては階層化することで分かりやすい構造になること、名前など同じ定義の要素を複数の場所で使用することが可能になる、といったことが挙げられます。デメリットは、階層が深くなることで目的のデータへのアクセスが複雑になります。また、同じ要素を複数の場所で使用した場合、その要素のみを見ても、それが目的の要素なのか判別できない場合があります。判別する場合は、上の階層からの要素名をXPathで連結指定する必要があります。

<担当者>
  <氏名>山田太郎</氏名>
  <部門>第二営業部</部門>
  <電話番号>03-xxx-xxxx</電話番号>
  <取り扱い製品>
    <製品名>Webサーバ</製品名>
    <価格>28万9000円</価格>
  </取り扱い製品>
</担当者>
<企業>
  <名称>アットマーク・アイティ商事</名称>
  <職種>流通</職種>
  <電話番号>03-xxx-xxxx</電話番号>
</企業>
文書構造を深くしたXML文書の例。担当者の電話番号と、企業の電話番号を表す意味で、<電話番号>タグが2カ所に使われている

 このように、階層が浅い場合のメリットは深い場合のデメリットとなり、その逆も成り立つわけです。最初に書いたように、階層は、データの内容や目的を踏まえて、要素にするべきか属性にするべきかを検討し、結果として階層を決めるべきです。ただし、極端に浅かったり、極端に深いといった階層構造の場合は、それぞれのデメリットの方が強くなるので注意しましょう。

 

「Ask XML Expert」


XML & SOA フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日月間