メインコンテンツまでスキップ

属性の三層

属性は key:value で書かれる。だが key は自由ではない。

書ける鍵は台帳が定める。台帳に無く、名前空間も持たない鍵は ATT03 のエラーになる。

/L1/a carries nmae:, which is not in the ledger (check the spelling, or add a namespace if
the value is only carried — e.g. acme.nmae:居室)

この一行がある理由は、「見ていない」と「見て問題がない」を区別するためである。鍵が無防備なら heigh:2400 は高さの不変量を、sit:1 は敷地の判定を、stiar:N は縦動線を、それぞれ丸ごと無音にしたまま check を緑で通す。書いたのに効かないのに緑である状態を、koyu は持たない。

行の綴り方 (: の位置・値の型・重複) は 一行の読まれ方 にある。この頁は、どの鍵をどこに書いてよく、書いた値がどう扱われるかを書く。

三つの層

扱い
構造層パス・型・区画・レベル・関係の相手・type t air edge w at hinge swing d x y必ず見る。壊れていれば読まない — その場の構文エラーで止まる
解釈層h use road daylight site area style ceiling uid name stair riser見る。台帳が値域を定め、外れれば診断が出る
運搬層spec fire sound floor sill と、名前空間つきの任意の鍵見ない。運ぶだけ

構造層の鍵は属性として残らない。type: t: air: edge: w: at: hinge: swing: d: x: y: は読み込みの時点で要素の項目へ持ち上げられ、値の検査もその場で行われる。したがってこれらが ATT01 / ATT02 として現れることはない — 数値でない t: はもっと早く t is written as a positive number で止まる。

運搬層は値を見られない。spec:RCfire:60sill:800 も、koyu は運ぶだけで意味を与えない。壁が何でできているかは物の名 (spec) の値であり、境界の型を増やす理由にはならない。

台帳は「書いてよい鍵の一覧」である

台帳に載っていることは、core がその鍵を読むことを意味しない。spec fire sound floor sill は台帳に載っている運搬層の語である — 意味の定まった語に別の綴りを使わせないために載せてあり、値は解釈されない。

逆に、台帳に無い鍵でも名前空間を持てば書ける

space /L1/a room X1..X2 Y1..Y2 acme.sensor:23 bems.temp:22.5 survey.measured:2026-03-11

名前空間の綴りは小文字英字で始まり、ドットで区切られた区間を一つ以上持つものである ([a-z][a-z0-9_-]*.[a-z0-9_-]+ が一つ以上続く)。

書いたもの結果
acme.sensor:23運搬層。core は中身に一切の意味を与えない
bems.temp:22.5同上
Acme.sensor:23ATT03 — 大文字で始まる鍵は名前空間として読まれない
acme.Sensor:23ATT03 — 区間に大文字は使えない
sensor:23ATT03 — ドットが無い
nmae:居室ATT03name の綴り違い。これを捕まえるための規則である

名前空間の中身に core は分割の規則すら持たない。ドットが一つでもあれば運搬層である、というだけの規則になっている。

名前空間を付ければ何でも書けることと、それが意味を持つことは別である。acme.uid: は書けるが、それは運搬層であり、同一性を持たせたことにはならない。

値が検査される三つの形

解釈層の値は、台帳が定めた型に合わなければ診断になる。書いたのに解釈されなかった値を、黙って既定へ落とさない。

コード何を言うか
ATT01正の数値でなければならない鍵に、数値でない値・0・負の値h on /L1/a is written as a positive number: h:0
ATT02決まった語彙の外の値ceiling on /L1/a is one of 0 / 1: ceiling:2
ATT03台帳に無く、名前空間も無い鍵上表

いくつかの鍵は専用の診断が守っている — daylightDAY01、縦動線の向きは RUN02formRUN05 である。

daylight is either 1 (in scope for the daylight check) or 0 (out of scope): /L1/b carries daylight:yes
site on zone /L1 is one of 0 / 1: site:yes
style on door (/L1/a | /L1/b) is one of hinged / sliding / auto: style:swing
turn on /L1/b is one of R / L: turn:X

要素ごとの台帳

台帳は要素ごとに閉じている。同じ uid でも spacezone には書けて、boundary には書けない (ATT03)。

space

