regrfファイルは先にみたように属性無しのXML風の形式で記述します。 XML同様タグを用いて宣言していきますが、XMLと違っていくつかの制限がかかっています。 その制限は
- ルートのタグはxmlタグではなくregrfタグ
- 属性を利用できない
- タグ名はハイフンが文字列の終始にならない文字列で、半角英文字の小文字とハイフンのみからなるもの
- 形式の中身を持たないタグは利用できない
- 値を持たない場合はとしなければいけない
- typeタグが
となっています。
.regrfでは最初にレイアウト構造を定義し、次にグラフを定義していく形で記述していきます。 regrf形式の基本的な全体構造は次のように表現できます。
<regrf>
<meta>
<charset>utf8</charset>
<version>0.0.1</version>
</meta>
<layout>
<colors>
<color>color</color>
</colors>
<labels>
<label>label structure</label>
</labels>
<graphs>
<graph>inner graph structure</graph>
</graphs>
<nodes>
<node>node structure</node>
</nodes>
<edges>
<edge>edge structure</edge>
</edges>
</layout>
<outer-graph>
<nodes>
<node>node body</node>
</nodes>
<inner-graphs>
<inner-graph>inner graph body</inner-graph>
</inner-graphs>
<edges>
<edge>edge body</edge>
</edges>
</outer-graph>
</regrf>
このような外形でregrf形式はできています。
この外形には書いてありませんがregrf形式にてtypeタグというグラフのレイアウト構造を定義するタグはいたるところで出てきます。
また、regrfタグ内なら任意の場所で使えるcommentタグというタグもあり、中身とともに無視されるためコメントとして利用できます。
詳しく見ていく前に用語を宣言していきます。大文字スネークケースの文字列は適宜置き換えてください。
- regrf形式: ReGRaFiLoの内部表現をできるだけシンプルに表した、タグとその中身の値からなるテキストのこと。
- regrfファイル: 拡張子が
.regrf
でのファイルで、regrf形式のファイルのこと。 - タグ: "<TAG_NAME>"や"</TAG_NAME>"のこと。regrfではXMLやHTMLと違い属性は使用できないなどの制限はあるがおおむねXMLのタグと同じ。詳しくはこちら。
- タグ名: タグの名前。つまりタグの説明におけるTAG_NAMEのこと。
- 開始タグ: タグのうち"<TAG_NAME>"のこと。終了タグとセットで使われ、終了タグと挟んだ値がこのタグの値。
- 終了タグ: タグのうち"</TAG_NAME>"のこと。開始タグとセットで使われる。
- ルートタグ: regrfタグのことです。
- コンポーネントタグ: 子供のタグに意味を持たせるタグのことです。最初の例ではmeta, layout, outer-graphなどがコンポーネントタグにあたります。単にコンポーネントと呼ばれることも多い。
- グループタグ: 次のアイテムタグを子供に0個以上もつタグのことです。タグ名はアイテムタグのタグ名の複数系となる。アイテムタグと合わせて"items/item"のように表記されることが多い。単にグループと呼ばれることも多い。
- アイテムタグ: 宣言の本体部分で識別用のタグ(idタグやnameタグ)と構造宣言用のtypeタグを必ず持つタグのこと。regrf形式では構造宣言の最小単位。単にアイテムと呼ばれることも多い。
- オプションタグ: 中にタグを持たないタグのこと。regrf形式では各種タグを構成する最小要素。タグ名を元にしたユーザー宣言、最初から用意されている宣言、識別タグ、特殊文字列、単なる文字列、の順番で解釈していきます。単にオプションと呼ばれることも多い。
- typeタグ: コンポーネントタグの一つで、構造宣言の単位。構造を表すclassオプションと補足情報のstyleタグからなる。classタグは必須。中身の宣言は兄弟タグのbodyコンポーネントの仕事。
- 識別タグ: オプションタグの一つで、アイテムを識別するために用いられる。レイアウトを宣言するとき用のnameタグや、頂点扱いできるグループを宣言するとき用のidタグが該当する。
では、regrf形式の構造をタイトルの入れ子上の関係に落として詳しく見ていきます。
ルートタグです。すべてはここから始まります。
直下のタグのうちmetaタグ, layoutタグ, graphタグは必須です。
ファイルやReGRaFiLoのメタ情報を保持するためのコンポーネントタグです。ReGRaFiLoのバージョン情報や文字コード、変換元のタイプ名などを宣言するのに使われます。
バージョン情報(version)と文字コード(charset)のタグが必須で、それ以外は任意です。
レイアウトを定義するためのコンポーネントタグです。デフォルトで定義されていないものはここで宣言してやる必要があります。定義したものの名前はnameタグで宣言する。
このタグ内で宣言されたアイテムタグはオプションとして使うことができます。その時はtypeタグの親タグ(例えばexample.regrfのcolorタグ)で挟んで指定します。
今このタグで宣言可能なのはcolors/color, labels/label, nodes/node, edges/edge, graphs/graphぐらいです。
コンポーネントタグでもあり、グループタグがない特殊なアイテムタグでもある。idタグは指定できません。
ここでようやくグラフの本体を定義できます。このタグや以下のアイテムタグは頂点として扱うことができます。
nodesタグとedgesタグは必須です。
nodesグループ内のnodeアイテムは、今考えているグラフ(outer-graph)のグラフ理論的なちゃんとした頂点のことを表します。
inner-graphsグループ内のinner-graphアイテムは、今考えているグラフの中に配置できるグラフのことです。 outer-graphと同様に宣言することで中身を定義できます。outer-graph同様にinner-graphタグ内では自分か自分の配下のidしか利用することができません。
edgesグループ内のedgeアイテムは、今考えているグラフ(outer-graph)の辺のことを表します。 bodyコンポーネントでfromオプションとtoオプションにidタグの値を指定して始点と終点を定義できます。 この時利用できるidタグの値は、今考えているグラフ(outer-graph)で定義したidタグの値を使うことができます。