ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

DMDLの基礎

2013-12-11 21:32:43 | PG(分散処理)

Asakusa Framework Advent Calendar 2013の11日目です。
3種類のAsakusa DSLのうち、Batch DSL・Flow DSLと来て次はOperator DSLです
と見せかけて、今日はDMDLについてです(笑)

DMDLはデータモデル定義言語(DataModel Definition Language)の略で、その名の通り、「データモデル」を定義する為のDSLです。
データモデルはファイルレイアウト(レコードレイアウト・テーブルレイアウト)相当のものです。 

Batch DSL・Flow DSL・Operator DSLが「Javaをホスト言語とする内部DSL」であるのに対し、DMDLは外部DSLです。
つまりDMDLファイル(「DMDLスクリプト」というのが公式な名称のようです)を読み込んで解釈するコンパイラーがあって、コンパイルされるとJavaのクラス(JavaBeans相当のモデルクラスや、インポーター・エクスポーターの抽象クラス)が生成されます。


では、DMDLがどんなものか見てみましょう。最小限の例は以下のようになります。

example = {
  value : INT;
  hoge : TEXT;
};

JSONぽい雰囲気で、どういうものか見ただけで直感的に分かると思います。
以下のように、もう少し色々指定することが出来ます。

//データモデルの例   ←コメント
"サンプル"   ←データモデルの説明
@directio.csv   ←データモデルの属性
example = {   ←データモデル名
  "値"   ←プロパティーの説明
  @directio.csv.field(name="value")   ←プロパティーの属性
  value : INT;   ←プロパティーの定義(プロパティー名およびデータ型)
};

「//」または「--」以降は行コメントになります。ブロックコメント「/*~*/」も使えます。
ダブルクォーテーションで囲むと「説明」になります。説明というより「タイトル」と言った方が近い気がします。いわゆる「日本語名」を定義します。
「@」から始まるものは「属性」です。Javaのアノテーションに似ているので、個人的にはついアノテーションと呼んでしまいますが^^;
属性を指定すると、モデルクラス以外のクラス(主にインポーター・エクスポーター関連のクラス)が生成されるようになります。
データモデル内の各データ定義のことは「プロパティー」と呼びます。

なお、データモデル名とプロパティー名には、英小文字と数字・アンダースコア「_」しか使えません。
Javaに変換される時に各単語の先頭は大文字・他は小文字に変換される(Javaの標準的なコーディング規約に則ったキャメルケースになる)ので、大文字を許すとプロパティー同士で重複する可能性が出てくる為と思われます。
日本語が使えてもいいんじゃないかなーと思ったこともありましたが、データモデル名はクラス名になるので、クラス名が日本語なのはWindows・UNIXの環境を行き来する運用を考えるとけっこう鬼門なので、やらない方が無難ではあります^^;


上記の例が、最も基本的な「レコードモデル」の定義方法です。

他にも「集計モデル」「結合モデル」がありますが、特別な演算子でのみ使用するものなので、後日改めて紹介します(たぶんw)。
(結合モデルの例はteppei_tosaさんがアドベントカレンダー10日目に書いて下さっています) 

もうひとつ、「射影モデル」というものがありますが、これは多相データフローでのみ使用するものなので、けっこう上級者にならないと使わないと思います。(自分は試したことがありません(爆))



最新の画像もっと見る

コメントを投稿