「本日の演目」(第4回:平成19年12月)

本日の演目
図書系職員のための
アプリケーション開発講習会
本日の演目
本日の狂言
絵合わせによるプログラムの見切り
(プログラムにおけるスモールワールド)
本日の見栄きり
XMLチャレンジ
本日の大喜利
題目に答えて、バーチャル座布団を
GET
本
日
の
狂
言
絵合わせによる
プログラムの見切り
プログラムのある機能を修正したいが、
どこを直せばよいかわからない
プログラムを一部修正したときの影響
範囲を知りたい
このようなときに、使えるのが「絵合わせ」
前田命名)によるプログラムの解析法です。
システムにおけるスモールワールド
モジュール
A
データ
ベースA
サブルー
チンC
ファイルA
サブルー
チンA
サブルー
チンB
いっけん、複雑な関係でも「また呼び」の数は
そう多くない(はず)
処理の規定元を
「絵合わせ」で調べる
 プログラム中の名称(シンボル)からあたりをつける
 ファイル名
 コメントの記述
 サブルーチン名
 変数名
 同じシンボル(変数名など)を探す(同じシンボルで
プログラム間の関連付けを行うことがある)
 サブルーチン呼び出しをチェックする
 呼び出し先の仕様を変数の順序をチェック
 呼び出し元の変数名を上記の順番を元に確認
 以下、必要なだけ繰り返す
時間をかければ解ける絵合わせパズルになっていることが多い
(できない場合は、プログラムを書いた人のセンスに疑問が…)
本
日
の
見
栄
き
り
XMLチャレンジ
XMLを扱うといったときには、1)
XMLの生成、2)XMLの解析の2つが
あります。
ここでは、XMLの解析に絞ってチャレ
ンジをしてみましょう。
XMLチャレンジ
~環境編~
XMLの解析に使うプログラム言語とし
て今回は次の2つを例に用意しました。
Perl
XML::Simple
ほか、XML解析モジュール多数
JavaScript
XMLの枝狩り
ここで切ると
配列
トップレベル
著者
にしむらさん
ここで切ると
たぐちさん
ハッシュ
まえださん
書誌:mbcを極める
出版者:
基盤出版
ここで切ると
普通の変数
(スカラー)
複雑なデータを作らない方法
繰り返を有限
回にする
トップレベル
著者1:
にしむらさん
著者2: たぐちさん
著者3: まえださん
書誌: mbcを極める
出版者: 基盤出版
単純なハッシュで表現可能なことろがポイント
XMLチャレンジ
~XMLの構造解析~
Perl (XML::SimpleとData::Dumper)
use XML::Simple;
use Data::Dumper;
$ref = XMLin('./xxx.xml');
print Dumper($ref);
JavaScript
DOMインスペクタ(FireFoxのカスタムイ
ンストールで使用可能に)を使うと、
JavaScript形式でXMLデータを表示
XMLをDOMというモデルで解析します
XMLチャレンジ
~DOMモデルと複雑なデータ~
 目録データなども、フィールドの繰り返しなど、か
なり複雑なデータ構造を持っています。たとえば、
「注記」(Note)を考えてみましょう。
 書誌データを Perlのハッシュ%data に入れたとしま
す。タイトルは $data{“title”}との表記が可能ですが、
注記を$data{“Note”}としたときに配列データを得ら
れなければ困りますよね?
 そういうときには、先頭に @ をつけて配列として強
引に認識させるのです。@{ $data{‘Note’} } といった
形です。
 XMLを解析すると木構造になりますが、その各分岐
(枝)においても、ある要素が配列かハッシュか、
状況によって異なります。その際は、うまく見極め
て解析プログラムを組む必要があります。
XMLチャレンジ
~DOMモデル中の要素を指定~
Perl (XML::Simpleを使用)
use XML::Simple;
$ref = XMLin('./xxx.xml');
Print $ref->{'ResultData'}{'InfoRec'}[0]{'Source'}, "\n";
JavaScript (ikl-parsexml.js を使用)
<script type="text/javascript" src="jkl-parsexml.js"></script>
<script><!-var url = "list2.xml";
var http = new JKL.ParseXML( url );
var data = http.parse();
document.write(
data["SearchCore"]["ResultData"]["InfoRec"][0]["Source"] );
// --></script>
指定方式がさして変わらないことに注目!
本
日
の
大
喜
切
正解は1です。常に変数の頭につく記号に
着目しましょう
題目に答えてバーチャル座布団をGET(1)
 以下の変数のうち、%aがPerlのハッ
シュとして扱われるものは、どれで
しょう
1. %a = %{ $ref->{‘aa’} };
2. %a = ${ $ref->{‘bb’} }[“test”];
3. %a = $ref->{‘cc’};
print $line;の後の } がありません。よくあるトラブルなので、
落ち着いてエラーメッセージを読みましょう!
題目に答えてバーチャル座布団をGET(2)
 次のプログラムを実行したら、エラー
が発生しました。原因がわかりますか
while ($line = <>) {
if ($line =~ /test/) {
print $line;
}
Missing right curly or square bracket
at try2.pl line 4, at end of line
syntax error at try2.pl line 4, at EOF
Execution of try2.pl aborted due to
compilation errors.
じつは、”print”の前に全角スペースが入って
いました。画面に見えない文字には、要注意です
題目に答えてバーチャル座布団をGET(3)
 次のプログラムを実行したら、エラー
が発生しました。原因がわかりますか
print “こんにちは”;
Unrecognized character \x81 at try2.pl line 1.