Skip to content

文法

Playgroundリンク付きの例は、短い完全な .tdsl ファイルとして読める形にしています。各リンクには、同じ本文を source クエリに入れています。

Playground 本体は今後追加予定です。リンク先は /playground/?source=... の将来URLとして揃えています。

timeline "読書メモ" {
title "読書メモ";
unit year;
range 2024..2026;
calendar proleptic_gregorian;
}
lane "本" as books { kind custom; order 10; }
event books 2025 "Timeline DSLを試す" { id "event:first"; };

Playgroundで開く

.tdsl は、年表全体の timeline、縦軸の lane、時間要素の event / span / event_range を組み合わせます。

timeline "製品ロードマップ" {
title "製品ロードマップ";
unit year;
range 2025..2027;
calendar proleptic_gregorian;
}
lane "マイルストーン" as milestones { kind custom; order 10; }
event milestones 2026 "公開ベータ" {};

Playgroundで開く

range 2025..2027; は表示・検証の対象範囲です。まずは unit year;calendar proleptic_gregorian; を固定して、年単位の年表として作るのが分かりやすいです。

lane は年表の縦軸です。as milestones のように短いIDを付け、後続の eventspanevent_range から参照します。

lane "マイルストーン" as milestones { kind custom; order 10; }
event milestones 2026 "公開ベータ" {};

order は表示順です。小さい値ほど上に並びます。kind は分類用のメタデータとして扱います。

event は1年に置く点イベントです。

timeline "製品ロードマップ" {
title "製品ロードマップ";
unit year;
range 2025..2027;
calendar proleptic_gregorian;
}
lane "マイルストーン" as milestones { kind custom; order 10; }
event milestones 2026 "公開ベータ" { tags ["release"]; id "event:beta"; };

Playgroundで開く

event <lane-id> <year> "<label>" { ... }; の順で書きます。ラベルは年表上に表示されます。

span は存続期間や工程のように、開始年と終了年を持つ項目です。

timeline "小さなプロジェクト" {
title "小さなプロジェクト";
unit year;
range 2025..2028;
calendar proleptic_gregorian;
}
lane "工程" as phases { kind custom; order 10; }
span phases 2025..2026 "設計" { tags ["phase"]; id "span:design"; };
span phases 2026..2028 "実装" { tags ["phase"]; id "span:build"; };

Playgroundで開く

span <lane-id> <start>..<end> "<label>" { ... }; の順で書きます。

event_range は戦争、移行期間、障害対応など、出来事として扱いたい期間に使います。

timeline "リリース計画" {
title "リリース計画";
unit year;
range 2025..2027;
calendar proleptic_gregorian;
}
lane "作業" as work { kind custom; order 10; }
event_range work 2025..2026 "移行期間" { tags ["migration"]; };
event work 2027 "新体制で運用開始" {};

Playgroundで開く

見た目は期間を持つ点で span に近いですが、意味は「期間を持つ出来事」です。時代区分や所属期間は span、作業・事件・戦争は event_range に寄せると読み分けやすくなります。

eventspanevent_range{ ... } には共通のメタデータを書けます。

timeline "公開履歴" {
title "公開履歴";
unit year;
range 2024..2026;
calendar proleptic_gregorian;
}
lane "リリース" as releases { kind custom; order 10; }
event releases 2026 "v1.0公開" {
tags ["release", "stable"];
source wd:Q95;
origin manual;
id "event:v1";
};

Playgroundで開く

tags は分類、id はレビューや差分追跡で使う安定識別子です。source wd:Q95; はWikidata QIDを出典メタデータとして記録します。origin manual; は手書きデータであることを示します。

Wikidataを使う場合は、import wikidata でQIDを取り込み、map で年表要素へ変換します。

timeline "中国王朝" {
title "中国王朝";
unit year;
range -300..300;
calendar proleptic_gregorian;
}
lane "王朝" as dynasties { kind dynasty; order 10; }
event dynasties -221 "秦の天下統一" { tags ["manual"]; };
import wikidata as wd {
entity Q7209 as han_dynasty;
policy merge_by_source;
}
map wd.han_dynasty to span {
lane dynasties;
start claim(P571).year;
end claim(P576).year;
label label@ja ?? label@en;
tags ["dynasty", "imported"];
}

Playgroundで開く

ブラウザ版の Playground では、Wikidataのネットワーク取得は行いません。構文確認用として開けますが、import 由来の項目は描画結果から省かれることがあります。Webで確実に表示したい内容は、上の例の event dynasties -221 ... のように静的な eventspanevent_range として書いてください。

Wikidataを解決してJSONやHTMLへ出力する場合はCLIを使います。

Terminal window
tdsl build china.tdsl --pretty --output china.json
tdsl render china.tdsl --output china.html

CIでネットワーク取得を避けたい場合は、--offline を付けます。

Terminal window
tdsl build china.tdsl --offline --pretty