SQL::Translator 一个以SQL为中心的转换工具,可以实现SQL<->Schema, SQL<->Database, SQL<->ER等各种转换。
CPAN文档:http://search.cpan.org/~kclark/SQL-Translator-0.07/lib/SQL/Translator.pm
SQL::Translator包的方法列表:
* add_drop_table
* no_comments
* producer
* parser
* filters
* show_warnings
* translate
* filename, data
* schema
* trace
* validate
* version
producer 将SQL::Translator的中间对象(schema)输出为各种不同的目的对象。
传入一个参数。$tr 为SQL::Translator对象。
sub produce {
my $tr = shift;
my $schema = $tr->schema; #取得schema对象。然后解析输出。schema的数据由parser构建.
my $output = '';
for my $t ( $schema->get_tables ) {
$output .= join('', "Table = ", $t->name, " ");
}
return $output;
}
parser 将输入数据,转换为SQL::Translator. 在parser调用时传入两个参数。
$tr 一个SQL::Translator 实例.
$data 要解析的数据,传入方式为: $t->translate( $input ) 注,$t为SQL::Translator对象。
sub parser {
my ( $tr, $data ) = @_;
my $schema = $tr->schema; #从$tr取得schema对象,让后把解析后的数据,填入schema对象等待producer转换。

for my $line ( split( /n/, $data ) ) {
my ( $table_name, @fields ) = split( /:/, $line );
my $table = $schema->add_table( name => $table_name )
or die $schema->error;
for ( @fields ) {
my ( $f_name, $type, $size ) = split;
$table->add_field(
name => $f_name,
data_type => $type,
size => $size,
) or die $table->error;
}
}

return 1;
}
SQL::Translator::Schema 中间对象类。
http://search.cpan.org/~kclark/SQL-Translator-0.07/lib/SQL/Translator/Schema.pm
使用SQL::Translator实现xml配置文件到数据模型的转换。
1.可以根据业务进行建模分析数据模型以xml方式保存,
2.将xml文件转换为DBIx::Class的schema文件。*
3.将xml文件转换为sql script。
xml如下:
profile.xml
<node table="profile">
<string name="name" />
<string name="password" />
</node>

password.xml
<node table="profile">
<string name="password" />
</node>
问题:怎么实现xml->到schema的转换。因为输入后的xml将转换为中间对象(schema)。在输入的时候只能以中间对象(schema)为基础,不能记录之前的xml文件名。这样将不能实现同一个表在多个xml配置使用的情况。
关于SQL::Translator的设计。
1. 可以用于一些数据转换程序的设计。设计核心是定义一个完善的中间对象。中间对象的设计的好坏,直接影响到程序的扩展性。一方提供一个将源数据转换到中间对象,另一方提供一个接口将数中间对象转化为目的数据。
2.由于引入了中间对象,以结构体组织数据,比直接转换更简单。
CPAN文档:http://search.cpan.org/~kclark/SQL-Translator-0.07/lib/SQL/Translator.pm













producer 将SQL::Translator的中间对象(schema)输出为各种不同的目的对象。
传入一个参数。$tr 为SQL::Translator对象。









parser 将输入数据,转换为SQL::Translator. 在parser调用时传入两个参数。
$tr 一个SQL::Translator 实例.
$data 要解析的数据,传入方式为: $t->translate( $input ) 注,$t为SQL::Translator对象。




















SQL::Translator::Schema 中间对象类。
http://search.cpan.org/~kclark/SQL-Translator-0.07/lib/SQL/Translator/Schema.pm
使用SQL::Translator实现xml配置文件到数据模型的转换。
1.可以根据业务进行建模分析数据模型以xml方式保存,
2.将xml文件转换为DBIx::Class的schema文件。*
3.将xml文件转换为sql script。
xml如下:











问题:怎么实现xml->到schema的转换。因为输入后的xml将转换为中间对象(schema)。在输入的时候只能以中间对象(schema)为基础,不能记录之前的xml文件名。这样将不能实现同一个表在多个xml配置使用的情况。
关于SQL::Translator的设计。
1. 可以用于一些数据转换程序的设计。设计核心是定义一个完善的中间对象。中间对象的设计的好坏,直接影响到程序的扩展性。一方提供一个将源数据转换到中间对象,另一方提供一个接口将数中间对象转化为目的数据。
2.由于引入了中间对象,以结构体组织数据,比直接转换更简单。