Migdal

佐藤陽花 for CL-KIITA: 人工言語知識情報・情報技術事業体

Posted on • Updated on

Cotec: Conlang Table Expression powered by CSV 【CLaKIS RFC】

皆さんおはこんばんにちは。この界隈ではもはや知らない人はいないであろう佐藤陽花です。実はアドカレ記事の次は‘人工言語創作における構造主義の理論と実践’をテーマとして記事を書こうと思っておりましたが、みかぶるさんの働きを目にし、その人工言語の古今東西調査記録に貢献しようとこの記事の筆を取った次第です。

さて、非常にありがたいことに数日前から みかぶるさんが、現在存在する人工言語を悉皆に調査し、人工言語一覧表(令和最新版)を作成・随時アップデートしてくださっています。本規格は、その働きを助けるために、一覧表の元データテーブルの記録・メンテナンスの簡易化を目的として、この用途のために安定的に利用できるデータフォーマットを提案するものです。規格仕様はRFC(Request of Comments)の状態に置かれており、パブリックコメントとして関係者を始め皆様のご意見を募集しております。

諸元

  • 名称: Cotec
  • 名称(長形): Conlang Table Expression powered by CSV
  • 拡張子: .ctc
  • 規格番号(暫定): CLaKIS/RFC DX2024-1
  • 規格バージョン: v0.18

仕様 (RFC)

Cotecは、CSV仕様上に構築されるテキストデータとする。Cotecに合致するデータは、CSVとしても合致する。
列区切りのカンマの左右の空白は無視される。後述の通り、処理系では両側の値に回収された後両端トリムされる。

型付の値をカンマ区切りで並べた行の並びを一つのデータテーブルとする。第0行にメタ行を、第1行にラベル行を、第2行に型宣言行を配し、その後第3行以降任意行数分のデータ行が続く。

メタ行は第1列にデータ行の行数列数、第2列にテーブルタイトル、第3列に作者名、第4列に原始作成日時、第5列に最終更新日時、第6列にライセンス名、第7列にライセンス表示、第8列に拡張仕様コードが記載される。
行数列数は{行数}x{列数}の形式で、メタ行の日時はISO形式に準拠して記載される。
拡張仕様コードはUnsigned Intで、ビットフラグ管理される。
ラベル行、型宣言行、及び全てのデータ行の列数は必ず等しい。
ラベルは[A-Z][A-Za-z0-9]*)((-|_|\.|:)[A-Z][A-Za-z0-9]*)*の正規表現に従う。拡張仕様に基づきラベルのレンダリング文字列を規定することができる。

メタ行、ラベル行、型宣言行、及び全てのデータ行の規定セルを除く全ての任意セルはコメント乃至メモのためのセルとして利用することができる。

値には空白を含んでも良いが、値の前後にある空白はトリムされる。
値にはエスケープされないカンマ、改行、空白、アンダースコアは出現しない。
また、Array型リテラル以外の型の値ではエスケープされないセミコロン、Pair型以外の型の値ではエスケープされないコロンは出現しない。SString型においてはリテラル以外ではエスケープされないイコール及び丸括弧は出現しない。
エスケープはいずれもバックスラッシュを前置することによって行う。

