rokka 1.0 — 六何の事象(仕様)

土台の規範——場所をもつ事象を六何の要素に分けて書く

本書は規範です。単独でも使えます——データは "format": "rokka/1.0" と名乗って よい。土台だけの文書は六何の要素を持つ事象を並べたもので、移動を書かない 資料(地誌、災害の被害記録、本文の地名に印を付けただけの注釈)はこれで足ります

拡張は複数あってよい。 拡張は type の語彙を定め、鍵と適合条件を足し、 自分の名で format を名乗ります。足す条は本書と同じ番号の列に続けます (いまは C46 まで。第三者が拡張を書くなら番号がぶつかるので、そのときは別の 接頭辞を立てます)。

いまの拡張:DOCHU-1.0.mddochu 拡張formatdochu/1.0typestay / move を定めて必須にし、移動を加え、旅を書けるようにする)。食い違えば 本書と、本書を引く形式の仕様が正しい。

本書だけで書ける。 手を動かす順は TUTORIAL-1.0.md、参照の実装は検証器 rokka/validate.py とビューア・エディタ。適合の判定に要るものは本書にすべてある。

要求の強さ:「なければならない」「してはならない」は適合の条件(§11)。「べき」 は強い勧め。「よい」は許容。

1. 何を書く規定か

資料に記された一つの事象を、六何の要素に分けて書くための規定。一つの事象は 資料の主張で、「だれが・いつ・どこで・なにを・なぜ・どうやって」の六つの要素に、 資料の言葉text)、正規化した形name / cat)、機械の値refs / lat lng / start end)、編者の言葉note)を分けて置く。

要素とは、一つの問いに答える鍵のまとまりである。六つともオブジェクトで、 値を一つ持つのではなく、同じ問いについての層をまとめて持つ。配列の項も日本語では 「要素」だが、そちらは who[] の主体、cite[] の出どころ、events[] の事象と、 いつも何の配列かを添えて書く。

原則は一つ——資料が言っていないことを書かない。 換算できない日付を推測せず、 座標を捏造せず、理由を推測しない。

事象が何であるか(旅の地点か、被害の記述か)と、並びが何を意味するかは 本書が定めない。dochu では、並びが順路であることは移動を書くことで主張されるDOCHU-1.0.md §3)。宣言する鍵は無い。

1.1 本書の役割——定めること、定めないこと

本書が定めるのは置き場である。どの値をどの要素に置き、何を書けば適合するか。

定めないことが三つある。役割でないことを、本書は主張しない。

なぜ
データの作り方どの資料をどう読み、どこで事象を切り、どの候補を採るか。資料ごとに違い、決めるのはその資料を持つ人と道具である
正しさ書かれた値が正しいかを測る手立てを本書は持たない。検証器(rokka/validate.py)が見るのは形だけである
確からしさの尺度「これは確実」「これは推量」を言う語彙を持たない。持てば、持ち主の違う判断を一つの物差しに畳むことになる

できるのは二つだけである。

そして文書そのものが解釈の産物である。 事象を一つに切ったこと、type を 決めたこと、cat を選んだこと、場所を点として扱ったこと——どれも誰かの判断で ある。資料に「事象」という単位は無い。cite は出どころを指すのであって、 純度を保証しない。上流の翻刻・校注・目録・辞書も、それぞれ誰かの読みである。

だから本書は、作り手と読み手が懸念を分け合う場所を用意するに留める。その 懸念が当たっているかを判定する仕組みは持たないし、持つべきでもない。

2. 文書

{ "format": "rokka/1.0", "meta": {},
  "events": [ { "id": 1, "where": { "name": "保土ヶ谷" } } ] }

これは適合する最小の文書。土台だけなので type は無い。 拡張を使うなら、 その名を名乗り、その規則にも従う。

{ "format": "dochu/1.0", "meta": {},
  "events": [ { "id": 1, "type": "stay", "where": { "name": "保土ヶ谷" } } ] }

最上位は JSON オブジェクト。formatrokka/1.0(土台だけ)か、拡張の名dochu/1.0 など)。meta に必須の鍵は無い。events は空でない配列。id は 整数で文書内に一意(連番も 1 始まりも不要。配列位置とは無関係)。

3. 事象の鍵

