図書系職員のための アプリケーション開発講習会 本日の演目 図書系職員のための アプリケーション開発講習会
本日の演目 本日の狂言 絵合わせによるプログラムの見切り(プログラムにおけるスモールワールド) 本日の見栄きり XMLチャレンジ 本日の大喜利 題目に答えて、バーチャル座布団をGET
絵合わせによる プログラムの見切り プログラムのある機能を修正したいが、どこを直せばよいかわからない 本日の狂言 絵合わせによる プログラムの見切り プログラムのある機能を修正したいが、どこを直せばよいかわからない プログラムを一部修正したときの影響範囲を知りたい このようなときに、使えるのが「絵合わせ」 前田命名)によるプログラムの解析法です。
いっけん、複雑な関係でも「また呼び」の数は システムにおけるスモールワールド データ ベースA モジュール A サブルー チンC サブルー チンA ファイルA サブルー チンB いっけん、複雑な関係でも「また呼び」の数は そう多くない(はず)
処理の規定元を 「絵合わせ」で調べる プログラム中の名称(シンボル)からあたりをつける ファイル名 コメントの記述 サブルーチン名 変数名 同じシンボル(変数名など)を探す(同じシンボルでプログラム間の関連付けを行うことがある) サブルーチン呼び出しをチェックする 呼び出し先の仕様を変数の順序をチェック 呼び出し元の変数名を上記の順番を元に確認 以下、必要なだけ繰り返す 時間をかければ解ける絵合わせパズルになっていることが多い (できない場合は、プログラムを書いた人のセンスに疑問が…)
XMLチャレンジ XMLを扱うといったときには、1)XMLの生成、2)XMLの解析の2つがあります。 本日の見栄きり XMLを扱うといったときには、1)XMLの生成、2)XMLの解析の2つがあります。 ここでは、XMLの解析に絞ってチャレンジをしてみましょう。
XMLの解析に使うプログラム言語として今回は次の2つを例に用意しました。 Perl XML::Simple ほか、XML解析モジュール多数 JavaScript
XMLの枝狩り ここで切ると配列 ここで切ると ハッシュ ここで切ると普通の変数(スカラー)
単純なハッシュで表現可能なことろがポイント 複雑なデータを作らない方法 繰り返を有限回にする 単純なハッシュで表現可能なことろがポイント
Perl (XML::SimpleとData::Dumper) 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> 指定方式がさして変わらないことに注目!
題目に答えてバーチャル座布団をGET(1) 正解は1です。常に変数の頭につく記号に 着目しましょう 本日の大喜切 題目に答えてバーチャル座布団をGET(1) 以下の変数のうち、%aがPerlのハッシュとして扱われるものは、どれでしょう %a = %{ $ref->{‘aa’} }; %a = ${ $ref->{‘bb’} }[“test”]; %a = $ref->{‘cc’};
題目に答えてバーチャル座布団をGET(2) 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.
題目に答えてバーチャル座布団をGET(3) じつは、”print”の前に全角スペースが入って いました。画面に見えない文字には、要注意です 題目に答えてバーチャル座布団をGET(3) 次のプログラムを実行したら、エラーが発生しました。原因がわかりますか print “こんにちは”; Unrecognized character \x81 at try2.pl line 1.