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

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

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

参照用 記事

Catyスキーマ の検索結果:

パイプライン指向JSON処理プログラミング言語 jq

…僕が作って使っていたCatyスキーマです。Catyスキーマは見れば分かる構文ですが、以下の記事に解説があります。 最近のCatyスキーマを解説します 次のCatyスキーマは、データベース・スキーマのJSON記述の型を定義するスキーマです*10。 // カラムの仕様を記述するデータの型 type ColumSpec = { "name" : string, "type" : string(format = "SQL_typeName"), "typeComment" : str…

TypeScriptの型は、データの妥当性をどこまで守ってくれるのか?

…ONスキーマベースのCatyスキーマもスキーマ属性を書けます。もし、integer型にスキーマ属性minimum, maximumが使えるなら、次のような感じになります。 type colorStrength = integer(minimum=0, maximum=255); class RgbColor3a { r:colorStrength; g:colorStrength; b:colorStrength; constructor(r:colorStrength, g…

実例で見る JSONスキーマ vs Catyスキーマ

…26 : 俺は今でもCatyスキーマが今のところ世界でもっとも使いやすいスキーマ言語だと思っている Kuwataさんや僕がこういうことを言うと手前味噌なわけですが、実際のところCatyスキーマより書きやすいスキーマ言語は見当たらないです。実際に仕事に使ったスキーマ記述の例を挙げましょう。WebサイトでWebフォントを使う状況で、フォントに関するメタデータをJSONファイルに保存しておくことにします。そのJSONファイルのデータ形式を定義するものです。スキーマ記述ファイルは次の…

Catyにおけるメイヤー指標

…できます。擬似言語とCatyスキーマ言語は少し違いがありますが、その違いは後で説明することにして、実際のCatyスキーマ定義を以下に。 module sample; /* visible sorts : Integer => integer Boolean => boolean OK => void */ exception StackError = deferred object; // 詳細は決めてない type Stack = foreign; type Counter…

スノーグローブのなかの小人さん達

…0年末に再び考える、Catyスキーマとユーザーインターフェース」の最後のほうに、次のように書いています(強調もママ)。 さして知的でもない作業を人手でやるのはウンザリ。型の定義を目視で見て、対応するHTMLフォームを書き下すなんて作業はウンザリの典型ですね。[...snip...]型や手続きや関係やらが、データになっていれば、通常は人間がやるような概念的(に見える)操作もコンピュータに任せることができます。つまりは、現実の世界や概念の世界の事物をコンピュータのなかに押し込めれ…

WebアプリケーションフレームワークCatyの特徴と方向性

…hema*3 -- Catyスキーマ言語: 型の定義、コマンドの宣言と定義ができます。 CatyResAct -- Catyリソース・アクション(・状態)記述言語: Webから見えるインターフェースであるリソースクラスとアクションの宣言と定義ができます。「WebアプリケーションフレームワークCatyの現状と今後」を参照。 CatyScript -- Catyスクリプト言語: 実行可能なコマンドのコーディングができます。 CatyTemplate -- Catyテンプレート言語…

ハイパーバリデーションに向けて

…ールはテキスト構文(Catyスキーマ言語+CatyScript)で書かれていますが、ハイパーリンクのグラフを可視化(ビジュアライズ)すれば、構造の把握が容易になります。次はスクリーンショットです。 「Python Imaging Library と IrfanView」で述べた方法で、自動描画した結果をIrfanViewに渡して表示しています。IrfanViewの裏にいる地味なウィンドウがCatyコンソールシェルです。僕もKuwataさんも「コマンドラインインタープリタが一番…

意味記述のためのクロージャと記号表現

…。(データ型定義にはCatyスキーマ言語を使用。) type ParamsData_1 = { /** オプションパラメータ */ "opts" : {* : any?}, /** 引数パラメータ */ "argv" : [any, any*] }; argv[0] だけは特別扱いするんで、次のような形もいいかも知れません。 type ParamsData_2 = { /** オプションパラメータ */ "opts" : {* : any?}, /** 0番目の引数パラメータ…

データの部分構造とパート

…次のようだとします(Catyスキーマ言語による定義です)。 type Person = { "givenName" : string, "familyName" : string, // 日付の制約は厳密ではない "birth" : { "year" : integer, "month" : integer(minimum=1, maximum=12), "day" : integer(minimum=1, maximum=31), }?, "email" : string(…

2010年末に再び考える、Catyスキーマとユーザーインターフェース

…記することにします。Catyスキーマのアノテーション構文では、@[ui("text")] (textコントロールを使う)のようになります。それと、UIで使うラベル文字列が必要なので、@[label("お名前")] のようにして示します。データ型に対するデフォルトのコントロールは、上の表にある最初のコントロールとします。例えば、string型はデフォルトでtextコントロールを使います。トップレベルのオブジェクトはformになり、入れ子のオブジェクトはfieldsetとしてグル…

CatyScriptで記述するCatyのリクエスト処理

…ーマの構文は「最近のCatyスキーマを解説します」を参照してください。型の演算子「&」の意味は論理AND(集合なら共通部分)です -- & はオブジェクト型の継承の手段に使っています*3。/** MIMEメディアタイプ */ type mediaType = string(format = "media-type");/** 文字エンコーディングスキーム */ type encoding = string(format = "encoding");/** パス */ type…

Catyとデータ型: だれががんばるの?

…は思いますが、構文はCatyスキーマ言語(「最近のCatyスキーマを解説します」)です。列挙型として、リテラルのユニオン型を使っています。Catyで何かしようとしたら、どんなときでも、まずは型定義が必要です。スキーマドリブンなんです。さて、普通のHTMLフォームからピザの注文が来るとして、そのデータは次のようなものでしょう。 baseType=マルゲリータ&topping=ベーコン&quantity=2CatyのWebアダプターは、これを次のように変換します。 { "base…

Wiki処理系を作る前に知るべきこと/考えるべきこと

…ているスキーマ言語(Catyスキーマ)は、「深さ2の相互入れ子だけを認める」みたいな変な制約は書けないので困ります。僕の想像ですが(って、ほとんど全部が推測と想像だが)、自分自身の入れ子や深い入れ子を許すと、レンダリング(ブラウザでの表示)で区別が付かなくなってしまうので禁止しているのでしょう、いやっ、入れ子の禁止も明確には書いてないのですけど。だいたい、Wikiでナニカを禁止するなんて言ったってユーザーは書いちゃうわけで、構文エラーは起きます。構文エラーで止まるわけにはいか…

Webサービスの設計: ハイパーオブジェクトとトリガー

…す。記述形式としてはCatyスキーマ言語を使います。(Catyスキーマ言語の構文は見れば分かるものです。) type uri = string(format="uri"); type mediaType = string(format="media-type"); type httpMethod = ("GET" | "PUT" | "POST" | "DELETE" | "HEAD"); type Trigger<InputType> = { // 個々のトリガーを識別する…

有限的に扱える集合

…含む集合のことです。Catyスキーマでは、特定の名前のプロパティ名の出現を禁止することができます。例えば、{"foo":never?, "zot":never?, *:any?} と書くと、"foo"と"zot"という名前のプロパティは出現できません。この例では、すべての文字列の集合から "foo", "zot" を除いた集合がこの型のプロパティ名集合です。結局、JSONオブジェクト型のプロパティ名集合は次のどちらかになります。 文字列の有限集合 すべての文字列の集合から有限…

もう一度 Google GData方式のXML-JSON変換の話

…集合を定義するときはCatyスキーマ言語を使うのが便利です。 type Scalar = (number|string|boolean); // nullはやめておくtype XProperObject = { * : XProperValue? };type XProperValue = (Scalar|XProperArray|XProperObject);type XProperArray = [(Scalar|XProperObject), (Scalar|XProp…

JSONにバイナリデータ

…えます。$dataプロパティの値を取り出して、それをそのままdata:スキームを理解できる処理系に渡せば、対応するバイナリオブジェクト(例えばJPEG画像)が得られるでしょう。スキーマ定義の際には、JSONスキーマ属性formatが使えます。本家JSONスキーマ構文なら、次のような記述となります。 { "type" : "binary", "format" : "image/jpeg" } Catyスキーマ構文なら: binary(format = "image/jpeg")

カジュアル過ぎるWikiCreoleを少しだけ厳密に

…釈不能だわ。DTDとCatyスキーマもとの仕様が曖昧なので、以下のDTDが正しいとも間違っているとも言えません。「こんな感じでいいかな」という程度。伝統的なDTD以外に、拡張JSONに埋め込んだWikiCreole文書に対するCatyスキーマ定義も書きました。これは「拡張JSONで表現したXMLの正規形」で述べたマッピングに基づきます。これら2つの定義は完全に並行的で、お互いに1対1の逐語訳になっています。 <!-- htw.dtd : HTML for WikiCreole…

XMLからJSONへの変換はこうすべ -- eXtendedJSON-encoded XML

…" : 非空内容} Catyスキーマで書けるかな? // eXtendedJSON-encoded XML // 再帰的な定義 type NEString = string(minLength=1); // 非空 (NonEmpty) 文字列 type BasicContent = NEString | Element; type Content = BasicContent | [BasicContent*]; type AttrCon = {"" : Content?, …

HTMLフォームで使うデータ型のJSONスキーマ

…スキーマのスキーマをCatyスキーマ構文で書いてみます(ややこしいぞ)。FormInputSchema型は総称的に「なんらかのフォームコントロールで入力する型」を表します。それぞれの型に応じて、対応するフォームコントロールをCatyのテンプレートを使って生成したいのですが、今のところテンプレートの能力が不足*1なので、とりあえず分類だけしておきます。数値型のJSONスキーマ type NumberSchema = { "type" : "number", "minimum" …

最近のCatyスキーマを解説します

…も理解できた人なら、Catyスキーマも書けます。そして、Catyスキーマのほうがはるかに簡潔に記述できます。以下では、「最近のJSONスキーマを解説します」と同じ構成で、Catyスキーマの記述パターンを説明します。Catyスキーマがいかに単純明快かが分かると思います*1。内容: 事例 型の分類 Catyスキーマの記述パターン 基本スカラー型 リスト型 タプル型 タプル+リスト型 閉じたオブジェクト型 開いたオブジェクト型 ユニオン型 列挙型 全称型 オプショナル指定 リテラル…

最近のJSONスキーマを解説します

…します。なお、我々のCatyスキーマ記述言語のこともしばしば「JSONスキーマ」と呼んでいますが、この記事で単に「JSONスキーマ」と書いたら本家JSONスキーマのことで、Catyスキーマ記述言語は「Catyスキーマ」と書きます。内容: 型表現がJSONインスタンス 型表現とスキーマ 型の分類とスキーマの基本 JSONスキーマの記述パターン 基本スカラー型 リスト型 タプル型 タプル+リスト型 閉じたオブジェクト型 開いたオブジェクト型 ユニオン型 列挙型 全称型 その他のス…

Catyの総称(多相)型サポートに向けて

…なります。 今までのCatyスキーマ構文にも型パラメータはあったのですが、list, tuple などを予約語として、それらにだけ型パラメータを許し、ユーザー定義の型には型パラメータは(値パラメータも)許してませんでした。型パラメータと値パラメータを自由に使用できるようなれば、型定義の自由度は格段に向上しますが、そこまでの要求がすぐさまあるかどうかは疑問です。それで僕は、本格的な総称の実装を先延ばし(一時棚上げ)にするつもりだったのですが、Kuwataさんは年末年始を費やして…

Catyの目的とか方針とか:今日は前置きだけ

…Catyスクリプト/Catyスキーマ言語/テンプレート言語といった人工言語を使いますが、これらのスクリプト/スキーマ/テンプレートを書く役割は「プログラマ」と呼ばないことにします。汎用プログラミング言語でプログラムを書く役割が「プログラマ」です。それ以外の作業 -- HTML, CSS, JavaScriptなどによるコンテンツを作ったり、サイトの階層構造、ページ遷移/ナビゲーション、ユーザビリティなどを考える役割は、総称として「Web制作者」と呼びます。ファイルやデータベー…