プログラマ ずんべ の日記

zunbe

プログラマ ずんべ の日記
プログラマ ずんべ の日記

探し物は見つかりましたか? サイト内検索を試してください。

ブログを試す:Doblog ブログを試す:Doblog 衆議院選挙 衆議院選挙

2005/09/12

【若いモンの発想はわからん】(その13) XMLはシーケンシャルデータ?

今日も、こんな事があった。

社員に、XMLを解析するプログラムを書かせた。
たとえば、こんなXMLの解析だ。

-----
<data1>
  <title>アイウエオ</title>
  <crdate>2005/09/12 01:02:03</crdate>
  <item>あ</item>
  <item>い</item>
  <item>う</item>
  <item>え</item>
  <item>お</item>
</data1>
-----

データ中にはタイトル(title)と作成日付(crdate)があり、残り(item)は関連情報。関連情報の数は決まっておらず、いくつでも登録される。

このXMLを解析するのに、社員が書いたコードはこうだ(必要部分以外省略)。

-----
%data1 = ();
$item = 0;
foreach $line (XMLデータ)
{
  # タグを解析
  # $name = タグの名称
  # $val = タグの値

  # 要素は item に達した?
  if ($name eq 'item')
  {
    $item = 1;
  }

  if ($item == 0)
  {
    # ヘッダ
    $data1{$name} = $val;
  }
  else
  {
    # データ本体
    push(@{$data1{$name}}, $val);
  }
}
-----

これではダメである。
何がダメなのか、わかるだろうか。
このコードは、行を順に処理していくが、タグ「item」が現れるまでをヘッダとして処理し、タグ「item」が現れたらそれ以降が関連情報だと決めてかかっている。
つまり、このコードでは、「ヘッダとデータ本体を、ある特定の行で分離する」と考えており、この時点で、XMLにおけるデータ構造の生成の意味を失っている。
単に上から順番に走査してデータを投入するなら、XMLである必要はない。CSVで十分だ。

データの記述順序に依存するイレギュラーなケースもないとは言えないが、常識的な考え方として、要素の順番がどのような順番であっても、処理できるようになっているべきである。

データの解析とは、ただ書式を分解すればよいというものではない。
そのデータのデータ構造が、「どのような考え方で」構成されているものであるのか理解してコードを書かなければ、そのデータを正しく解析しているとは言えないのである。



このエピソードはいかがでしたか?

投稿者 zunbe : 2005/09/12 00:39:25


コメント

XMLの構文解析ですか・・・
まぢめにやろうとすると、スタックに積んだりしていかないといけないですよね・・・。

C# だと XPath が使えるので、とても楽ですが・・・。

決められた構造の XML を解析するなら、正規表現使えば抽出できますよね。(可変個のやつも)

投稿者 GOTTi : 2005/09/12 09:53:39

ちなみに、例として出ているプログラムは、意味をわかりやすくするために perl でエッセンスをだけ書いたのであって、実際のプログラムは XML::Parser モジュールを使用して書かれています。

問題としているのは、「XMLを解析する」という事ではなく、「XMLのデータ構造の考え方を知らない事」です。
既存のモジュールを使えば、XMLを解析する事ぐらい、わけもありません。そんな事は誰にでもできます。
モジュール「お任せ」でプログラムを書いたのでは、いっつまでたっても薄っぺらいまま、技術力なんかつきません。

テレビのスイッチを入れれば映像が見られます。
そんな事は誰にでもできます。
しかし、それではテレビは作れません。

投稿者 ずんべ : 2005/09/12 10:59:52

 XML に関してだけ言えば、僕は、モジュールを使ってでも「正しく」読み書きできる程度のスキル?があればよいと思っています。

 ただ、XML に限らず、何らかのデータを扱う際の「データ構造」については、その構造を正しく「認識・理解」できるだけのスキルが必要で、この社員さんには、それが欠落しているんですよね・・・。(ってことをずんべ師匠は言いたいんですよね)

 でも、このスキルって、結構高度なものだと思います。
 いや、この業界で食べていこうとしているなら、それくらい身に着けていて、理解していて欲しいですが・・・。

 僕がH●Lの学生バイト君をやとっていたときは、一人、データベースの設計とかにすごく興味のあるヤツがいまして、その子とは、学校の課題のデータベースの設計などでいろいろ議論してました。そういうことしないと、データ構造に対する理解や考え方って身について行かないですよね。


 

 

投稿者 GOTTi : 2005/09/12 13:28:20

そういう事ですね。

XMLに限らず、最終的にモジュールを使う事は何ら問題はないと思います。
ずんべだって、モジュールがあるのに、わざわざそれと同じ機能のものを自分で作るような事はしません。

しかし、めくらで使うのと、理解して使うのは、ぜんぜん違います。
できあがるものの厚みも、将来に向けての厚みも、ぜんぜん違うものになります。

「考え方」を理解すること、更に言えば「考え方」を整理することは、プログラミングにおいて、非常に重要な事だと思うのです。

投稿者 ずんべ : 2005/09/12 14:11:14


コメントしてください






保存しますか?


スパム対策:
この入力フィールドに「80」と入力してください。


プログラマ ずんべ の日記:ずばヒット アマゾン