[追記]このエントリーは、Caty型システムの最新の仕様には追従していません。ご注意ください。[/追記]
Jsonicって名前が既に使われているようなので、「Jsonic→JSONベース」に直しました。そのうち、新しい名前を考えます。
以下に、JSONベース型システムの基本概念/基本用語を列挙します。ただし、重要な概念でもここには挙げてないものもあります。
スキーマモジュール
スキーマ定義を収めたテキストファイル。物理的な単位であるファイルと、概念的な単位であるモジュールは1:1に対応するので同一視する。
スキーマディレクトリ
スキーマモジュール・ファイルの格納場所となるディレクトリ。環境変数CATY_SCHEMA_PATHに、1つ以上(いくつでもいい)のスキーマディレクトリを指定できる。CATY_SCHEMA_PATHが指定されてないなら、システムが決めたデフォルトの場所(1つだけ)がスキーマディレクトリとして使われる。
スキーマパッケージ
スキーマディレクトリのサブディレクトリは、パッケージ(の物理的対応物)とみなされる。スキーマディレクトリのサブディレクトリに置かれたスキーマモジュール・ファイルは、パッケージ名で修飾されたモジュール名を持つことになる。
スキーマモジュール名
スキーマディレクトリ(のトップ)に置かれたスキーマモジュール・ファイルは、そのベース名(拡張子を除く)がモジュール名となる。一方、スキーマディレクトリのサブディレクトリに置かれたスキーマモジュール・ファイルでは、サブディレクトリ名をパッケージ名とする修飾された名前がスキーマモジュール名となる。スキーマモジュール名の区切り記号はドットである。
スキーマ構文
スキーマモジュールの構文は単一ではなくて、いくつかの書き方がある。現状、宣言形式(declaration style)とパス形式(path style)の2つの構文をサポート予定。どの構文を使っているかは、スキーマモジュール・ファイルの拡張子で識別する。
- .casm -- 宣言形式(Caty Schema Module)
- .pcasm -- パス形式(Path-style Caty Schema Module)
型名
型に付けられる名前。構文は次のとおり。
- 型名 ::= [a-zA-Z][0-9a-zA-Z]*
number, stringなどのJSONスキーマ仕様で定義された型名は予約されている(ユーザー定義では使用不可能)。
公開型(public type)
プログラムやスキーマから、定義なしに使える大域的な型。公開型名の名前空間はフラットで、階層構造や修飾はない。公開型は型レジストリによって実現されている。ただし、JSONスキーマ仕様で定義された型名は登録なしに公開済みと考える。
型レジストリ
“公開型名”と、その名前の“型の定義が収められたスキーマモジュール(コンパイルされた形式かもしれない)”との対応関係を保持するマップ(キーバリュー・データベース)。型レジストリは、Catyの型システム実装内にただ1つだけ存在する。
(スキーマモジュールの)インターン
スキーマモジュールを、もし必要があればコンパイルし(コンパイル方式を採用しなくてもいいし、既に最新版がコンパイルされていればコンパイルは不要)、モジュールから提供(provide)されている型の名前を型レジストリに登録すること。型名の衝突のチェックなどもする。
格納済み宣言
頻繁に参照されるスキーマ宣言(型定義文)は、スキーマモジュールからレジストリにキャッシュされることがある。レジストリ、あるいはより高速なストレージにキャッシュされたスキーマ宣言を格納済み宣言と呼ぶ。格納済み宣言は、完全に実装レベルの概念なので、利用者が気にする必要はない。
内部的型(internal type)
変換や検証が、スキーマ処理系とは別のプラグイン・プログラムにより実行される型を内部的型と呼ぶ。内部的型かそうでないかは、実装/プログラミング上の概念なので、利用者が気にする必要はない。
(スキーマモジュールの)デフォルト型
各スキーマモジュールに1つだけ、無名の(名前を割り当てない)型が許される。この無名の型を、そのスキーマモジュールのデフォルト型と呼ぶ。パス形式スキーマでは、$で参照されるトップレベルの型がデフォルト型となる。
型指示子(type designator)
型指示子には、次の形式がある。
- 公開型名 (裸の名前) -- 例:dateTime
- モジュール名 ':' 型名 -- 例:forms.Order:LunchOrder
- モジュール名 ':' '$' (デフォルト型)-- 例:lunchOrder:$
- '(' 型表現 ')' -- 例: (enum [1, 2, 3])
UDIT、ユーザー定義内部的型
その名の通り。
UDITプラグイン・レジストリ
UDITを実現するためのプラグイン情報を保持しているマップ。プラグイン情報は、登録キー(型名ではない)と、プログラムを識別する名前との対応である。プログラムを識別する名前は、実装言語に依存するが、例えば完全修飾されたクラス名など。プラグイン・プログラムは、型ハンドラーを実装する。
スキーマシステム
スキーマディレクトリに配備されたスキーマモジュール群、型レジストリ、UDITプラグイン群により構成される、型システムの実装運用形態をスキーマシステムと呼ぶ。