データベース・アプリケーション生成プログラムでは、コード生成テンプレート・システムとして JET2 を使用します。 このトピックでは、JET2 テンプレートおよび変換出力の例を示します。
テンプレート・システムとしての JET2 は、機能上 JSP ページの書き込みに似ています。これは、必要な場合、タグ・ライブラリーと Java™ スニペットをサポートします。また、テンプレートが EMF モデルの仕様に従って作成された場合、JET2 は その特定 EMF モデルを入力として直接使用することができます。
http://www.ibm.com/developerworks/opensource/library/os-ecl-jet/
<?xml version="1.0" encoding="UTF-8"?>
<dataAccess:Employee xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:dataAccess="http:///dataAccess.ecore" name="Bob Smith" address="123 Main St" employeeNumber="12345">
<customers name="Sam Brown" address="55 Bank St">
<orders orderNumber="101" date="2005-12-15T00:00:00.000-0500" quantity="25"/>
<orders orderNumber="13" date="2005-11-15T00:00:00.000-0500" quantity="55"/>
</customers>
<customers name="Tim Safari" address="18 Elephant Rd">
<orders orderNumber="77" date="2005-11-20T00:00:00.000-0500" quantity="3"/>
</customers>
</dataAccess:Employee>
<%@taglib prefix="ws" id="org.eclipse.emf.jet2.workspaceTags" %> <%-- run a template that lists employees and creates a file list.txt --%> <ws:file template="templates/listEmployees.jet" path="list.txt"/>
<%@taglib prefix="c" id="org.eclipse.emf.jet2.controlTags" %>
<%-- /selects the document root, which in this case is the emf Resource object --%>
<%-- /selects the contents of the Resource.getContents() --%>
<c:iterate select="/contents" var="employee">
Employee: <c:get select="$employee/@name"/> (<c:get select="$employee/@employeeNumber"/>), <c:get select="$employee/@address"/>
<c:iterate select="$employee/customers" var="customer">
Customer: <c:get select="$customer/@name"/>, <c:get select="$customer/@address"/>
<c:iterate select="$customer/orders" var="order">
Order: <c:get select="$order/@orderNumber"/>, <c:get select="$order/@date"/>, qty: <c:get select="$order/@quantity"/>
</c:iterate>
</c:iterate>
</c:iterate>
Orders for 'Sam Brown'
<c:iterate select="/contents/customers [@name='Sam Brown']/orders" var="order">
Order: <c:get select="$order/@orderNumber"/>, <c:get select="$order/@date"/>, qty: <c:get select="$order/@quantity"/>
</c:iterate>
XPath 式を評価し (何らかの結果セットを取得)、 結果セット内のエレメントごとにタグ内容の時間を処理します。
XPath 式を評価し、結果をストリングに変換してテンプレート出力に書き込みます。
XPath 式が評価される場合、最初の / は EMF Resource オブジェクトにマップされます。このリソースのルート・エレメントにアクセスするには、子である contents (/contents) を参照します。 これは、Resource.getContents() の呼び出しと同等です。 例えば、タグ <c:iterate select="/contents" var="employee"> は、Resource.getContents() の結果セットを繰り返します。繰り返すたびに、結果セット内の現行エレメントが employee 変数によって示されます。
最初の Resource オブジェクトの後は、<c:iterate select="$employee/customers" var="customer"> タグになります。
<c:get select="$employee/@name"/>これにより、Employee での name 属性の値が戻されます (Employee.getName())。
<c:iterate select="/contents/customers [@name='Sam Brown']/orders" var="order">このコードは、name 属性が Sam Brown に等しい顧客を検索してその注文を検出し、 この処理を反復します。
Employee: Bob Smith (12345), 123 Main St
Customer: Sam Brown, 55 Bank St
Order: 101, Thu Dec 15 00:00:00 EST 2005, qty: 25
Order: 13, Tue Nov 15 00:00:00 EST 2005, qty: 55
Customer: Tim Safari, 18 Elephant Rd
Order: 77, Sun Nov 20 00:00:00 EST 2005, qty: 3
Orders for 'Sam Brown'
Order: 101, Thu Dec 15 00:00:00 EST 2005, qty: 25
Order: 13, Tue Nov 15 00:00:00 EST 2005, qty: 55
詳しくは、JET チュートリアルを参照してください。