必須意味
id整数同一性。他の事象はこれで指す
type文字列事象の種別。本書は要求せず、語彙も定めない——要求するかも語彙も拡張の側(dochu なら必須で stay / move)。土台だけの文書では書かなくてよく、書くなら文字列である
who配列だれが(§5)。一人でも配列
whenオブジェクトいつ(§7
whereオブジェクトどこで(§6
whatオブジェクトなにを。行為も出来事も(「御発駕」「潰」)。text / cat / note
whyオブジェクトなぜ。原因も動機も。text は資料が述べるもの。推測を入れない
howオブジェクトどうやって。手段も様態も(「駕籠」「舟」「急ぎ」)。text / cat
note文字列か配列事象全体についての編者の言葉(§8)。言うことが一つとは限らないので配列でよい
cite配列出どころ(§8)。一つでも配列
refsオブジェクトその事象の記録の識別子(original_id など)
extオブジェクト資料固有の非標準項目。どの要素にも置ける。中身は本書が定めない

type は要素を持ちません。 資料が言っていることではなく、形式が立てた区別 だからです(Linked Data の rdf:type にあたる)。だから本書は要求しません ——区別を立てるのは拡張の仕事で、土台には立てるべき区別がない。読み手は、type の 無い事象や知らない type の事象を、落とさずそのままの一つの事象として扱います。

4. どの要素も同じ三層

何か
資料の言葉text資料がその項目をどう書いているか
正規化した形name / cat人や道具が扱える形に直したもの
機械の値refs / lat lng / start end外部の識別子、座標、換算値
編者の言葉note読み手に渡したい断り。何から値を得たかもここに(§8
編者の言葉noteその値についての編者の判断・疑義

textnote を混ぜない。 text は資料の言葉、note は編者の言葉。 note はどの要素にも置け(where.notewhen.note、主体の note)、 どこにあっても文字列。編者の言葉は、それが言う値と同じ要素に入れる。

確からしさの層は無い。 「頃」「たぶんこの寺」のような確からしさは形式化 しきれず、可視化にも使えないので、同じ要素の note に書く。

cat六つの要素のどれにも置ける(who は主体ごと)。資料の言葉をまとめた 代表の言葉であり、可視化の鍵。値は文字列で、既定の語彙は無い——資料の 言葉(「宿泊」「御小休」「潰」)をそのまま値にしてよい。記号・重み・色を 付けたいときだけ、定義表 meta.<要素>§9)に書く。

5. who — だれが

主体の配列。一項は { text?, name, cat?, refs?, note?, ext? }。一人でも配列で 書く(連名を区切り文字で結ぶと、一つの集合名と区別がつかない)。

who は人である。 個人と、人の集まり(「(藩主・家臣)」のような集合名)を書く。 判定は人かどうかだけで、役は問わない——行為した人も、影響を受けた人(死者・ 負傷者・訴えられた者)も、居合わせた人も who である。役を書き分けたいなら who[].cat(下の表)。

人以外を who に置かない——道具(駕籠・船)は how、人以外の対象(焼けた家、 潰れた蔵)は what(資料に固有の項目なら what.ext)。検証器はこれを見分けられない ので、適合条件ではなく、書く側の規則である(§12)。

name は一つの主体に一つの綴り。 資料の綴りは text に置き、文書を越えた 同一性は refs で言う。名は鍵の代用であり、分類は cat(定義表 meta.whocat で引く。名で引く表は無い)。

主体の要素は場所の要素と同じ三層でできている。人を主に扱う資料でも、形式を変えずに 書ける。

書きたいこと置き場
資料の綴り(「清河」)who[].text
表示する名(「清河八郎」)who[].name
(差出・宛所、原告・被告、藩主・家臣)who[].cat(開放語彙。意味は meta.who
人物の典拠(Wikidata・VIAF・人名典拠)who[].refs(鍵は開放)
その資料に固有の項目who[].ext
編者の判断・疑義who[].note

受け手のいる事象(差出と宛所、原告と被告、加害と被害)は、両方を who に 書き、who[].cat で役を分ける。人と人の関係(同行・主従・血縁)は本書が 持たない——関係は事象ではない。

6. where — どこで(場所)

必須意味
name表示する名(正規化した地名)
text資料がその場所をどう書いているか(一続き)
anchortext のうち位置を決めるのに使った部分。省略時は name
relationname と点の関係。exact(既定)/ within(名は点の中)/ near / area(名自体が広がりで点は代表)
lat / lngWGS84 の度。両方揃える。緯度 −90〜90、経度 −180〜180
refs場所の識別子(geolod / uri / shukuba_id / chimei_id
note場所についての編者の言葉。座標を何から得たかもここに(§8
place資料が名指す、位置に使わなかった細かい場所

位置の決め方は形から分かる——refs があれば識別子にリンク、無くて lat/lng があれば座標を直接、どちらも無ければ位置不明。位置不明の事象も落とさない。 リンク先の座標の精度は識別子側の属性で、本書は扱わない。確からしさの語は無く、 疑義は note に書く。

引く側の形式は、場所ではない where を定めてよい(dochu の移動は区間で、 from / to を持つ。DOCHU-1.0.md §4)。

例:資料は「馬喰町壱丁目大松や佐兵衛」と書く。表示は「大松屋」。位置は「馬喰町 壱丁目」で決めた。大松屋はその中にある。

{ "text": "馬喰町壱丁目大松や佐兵衛", "anchor": "馬喰町壱丁目",
  "name": "大松屋", "relation": "within",
  "lat": 35.694166, "lng": 139.783333, "refs": { "geolod": "zeSg6X" } }

7. when — いつ

意味
text資料自身の日付表記そのまま(when を書くなら必須)。時刻を混ぜない
text_end終了日の表記が違うとき
time_text資料自身の時刻表記(「四時過」)
start / end換算値。ISO 8601 の暦日付・時刻。精度は年〜秒の五段(YYYY / YYYY-MM / YYYY-MM-DD / …Thh:mm / …Thh:mm:ss)、時間帯は任意Z±hh:mm)。実在する日であること。換算できたときだけendstart より前でない
note時についての編者の言葉(「上旬」「頃」、換算の仕方)。全事象で同じ一文なら meta.note

start / end は瞬間ではなく期間を名指す。 書いた精度がその期間である—— 1855 は 1855 年のあいだ、1855-11 はその月のあいだ、1855-11-11 はその日、 1855-11-11T09:00 はその分のあいだ、…T09:00:30 はその秒。精度を上げて比べては ならない——18551855-11-11 より前ではない(11 月 11 日はその年のうちに ある)。年しか分からない資料に日を作らせないための形で、1855 と書くことと 1855-01-01 と書くことは意味が違う(後者は元日である)。

時間帯は任意で、比較には使わない。 資料が時間帯を言うなら書いてよい(航海の 記録など)。ただし比較は壁時計の読みで行い、時間帯で値をずらしてはならない ——時間帯のある値と無い値は本来比べられないので、混ざった文書のために規則を 決めてある。時間帯は読み手が使ってよい追加の情報だが、それを使って時間帯なしの 値を動かしてはならない。

when そのものが任意(日付の無い資料はある。日付のある事象と無い事象が混ざって いてもよい)。when.end を次の事象の start から補わない——埋まっていない 飛びは資料の沈黙で、読み手も埋めない。幅・確からしさ・暦の項目は無い。

8. cite / refs / note / ext

8.1 note の形

文字列か、文字列の配列。一件なら文字列のままでよい。読み手は「文字列なら 一件の配列と見なす」。

"note": [
  "地名体系IDは「小矢部村」。橋ピンポイントではない",
  "nrct(推定手法 honda)の 160000394500 から座標を定めた"
]

一つの値について言うことが一つとは限らないので、配列にする——上の例は学芸員の 断りと変換器の言い分である。

note は散文である。 誰が言っているかは文中で名乗る。本書は書き手の語彙を 定めず、読み手に判定させない(§1.1)。

全事象に同じ一文になるものは meta.note に一度書く(「暦の換算は HuTime」 「道なりの線は…に照合して引いた」)。事象ごとに違うものだけが事象の note に来る ——どの候補をどう選んだか、何を確かめられなかったか。

9. meta

必須の鍵は無い。title / subtitle / note文書についての編者の言葉。 事象の note と同じく文字列か、文字列の配列。作り手が読み手に渡したい断り書きは ここに置く——「原本を直に読んでいない」「座標は識別子から解いた」「推定震度は 注釈者の値で、資料の言葉ではない」)/ who when where what why how(その要素の cat の定義表 {cat: {…}}who も 要素の cat で引く)/ source(上流のデータ)/ attribution / knobs / ext。 引く側の形式は meta の鍵を加えてよい。

定義表の項目はオブジェクトで、鍵は開放。読み手が理解する鍵は次のとおり、すべて任意。

意味
label文字列表示名。無ければ cat の値そのもの
icon文字列一〜二文字の記号
weight相対的な重み。1 が普通
color文字列

meta.knobs — 読み手への注文

オブジェクト。読み手にどう見せてほしいかを、文書が名指しで頼む場所。 鍵も値も読み手のもので、本書は定めない——知らない注文は無視されるext と 同じ扱い)。

"meta": { "knobs": { "play": "off" } }

knobs は資料についての主張ではない。 読み手は knobs から資料の性質を 推し量ってはならず、書く側も、要素に書くべきことを knobs で言い換えては ならない。作業の記録も入れない——検証器やエディタの指摘・了解印・ビルドの 診断は文書に入れない。この形式は公開の最終版であって、作業の記録ではない。

解説は §8.1

10. 語彙

項目語彙既定開閉
type拡張が定める(本書は定めない)
where.relationexact / within / near / areaexact
cat(六つの要素)既定の語は無い無くてよいmeta.<要素> で定義)

cat に既定の語彙は無い。 語彙は文書ごとに cat の値そのものが定め、意味 (記号・重み・色)は定義表 meta.<要素> が与える。読み手は値を名指して分岐しては ならない。

11. 適合条件

本書に適合する文書は、次の 37 条をすべて満たす。番号は拡張と共通の列で、 DOCHU-1.0.md §7 の 6 条と合わせて 43 条になる。番号は飛ぶ——数えるのは 表に挙げた条であって、番号の最大値ではない。検証器 rokka/validate.py の ERROR と 一対一である。

条は形しか見ない。 値が正しいか、同定が当たっているか、注釈が妥当かは 条の外にある(§1.1)——測る手立てを本書は持たない。

文書

内容
C1最上位は JSON オブジェクトである
C2formatrokka/1.0 か、読み手が知っている拡張の名である
C3meta はオブジェクトである
C4events は配列であり、空でない

事象(共通)

内容
C5各要素はオブジェクトである
C6id は整数である
C7id は文書内で一意である
C9when / where / what / why / how はオブジェクトである
C10note は文字列か、文字列の配列である(事象・要素・主体、どこでも)
C11where.refs はオブジェクトである
C12who は配列である
C13who の要素はオブジェクトである
C14who の要素に name がある
C15要素の name は文字列である
C16要素の refs はオブジェクトである
C40cat は文字列である(要素・主体、どこでも)
C41meta.<要素> の定義表はオブジェクトである
C42定義表の項目はオブジェクトである
C43ext はオブジェクトである(事象・要素・主体、どこでも)
C44meta.knobs はオブジェクトである

場所の where

内容
C17name がある
C18relationexact / within / near / area のいずれかである
C19anchor は文字列である
C20latlng は両方揃っている
C21座標は数値である
C22緯度は −90〜90 の範囲にある
C23経度は −180〜180 の範囲にある
C45地点の wheregeometry は無い(線は移動の要素のもの)

when(書く場合)

内容
C28when はオブジェクトである
C29text がある
C30time_text は文字列である
C31start / end は ISO 8601 の暦日付・時刻(年〜秒の五段の精度と、任意の時間帯)で、実在する日である
C32endstart より前でない

出どころ・識別子・meta

内容
C33cite は配列である
C34cite の要素はオブジェクトである
C35refs はオブジェクトである
C38meta.note は文字列か、文字列の配列である

誤りではないものwho / what.text / cite.source の無いこと、座標の無い 事象、日付のある事象と無い事象の混在、cat が定義表に無いこと、最上位の未知の鍵 (検証器は ext を勧めるだけ)。

12. 書く側と読む側

書く側:資料が言っていないことを埋めない(what.text が無ければ書かない、換算 できなければ start を書かない、理由を推測しない)。資料の言葉を別の問いの要素に 入れない。when.text は原表記。座標を直接置いたら note に誰がどう置いたか。 who.name は一つの主体に一つの綴り。 cat も一つの種類に一つの綴り—— cat に既定の語彙は無い(§10)ので、揃えるのは書く側の仕事である。同じことを 別の語で呼ばない(泊まったのに一方が「宿泊」、他方が「到着」になっていないか)。 定義表に無い cat は誤りではない(§11)が、書いた catmeta.<要素> に 挙げておくと、語彙が一覧になって揺れが見えるwho は人だけ——ただし人なら役は 問わない(道具は how、人以外の対象は what§5)。こちらが置いた座標を資料が 言ったことにしない。when.end を次の事象から補わない。機械が推定した値は機械が推定したと 名乗るnote に散文で。§8)。

