The short answer is: I didn't want to be tied to Perl; AppML can generate code in any programming language. (Although Perl is the first one.)
Here's AppML output:
nferraz@debian:~/appml$ ./appml.pl xml/sample.xml
meta/db/create.tmpl -> sample/db/create.sql
meta/db/view.tmpl -> sample/db/view.sql
meta/db/stats.tmpl -> sample/db/stats.sql
meta/db/drop.tmpl -> sample/db/drop.sql
meta/pl/base.tmpl -> sample/lib/sample.pm
meta/pl/base_cdbi.tmpl -> sample/lib/sample/cdbi.pm
meta/pl/cdbi.tmpl -> sample/lib/sample/cdbi/contact.pm
meta/templates/header.tmpl -> sample/templates/inc/header.tt2
meta/templates/menu.tmpl -> sample/templates/inc/menu.tt2
meta/templates/stats.tmpl -> sample/templates/inc/stats.tt2
meta/templates/footer.tmpl -> sample/templates/inc/footer.tt2
meta/templates/frm.tmpl -> sample/templates/contact/frm_contact.tt2
meta/templates/detail.tmpl -> sample/templates/contact/detail_contact.
+tt2
meta/templates/list.tmpl -> sample/templates/contact/list_contact.tt2
meta/templates/tbl.tmpl -> sample/templates/contact/tbl_contact.tt2
meta/doc/install.tmpl -> sample/doc/INSTALL
meta/doc/plan.tmpl -> sample/doc/sample.html
meta/doc/dot.tmpl -> sample/doc/sample.dot
meta/data/strings.tmpl -> sample/data/sample.txt
As you can see, the source metafiles are divided in directories:
- meta/db
- meta/pl
- meta/templates
- meta/doc
- meta/data
These metafiles are nothing more than text templates, used to generate code; if I wanted to generate Java code, I would probably create a new directory to store Java metafiles.