意味
level構造レベル名所属レベルの明示。既定はパスの先頭セグメント
w構造正の整数 mm / rest帯の要素の寸法。帯の外の space には書けない
h解釈正の数値 mm天井高。既定はレベルの h
use解釈自由集計の軸。ゾーンから継承される
road解釈正の数値 mmexterior の幅員 — 道路の印。接道の導出が読む
daylight解釈0 / 1採光の問いの対象かどうかの宣言
ceiling解釈0 / 10 で天井を張らない
uid解釈不透明トークン改名を跨ぐ永続同一性。数字だけ・空白は不可
name解釈自由表示名
stair ramp escalator解釈N / E / S / W縦動線の宣言。値は上る向き
lift解釈1昇降機の宣言。向きを持たない
form解釈straight / return折返しの有無
turn解釈R / L折返しの向き
entry解釈正の数値 mm乗り込みの床の奥行
landing解釈正の数値 mm中間踊り場の奥行
riser解釈正の数値 mm蹴上げの上限
tread解釈正の数値 mm目標踏面
lane解釈正の数値 mm一台・一車線の幅
slope解釈正の数値許容勾配の分母 (slope:6 = 1/6 まで)
floor運搬自由床仕上げ
spec運搬自由物の名

zone

意味
name解釈自由表示名
use解釈自由配下の空間へ継承される集計の軸
site解釈0 / 1敷地の集約の印
area解釈正の数値 ㎡敷地の宣言面積 (測量値)。導出面積と照合される
uid解釈不透明トークンspace と同じ規則

boundary

意味
type構造wall / open / stair / shaft / void関係のトポロジー
t構造正の数値 mm壁厚 (芯振り分け)
air構造0 / 11 = 物はあるが外気と光を遮らない (手すり・柵)
edge構造N / E / S / W線分を a 側から見た辺に限定する
h解釈正の数値 mmair:1 の境界の天端高
name解釈自由表示名
spec運搬自由物の名 (RC・LGS・カーテンウォール・手すり…)
fire運搬自由耐火
sound運搬自由遮音

door / window / asset

建具アセットは開口と同じ台帳で読まれる。「アセットに書けて開口に書けない属性」を作らないためである。

意味
w構造正の数値 mm幅。必須 (アセットが与えてもよい)
h構造正の数値 mm高さ
at構造0..1 の比率 / 通り参照位置
edge構造N / E / S / W複数線分からの辺選択
hinge構造N / E / S / W吊元
swing構造a / b開く先
style解釈hinged / sliding / auto建具の型
name解釈自由境界の中で一意な名 — 開口の同一性の鍵
sill運搬自由窓台高
spec fire運搬自由

area / seg / column

要素構造解釈運搬
area(領域は位置引数)namefloor spec
segw at edgenamespec fire sound
columnd x ynamespec

level は属性の器を持たない

level が受けるのは h slab pitch underground の四語だけで、他は名前空間を付けても書けない。

level carries undergound:, which is not in the ledger (level reads h / slab / pitch / underground)
level carries acme.x:, which is not in the ledger (level reads h / slab / pitch / underground)

level の値はすべて項目として持たれ、属性の辞書がそもそも無い。残った鍵は機械形式にも痕跡を残さず消えるので、ここで拒まなければ undergound:1 が黙って地上階になる。

継承と上書き

属性が要素の間を渡る経路は三本しかない。

use は zone → space に継承される

集計の軸だけが本当に継承される。空間のパスを接頭辞として含む最も深いゾーンuse が渡り、空間側の宣言が勝つ

koyu 1.0
name 継承の例
grid X 0 4000 8000
grid Y 0 4000
level L1 0 h:2400 slab:150
zone /L1/A name:Aタイプ use:exclusive
space /L1/A/ldk  ldk  X1..X2 Y1..Y2 name:LDK
space /L1/A/hall hall X2..X3 Y1..Y2 name:玄関 use:common
By use: exclusive 16.00 m2 (50.0%) / common 16.00 m2 (50.0%)

/L1/A/ldk は書いていない exclusive をゾーンから受け取り、/L1/A/hall は自分の common で上書きしている。

floor は space → area に、spec は boundary → seg に区間上書きする

areaseg数えない分節である。領域や区間と、そこだけで違う属性を運ぶ。

space /L1/ldk ldk X1..X2 Y1..Y2 floor:オーク
  area X1..X1+1800 Y1..Y1+1800 name:土間 floor:タイル

boundary /L1/ldk /L1/corridor spec:LGS
  seg w:1800 at:0.5 spec:受付ガラス

上書きは区間の上書きであって、合成でも継承でもない。分節の値はその領域・その区間について読まれ、外側では親の値が読まれる。分節は面積にも室数にもグラフにも影響しない — 数えるのは空間と境界だけである。

それ以外は渡らない

アセットから開口への値の流れだけが例外的に見える。アセットの属性は開口の既定になり、開口の行に書いた属性が上書きする。これは継承ではなく、既定値の束を一箇所に置くための参照である。アセットから継いだ name は型の名であって、その開口の同一性の主張ではない — 同じ建具を一枚の壁に二枚並べるのは普通の設計である。

h が空間からレベルへ落ちるのも継承ではない。空間の h が無ければレベルの h を読む、という導出の規則である。どちらも無ければ形が作れないので SUF01 になる — 詳しくは 書かなかったとき