id:makotan さんからコンポーネントの再利用について要望をいただいたので、まずは通常の再利用について考えてみます。

再利用可能なコントロールを作る

たとえば、OK ボタンと Cancel ボタンを並べたようなコンポーネントを定義しておき、どこからでも利用できるようにしておきたいシチュエーションで考えてみましょう。

以下のように、template 要素直下で controlDef 要素を使って、再利用したいXMLを記述します。

<template>
  <controlDef name="okCancelButton">
    <!-- パラメータの定義 -->
    <param name="okLabel">OK</param>
    <param name="cancelLabel">Cancel</param>
    
    <!-- 本体の定義 -->
    <composite type="box" layout="fill" layoutParam="type=HORIZONTAL; spacing=5">
      <layoutData name="horizontalAlignment" value="FILL" />
      <control type="button" id="okButton">
        <property name="text" value="#{okLabel}" />
      </control>
      <control type="button" id="cancelButton">
        <property name="text" value="#{cancelLabel}" />
      </control>
    </composite>
  </controlDef>
</tamplate>

ボタンのラベルを変えたいなどといった場合は、こんな感じでパラメータを定義しておき・・・("OK"はデフォルト値)

    <param name="okLabel">OK</param>

#{パラメータ名} という形式で参照できるようにしておきます。

      <control type="button" id="okButton">
        <property name="text" value="#{okLabel}" />
      </control>

利用する側の記述方法はいたってシンプルで、以下のように通常のコントロールと同様に記述できます。

<control type="okCancelButton">
  <property name="okLabel" value="実行" />
  <property name="cancelLabel" value="キャンセル" />
</control>

再利用可能なコンポジットを作る

もうひとつ、子要素を持つようなコンポジットを再利用する方法を考えます。

たとえば、すべての子要素に FILL レイアウトを指定して、パラメータで指定したalignment を適用するようなコンポジットを考えてみます。

<template>
  <compositeDef name="alignBox">
    <!-- パラメータの定義 -->
    <param name="alignment">FILL</param>
    
    <!-- 本体の定義 -->
    <composite type="box" layout="fill" layoutParam="type=HORIZONTAL; spacing=5">
      <layoutData name="horizontalAlignment" value="#{alignment}" />
      #{elements}
    </composite>
  </compositeDef>
</tamplate>

先ほどと同じように template 要素直下で定義します。今度は compositeDef 要素を使って定義しますが、それ以外は先ほどと同じです。

ポイントは、子要素を埋め込みたい部分に #{elements} を指定することです。

使い方はこんな感じになります。

<composite type="alignBox">
  <property name="alignment" value="CENTER" />
  
  <control type="button" id="okButton">
    <property name="text" value="OK" />
  </control>
  <control type="button" id="cancelButton">
    <property name="text" value="キャンセル" />
  </control>
</composite>

すると、実際には以下のようなXMLへ展開されるわけです。

<composite type="box" layout="fill" layoutParam="type=HORIZONTAL; spacing=5">
  <layoutData name="horizontalAlignment" value="CENTER" />
  
  <control type="button" id="okButton">
    <property name="text" value="OK" />
  </control>
  <control type="button" id="cancelButton">
    <property name="text" value="キャンセル" />
  </control>
</composite>

ほとんどマクロ定義の世界ですが、現実的にはけっこう必要な機能です。

ディレクトリとの関係はまだ整理できていないのですが、まずはこんな感じでどうでしょうか? > id:makotan さん