目次 前へ 次へ

10.5 サンプル アプリケーション:DB schemaを描画する

最後の例として、キャンバス タイプのグラフを DDDA 構造の DB Schema 生成でどう使用するかについて簡単に述べます。

"utils/misc/imgdbschema.php" ライブラリの PHP ファイルは、より簡単にテーブル スキーマを描画するユーティリティ クラスを含む配置にあります。2 つの基本クラス、ImgDBTable クラスとImgDBSchema クラスがあります。最初のクラスは、1 つのテーブルを描くイメージの描き方を理解します。2 つ目のクラスは、完全な DB スキーマを描画する DB から、全ての関連情報を自動的に抽出するのに信頼性があります。

先に進む前に、この例に似ているものを説明します。



図 194: DB スキーマを半自動的に生成する imgdbschema.php ライブラリと一緒にキャンバス グラフ スタイルを使用する例 [ソース]

先に進む前に、DDDA 構造の 'jpdb.php' ファイルで利用可能なアブストラクション レイヤーの後に、DB アブストラクション レイヤー モデルを通して、アクセス可能な DB を仮定する ImgDBSchema に注意するべきです。このアブストラクション レイヤーは、下部で MySQL データベースを仮定します。特別なアブストラクション レイヤーの依存状態は、一般的なキャンバス ツール ファイルにこれらのクラスがインクルードされていない理由を意味しています。

第二に注意すべきことは、ライブラリーは完璧な自動的なレイアウトエンジンを含んでいるのではなく、むしろ他に何も指定されていないのなら、ただ長方形のマス目にテーブルを入れるとても簡単な自動的なシステムを含んでいます。完全なグラフ レイアウト エンジンは、この状況での書き込みを非常に簡単にします。これはとても難しい最適化の問題でもあり、今までのところ、この問題に挑んだどんなプログラムも手動の調停無しで満足できるレイアウトを達成できていません。

以上のグラフをもたらすためのコードでの重要なラインです。

$tblposadj=array($tlo,0,$tblwidth+$tlo+2,0,2*$tblwidth+$tlo+4,0,-1,16,-1,16);
$dbschema = new ImgDBSchema("jpgraph_doc","FormatTblName","FormatFldName");
$dbschema->SetMargin($leftm,$topm);
$dbschema->SetTableWidth($tblwidth);
$dbschema->Stroke($this->img,$this->iscale,$tblposadj);

ファイルの中でのコードの休止は、ただキャンバスをセットアップするためで、いくつかのテーブルに分類するためのデコボコの長方形を加えて、このイメージがもたらした日時のあるフッターに作ります。

第一に、ラインが'jpgraph_doc'というデータベースのためのイメージを描くように、それに要求する新しいImgDBSChemeレイアウトエンジンを例示します。 下記の2 つの引数は、ヘッダーやテーブルのそれぞれのフィールドのテキストをフォーマットするため2 つのコールバック ファンクションを指定します。

第二に、ラインがテーブルの描画がスタートされるべき左上余白を指示します。

第三に、ラインが一つのテーブルの幅を指示します。最後に、ラインはエンジンをはじめ、ジャンバスのデータベースでの全てのテーブルに描写します。この最後の引数は、いくつかの前の意味で要求します。これは、各々のテーブルが配置されるべきである左上端からの(x,y)の補正です。もし値があるのならば、−1はデフォルト値が使用されるべきであることを示します。もしこの配列が指定されたら、テーブルはラインによって簡単に配置されるでしょう。

このDB schemaの例を描くための 完全なソースコードは、以下に示されます。

