XMLデータベース開発方法論(4) Page 3/4

20-80ルールでざっくりXMLデータベース設計


川俣 晶
株式会社ピーデー
2005/9/22

分かりやすい要素名、属性名

 ここからは、具体的な個別の基本設計ノウハウについて順番に説明していくことにしよう。要素や属性には、分かりやすい名前を付けよう。分かりにくい名前、紛らわしい名前、あいまいな名前、まして仕様書を引かねば意味が理解できない番号などを名前に使うのはやめよう。

 例えば、以下の例の「番号」要素は、直感的に何を意図しているのか分かりにくい事例である。

<個人情報>
<番号>0312345678</番号>
<FAX番号>0312345679</FAX番号>
<社員番号>03458759083</社員番号>
<年金番号>03904242730</年金番号>
</個人情報>

 このXML断片には、いくつもの番号が含まれている。それらの多くは「FAX番号」「社員番号」「年金番号」と意味を推測可能な名前が付けられている。しかし、「番号」要素だけは、それが何を意図しているのか分かりにくい。もし、これが電話番号を意図しているなら「電話番号」という名前を使うべきであるし、別の番号を意図しているのならその意図が分かるような名前にすべきである。

 このような名前の使い方は当たり前のことのように思えるかもしれないが、ほかの技術と比較して、XMLデータベースには、分かりやすい名前を付ける大きな意義がある。なぜなら、XMLデータベースの内容はたやすくテキスト形式のXML文書に変換できるからである。データベースのメンテナンスなどの際に、データベースの一部または全体をテキスト形式でエクスポートし、それをテキストエディタなどで調べることができるし、XML文書を扱うさまざまな便利なツールを活用することができる。その際、要素や属性の名前が、そのものの意味や役割を示す適切な名前になっていると、XML文書を読むための労力が飛躍的に少なくて済む。

 また、クエリの結果などにも、要素名や属性名がそのまま出現することがあり、クエリの結果を調べる際にも分かりやすい名前は有益である。

 しかし、ここで勘違いしてはならないことは、どれほど分かりやすい名前を付けるとしても、それは意味を定義したことにならないことである。分かりやすい名前は意味を直感的に推測しやすくするだけで、意味を定義しているわけではない。その点で、XMLはタグ名によって意味を定義できるという解釈はまったくの誤解である。従って、完ぺきな名前を付けるために過剰な努力を払うことは無駄であるといえる。つまり、名前の適切さは、20%の労力で可能な80%の完成度を目指すことが適切であり、それを超えた努力は労力に比して得るものが極度に少ない可能性がある。

一貫した名前

 要素や属性の名前には、一貫性のある名前を与えることが望ましい。例えば、以下は一貫性のない名前を使用した例である。

<個人情報>
<電話連絡先>0312345678</電話連絡先>
<FAX番号>0312345679</FAX番号>
</個人情報>

 ここには、2つの電話番号が記入されている。しかし、1つは「連絡先」と表現され、もう1つは「番号」と表現されている。これは、「電話番号」と「FAX番号」という名前のペアに置き換えるか、あるいは「電話連絡先」と「FAX連絡先」という名前のペアに置き換えると一貫性が得られるだろう。

 もちろん、これも常識的な名前付けのルールであり、XMLデータベース独自の話とはいいがたい面がある。それにもかかわらず、あえてこれを書いたのは、これに例外的な状況が発生し得るからである。このルールは、この後で説明する「既存ボキャブラリの活用」によって上書きされ得るのである。

関連する情報をグループ化する

 関連する情報はグループ化する。例えば、人の名前と性別を列挙した以下のような名簿があったとしよう。

<名簿>
<名前>ツワブキサンシロー</名前>
<性別>男性</性別>
<名前>フジヤマミドリ</名前>
<性別>女性</性別>
<名前>ピート・リチャードソン</名前>
<性別>男性</性別>
</名簿>

 このようなXML断片は、そのままでも役に立つ。XMLは順番のあるデータ記述手法であり、ある名前の人物の性別を知るには、名前要素の次に記述された性別要素を読み取るというルールは問題なく適用できる。例えば「フジヤマミドリ」の性別を調べる場合、値が「フジヤマミドリ」である「名前」要素を探したうえで、その要素の次の「性別」要素の値を取得するというクエリを記述することは容易である。

 しかし、このような記述方法に問題がないわけではない。例えば、新しい情報を挿入する際に、名前と性別のペアの中間にほかの人物の情報を挿入してしまう誤りが発生しないとはいえない。このような挿入によって順番の関係が崩壊すると、もちろん正しい結果を得ることができなくなる。

 また、情報の種類が名前と性別のほかにも多数増えた場合、1人分の情報だけを抜き出すときに、どこからどこまでを取り出せばよいのかも分かりにくくなる。

 このような問題を回避するために、関連する情報は要素によってグループ化するとよい。例えば、以下のように1人単位の情報をまとめる「個人」要素を導入する。

<名簿>
 <個人>
  <名前>ツワブキサンシロー</名前>
  <性別>男性</性別>
 </個人>
 <個人>
  <名前>フジヤマミドリ</名前>
  <性別>女性</性別>
 </個人>
 <個人>
  <名前>ピート・リチャードソン</名前>
  <性別>男性</性別>
 </個人>
</名簿>

 このようにすれば、名簿要素の子要素として個人要素を追加する作業を誤ったとしても、それによって名前と性別が泣き別れになることはあり得ず、安全である。また、1人分の情報を抜き出す場合には、その情報が多くても少なくても、「個人」要素を単位に取り出せばよくなり、処理が単純になる。パッと見て誤解するリスクも少なくなる。

 このようなグループ化は、繰り返し行うことも可能である。つまり、グループ化したデータ間に強い関連があるならば、グループのグループ化を行う要素を導入することも可である。(次ページへ続く)

3/4

 Index
XMLデータベース開発方法論(4)
20-80ルールでざっくりXMLデータベース設計
  Page 1
・前回のおさらいと今回のテーマ
・XMLとは何を示すか
  Page 2
・XMLデータモデルとは何か
・XMLデータモデルの特徴
・XMLデータベース設計における20-80ルール
Page 3
・分かりやすい要素名、属性名
・一貫した名前
・関連する情報をグループ化する
  Page 4
・重複の除去
・分割と階層化を行う


XMLデータベース開発論


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

注目のテーマ

Database Expert 記事ランキング

本日月間