読む側:知らない鍵は無視し、落とさず、解釈しない。座標の無い事象を落とさない。 when の無い文書を拒まない。資料の主張(cite)と編者の言葉(note)を 同じ見出しに並べない。meta.note を隠さない——作り手の断り書きが読み手に 届かなければ、書いた意味がない(§1.1)。cat の値を名指して分岐しない。

13. 例

{ "format": "dochu/1.0",
  "meta": { "title": "安政江戸地震の被害記録",
            "what": { "潰": { "label": "潰れ・崩れ", "icon": "潰", "color": "#bc3f2b" } } },
  "events": [
    { "id": 1, "type": "stay",
      "what":  { "text": "大にゆりくづれ", "cat": "潰",
                 "ext": { "intensity": 3, "damage": ["collapse"] } },
      "where": { "text": "千住宿", "name": "千住",
                 "lat": 35.747777, "lng": 139.800555,
                 "refs": { "chimei_id": "10026507" },
                 "note": "同定の候補が一つに決まった(ansei2 の注釈)" },
      "cite":  [ { "source": "L000006", "page": "L000006_003 243-249" } ],
      "refs":  { "original_id": "YhcoHHq7bvoTmeKidV8n" } }
  ] }

この事象は旅ではない。六何の要素はそのまま使え、移動の規定は一つも要らない。