(File: dbschemaex1.php)
<?php
/*=======================================================================
// ファイル: DBSCHEMAEX1.PHP
// 説明: DDA 構造の DB スキーマを描画する
// 作成日: 2002-08-25
// 著者: Johan Persson (johanp@aditus.nu)
// バージョン: $Id: dbschemaex1.php,v 1.1 2002/08/27 20:08:57 aditus Exp $
//
// ライセンス: // このコードは QPL のもとリリースされました
// Copyright (C) 2001,2002 Johan Persson
// 注意: 実際のテーブルの描画は半自動的ですが、簡単にそれぞれのテーブルの
// 位置を調整できます
//
//========================================================================
*/
include "../jpgraph.php";
include
"../jpgraph_canvas.php";
include
"../jpgraph_canvtools.php";
include
"../utils/misc/imgdbschema.inc";
include
"../utils/jpdocgen/jpdb.php";


// テーブルのヘッダ名をフォーマットするグローバルコールバック
function FormatTblName($aName) {
// 特定のリファレンスを一般の '<project>' を含む 'JpGraph' プロジェクト
// に置き換えたい場合
return str_replace('JpGraph','<project>', $aName);
}

// テーブルの各フィールド名をフォーマットするグローバルコールバック
function FormatFldName($aName,$aTable) {
return
$aName;
}


class
Driver {

var
$ig, $img, $iscale, $ishape;
var
$iymax,$ixmax;
var
$iwidth,$iheight;

function
Driver() {

// イメージサイズと座標のグリッドスペースを定義します
$this->iwidth = 600;
$this->iheight= 750;
$this->iymax = 50;
$this->ixmax = 55;

// 基本キャンバスを設定する
$this->ig = new CanvasGraph($this->iwidth,$this->iheight,'auto');
$this->img = $this->ig->img;

// 使用するスケールを定義する
$this->iscale = new CanvasScale($this->ig);
$this->iscale->Set(0,$this->ixmax,0,$this->iymax);
$this->ishape = new Shape($this->ig,$this->iscale);

// A small frame around the canvas
$this->ig->SetMargin(2,3,2,3);
$this->ig->SetMarginColor("teal");
$this->ig->InitFrame();

}

function
Run() {

$leftm=1.5; // 左の余白(テーブル キーマ用)
$topm=5; // トップの余白(テーブル キーマ用)
$tblwidth=15; // 個々のテーブル幅
$tlo=1; // トップ ラインをオフセットする

// プロジェクト指定のテーブルに背景カラーを追加する
$this->ishape->IndentedRectangle($leftm,$topm-1,3*$tblwidth+$tlo+6,45,
$tlo+2*$tblwidth+2,30,CORNER_BOTTOMLEFT,
'lightblue');

// テーブルをストロークする(x、y、オフセット、=-1 の場合、自動配置を使用する)
$tblposadj=array($tlo,0,$tblwidth+$tlo+2,0,2*$tblwidth+$tlo+4,
0,-1,16,-1,16);
$dbschema = new ImgDBSchema('jpgraph_doc','FormatTblName','FormatFldName');
$dbschema->SetMargin($leftm,$topm);
$dbschema->SetTableWidth($tblwidth);
$dbschema->Stroke($this->img,$this->iscale,$tblposadj);

$tt = new CanvasRectangleText();
$tt->SetFillColor('');
$tt->SetColor('');
$tt->SetFontColor('navy');

// 説明の追加
$tt->SetFont(FF_ARIAL,FS_NORMAL,12);
$tt->Set('Project specific tables',$tblwidth+$leftm+3,16,15);
$tt->Stroke($this->img,$this->iscale);

// タイトルの追加
$tt->SetColor('');
$tt->SetFont(FF_VERDANA,FS_BOLD,26);
$tt->Set('DDDA - DB Schema',9,0.5,30);
$tt->Stroke($this->img,$this->iscale);

// バージョンと日付の追加
$tt->SetFillColor('yellow');
$tt->SetFont(FF_FONT1,FS_NORMAL,10);
$tt->Set("Generated: ".date("ymd H:i",time()),1,$this->iymax*0.96,15);
$tt->Stroke($this->img,$this->iscale);

$this->ig->Stroke();
}
}

$driver = new Driver();
$driver->Run();

?>


目次 前へ 次へ