このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

Caty:JSONベース型システムの基本用語集

[追記]このエントリーは、Caty型システムの最新の仕様には追従していません。ご注意ください。[/追記]



Jsonicって名前が既に使われているようなので、「JsonicJSONベース」に直しました。そのうち、新しい名前を考えます。

以下に、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)

型指示子には、次の形式がある。

  1. 公開型名 (裸の名前) -- 例:dateTime
  2. モジュール名 ':' 型名 -- 例:forms.Order:LunchOrder
  3. モジュール名 ':' '$' (デフォルト型)-- 例:lunchOrder:$
  4. '(' 型表現 ')' -- 例: (enum [1, 2, 3])

UDIT、ユーザー定義内部的型

その名の通り。

UDITプラグインレジストリ

UDITを実現するためのプラグイン情報を保持しているマップ。プラグイン情報は、登録キー(型名ではない)と、プログラムを識別する名前との対応である。プログラムを識別する名前は、実装言語に依存するが、例えば完全修飾されたクラス名など。プラグイン・プログラムは、型ハンドラーを実装する。

スキーマシステム

スキーマディレクトリに配備されたスキーマモジュール群、型レジストリ、UDITプラグイン群により構成される、型システムの実装運用形態をスキーマシステムと呼ぶ。

検証

インスタンスが、スキーマシステムの特定の型に対して妥当かどうかを調べること。