Cotecの型は次の通りである。なお、任意の英字T及びUについて、型名の箇所で[T]とあるのは総称型を、T: Uとあるのは型ヒエラルキー上U型の子としてT型が存在することを表し、正規表現の箇所で{T}とあるのはT型のリテラルが埋め込まれることを表す。Any型以外で親となる型が示されていない型は全てObject型を親の型とする。

  • Any
    • desc: any no-typed values acceptable, very very danger, be careful to use
  • Object: Any
    • desc: same as Any excepts Null
  • Null: Any
    • desc: null
    • regex: null|nil|~
  • T? on T
    • equals: Union[T,Null]
  • Type
    • desc: 型を表す型
    • regex: {TypeKernel}(\[{Type}(,{Type})*\])?\??|({Hom}|\({Hom}\)\?)
  • TypeKernel
    • desc: 型名のうち固有リテラルでない部分
    • regex: ([A-Z][A-Za-z0-9]*)(_[A-Z][A-Za-z0-9]*)*
  • Label
    • desc: ラベルの型
    • regex: ([A-Z][A-Za-z0-9]*)((-|_|\.|:)[A-Z][A-Za-z0-9]*)*
  • BinArray[B] on B where B: Binary
    • desc: binary array with unit
  • NString
    • desc: Natural string
    • regex:
  • SString
    • desc: エスケープされないイコール及び丸括弧が出現しないことを除きNStringと同様
  • Bool
    • desc: 2-value boolean
    • fmt: true, on, yes (as true) / false, off, no (as false)
    • regex: (true|on|yes)|(false|off|no)
  • ANumber
    • desc: Auto (unique) number (integer) within identity mainly-for primary key
  • FNumber
    • desc: Fixed digit-count (unsigned) number (integer)
  • SNumber
    • desc: Signed number, with infinity and NaN
  • UNumber
    • desc: Unsigned number, with infinity and NaN
  • Binary
    • desc: sized bit array
  • Byte: Binary
    • desc: byte size(8 bits) value
  • Half: Binary
    • desc: half size(16 bits) value
  • Word: Binary
    • desc: word size(32 bits) value
  • Url
    • desc: URL
  • Date
    • format: (yy|')yy(.m(.d(.h(.M)?)?)?)?
    • regex: (([1-9][0-9]?)|')[0-9]{2}(\.(([0-9])|(1[0-2]))(\.(([1-2]?[0-9])|(3[0-1]))(\.((1?[0-9])|(2[0-4]))(\.([1-5]?[0-9]))?)?)?)?
  • DateRange
    • regex: ({Date}-{Date}?)|(-{Date})
  • LangCode
    • desc: 言語コード識別コード付きの言語コード
    • regex: \{[a-z]{3}[a-z0-9]\}[a-zA-Z0-9_~\-]+
  • LangClass
    • equals: Union[ClassicClass, Array[MoyuneClass]]
  • ClassicClass
    • desc: 俗にSe分類とも呼ばれる伝統的な分類
  • MoyuneClass
    • desc: モユネ分類の各々の値。ASCII英大文字三字(のenum)
  • Ariority
    • desc: アリオリ性
    • fmt:
      • Unknown: 不明
      • Mixed: アプリオリとアポステリオリの混合
      • Pri: アプリオリ(詳細不明)
      • Pri.Strict: 厳格にアプリオリ
      • Pri.PartPost: 原則アプリオリだが部分的にアポステリオリ
      • Pri.AcceptPost: 原則アプリオリだがアポステリオリも許容
      • Post: アポステリオリ
      • Post.Strict: 厳格にアポステリオリ
      • Post.PartPri: 原則アポステリオリだが部分的にアプリオリ
      • Post.AcceptPri: 原則アポステリオリだがアプリオリも許容
    • regex: Unknown|Mixed|Pri(.(Strict|PartPost|AcceptPost))?|Post(.(Strict|PartPri|AcceptPri))?
  • Array[T] on T
    • regex: {T}(;{T})*;?
  • Pair[K,V] on K, V
    • desc: K型の値とV型の値の組
    • regex: {K}: {V}
    • prop: 型パラメタについて結合則及び反交換則を満たす。
  • Hom[K,V] on K, V
    • desc: ホム類。K型の値を始域、V型の値を終域とする射の族
    • prop: 型パラメタについて結合則及び反交換則を満たす。
    • regex: {Type}->{Type}
  • Union[T,U] on T, U
    • desc: T型もしくはU型
  • Nominal[A] on A
    • desc: 別名義と注釈も記載可能な名義
    • prop: 型パラメタについて結合則及び交換則を満たし、またPair型及びHom型に対する分配則を満たす。
    • regex {SString}(={SString})*( \({A}\))?
  • ArrayOr[T]
    • state: deprecated from v0.8, for removing
    • desc: same as Union[T,Array[T]]
  • MapFor[T,label] on T (experimental)
    • state: pre experimental
    • desc: 指定のlabelと写像関係にあるT型の値。Array型の場合長さは等しい必要がある。

拡張仕様コードは次の通り。使用する拡張仕様の拡張仕様コードの和を用いる。拡張仕様を用いない場合のデフォルト値は0で、記載必須値とする。

拡張仕様1及び2では、メタ行とラベル行との間に追加メタ行が2行追加される。追加メタ行第1行は設定的用途のため、同第2行はメタ情報的用途のために用いられる。

  • 1: 概要、経緯及び更新情報の記載のための追加メタセル
  • 2: 言語別ラベルレンダリングのための補助テーブル
  • 4:
  • 8:
  • 16:

拡張仕様: 概要、経緯及び更新情報の記載のための追加メタセル (コード1)

追加メタ行第2行第1列から第3列までにそれぞれ概要、経緯及び更新情報がNString型に準拠して記載される。

追加メタ行第1行第2列にその他の追加メタ情報の項目数を記載する。概要、経緯及び更新情報のみの場合は0と記載される。

その他の追加メタ情報は追加メタ行第2行第4列以降にラベルと値の組みで記載される。ラベルはラベル行のラベルと同様の形式に準拠して、値はNString型に準拠して記載される。

拡張仕様: 言語別ラベルレンダリングのための補助テーブル (コード2)

追加メタ行第1行第2列に補助テーブルの(ラベル行を基準とした)オフセット行数と長さ行数が{オフセット}-{長さ}の形式で記載される。

補助テーブルの列数は、データ行の列数とその他の追加メタ情報の項目数の和に4列加えたものとする。
補助テーブルにおいて、各行第1列はレンダリング言語をLangCode型に準拠して記載され、同第2列に対応するレンダリング文字列をNString型に準拠して記載される。レンダリング文字列は、ラベル行、概要、経緯、更新情報、及びその他の追加メタ情報の順序で記載される。

懸案事項

  • 総称型のネストのリテラルはどうしようか
  • 列の間でのセル値の紐付け制約の記述の方法はどうしようか

上載仕様: 日本語圏人工言語リストにおけるCotecのラベル及び型に関する定義

messier,name,kanji,desc,creator,period,site,twitter,dict,grammar,world,category,moyune,cla,part,example,script 
Any,Array[NString],Array[NString],Array[NString],Array[NString],DateRange,Array[Url],Array[Url],Array[NString],Array[NString],Array[NString],Array[NString],Array[MoyuneClass],Array[LangCode],Any,Array[NString],Array[NString] 
Enter fullscreen mode Exit fullscreen mode

Latest comments (1)

Collapse
 
nsopikha profile image
ンソピハ!

この界隈ではもはや知らない人はいないであろう
強者感はんぱない