Language Reference
Full syntax — every block, field, and diagnostic code
הפניה לשפה
התייחסות תחביר מלאה עבור Datro DSL (קבצי .dtro). כל סוג בלוק, כל שדה, כל קוד אבחון - הכל במקום אחד.
כותרת קסומה
כל קובץ .dtro חייב להתחיל בכותרת הקסם בשורה 1. המנתח מחזיר E100 אם הוא חסר או פגום.
#!DATRO 1.0בלוק מטה
מטא נתונים אופציונליים ברמת המסמך. מייצר רמז מידע I003 אם מושמט. כל השדות הם מחרוזות/מערכים אופציונליים מלבד kind.
#!DATRO 1.0
meta {
title: "Payment Service"
version: "2.1.0"
description: "Handles card and crypto charges"
author: "jane@example.com"
owner: "payments-team"
tags: ["payments", "critical"]
sla: "99.95%"
criticality: "P0"
kind: architecture
}| Field | Type | Required | Default | Description |
|---|---|---|---|---|
title | string | No | — | כותרת דיאגרמה הניתנת לקריאה על ידי אדם |
version | string | No | — | גרסה סמנטית של התרשים |
description | string | No | — | תיאור טקסט חופשי |
author | string | No | — | שם המחבר או אימייל |
owner | string | No | — | צוות או אדם אחראי |
tags | string[] | No | — | תגי סיווג שרירותיים |
sla | string | No | — | מטרה ברמת השירות, למשל. "99.9%" |
criticality | string | No | — | דרג ביקורתיות: "P0" | "high" | "medium" | "low" |
kind | DiagramKind "architecture""mindmap""state""sequence""algorithm" | No | architecture | וריאנט דיאגרמה |
בלוק צומת
מצהיר על ישות בתרשים. לכל צומת יש מזהה ייחודי, type סמנטי השולט בצורתו המעובדת ובצבע ברירת המחדל שלו, ובלוק attrs אופציונלי עבור מטא נתונים.
# Minimal
node api_gw { type: gateway label: "API Gateway" }
# With attrs block
node payment_svc {
type: service
label: "Payment Service"
attrs {
tech: "nestjs"
owner: "payments-team"
deprecated: false
sla: "99.95%"
}
}
# Inline attrs (alternative syntax)
node db { type: database label: "Payments DB" attrs { tech: "postgres" } }| Field | Type | Required | Default | Description |
|---|---|---|---|---|
id | identifier | Yes | — | מזהה צומת ייחודי - אלפאנומרי + קו תחתון |
type | NodeType "service""database""queue""cache""gateway""user""actor""system""external""process""storage""function""broker""scheduler""load_balancer""cdn""dns""firewall""client""mobile""web""iot""unknown" | No | unknown | קטגוריית צומת סמנטי |
label | string | No | (node id) | הצג טקסט המוצג בתרשים |
group | identifier | No | — | מזהה קבוצה שהצומת הזה שייך אליו (חלופה ל-group.members) |
attrs | AttrMap | No | — | מטא נתונים שרירותיים של מפתח-ערך - מחרוזות, מספרים, בוליאנים או מערכים |
23 סוגי צמתים
כל 23 הערכים: service database queue cache gateway user actor system external] [[[0][TK9] [1][TK9]]] broker scheduler load_balancer cdn dns firewall client mobile web]] [[][TK2][1]
בלוק קצה
מכריז על קשר בין שני צמתים. כיוון הקצה כתוב ישירות בהצהרה: -> (מכוון), <-> (דו-כיווני), או -- (לא מכוון).
# Minimal
edge api_gw -> payment_svc { kind: http }
# Full metadata
edge payment_svc -> stripe {
kind: http
label: "charge API"
weight: 2.0
async: false
attrs { sla: "200ms" }
}
# Bidirectional edge
edge cache <-> service { kind: read }
# Undirected edge
edge svc_a -- svc_b { kind: depends }| Field | Type | Required | Default | Description |
|---|---|---|---|---|
from | identifier | Yes | — | מזהה צומת המקור |
direction | EdgeDir "->""<->""--" | Yes | — | סוג החץ כתוב בשורה |
to | identifier | Yes | — | מזהה צומת יעד |
kind | EdgeKind "http""grpc""graphql""websocket""tcp""udp""query""event""publish""subscribe""stream""call""read""write""deploys""monitors""depends""extends""implements""triggers""unknown" | No | unknown | סוג קשר סמנטי - מניע צבע וסגנון |
label | string | No | — | טקסט קצר מוצג על קו הקצה |
weight | number | No | 1.0 | משקל תנועה יחסי - קצוות כבדים יותר הופכים לעבים יותר |
async | boolean | No | false | כאשר true, קצה מוצג כמקווקו (אש ושכח) |
attrs | AttrMap | No | — | מטא נתונים שרירותיים - עברו ל-JSON IR וטיפים לכלים |
21 סוגי קצה
כל 21 הערכים: http grpc graphql websocket tcp udp query event publish] [[[0][TK9] [1][TK9]]] read write deploys monitors depends extends implements triggers unknown.
בלוק קבוצתי
מקבץ צמתים קשורים לתוך תיבת תת-גרף מסומנת. צומת עשוי להשתייך לקבוצה אחת לכל היותר - E403 יורה על קונפליקטים. ניתן לקנן קבוצות: מזהה חבר עשוי להתייחס למזהה קבוצה אחר.
group data_tier {
label: "Data Layer"
members: [payments_db, fraud_cache, audit_log]
attrs { compliance: "PCI-DSS" }
}
# Alternative: assign group on the node
node payments_db {
type: database
label: "Payments DB"
group: data_tier
}| Field | Type | Required | Default | Description |
|---|---|---|---|---|
id | identifier | Yes | — | מזהה קבוצה ייחודי |
label | string | No | (group id) | הצג תווית עבור תיבת הגרף המשנה |
members | identifier[] | No | [] | מזהי צומת או קבוצה שיש לכלול - עדיפות על node { group: X } |
attrs | AttrMap | No | — | מטא נתונים שרירותיים |
בלוק אילוץ
מכריז על כלל ארכיטקטוני שהמאמת מעריך מול ה-IR. הפרות מייצרות E501 (או W501 כאשר severity: warn). השדה rule משתמש בדקדוק תמציתי בעל שלושה אסימונים.
# Prohibition: databases may not call external services
constraint {
id: "no-db-external"
rule: "database !-> external"
message: "Databases must not connect directly to external APIs"
severity: error
}
# Requirement: every gateway must connect to a service
constraint {
rule: "gateway -> service"
message: "Each gateway must route to at least one service"
severity: warn
}
# Membership: all databases must be in the data_tier group
constraint {
rule: "database in data_tier"
message: "All database nodes must belong to the data_tier group"
severity: error
}| Field | Type | Required | Default | Description |
|---|---|---|---|---|
id | string | No | — | מזהה כלל קריא אנושי אופציונלי |
rule | string | Yes | — | SUBJECT VERB OBJECT - ראה טבלת פעלים למטה |
message | string | No | — | הודעה מותאמת אישית מוצגת באבחון כאשר הכלל מופר |
severity | ConstraintSeverity "error""warn" | No | error | חומרת אבחון בעת הפרה |
פעלי אילוץ
- `!->` — אין צומת
SUBJECTיכול להיות בעל קצה מכוון לכל צומתOBJECT. - `->` - כל צומת
SUBJECTחייב להיות בעל קצה מכוון אחד לפחות לצומתOBJECT. - `!<->` — ייתכן שלא קיים קצה דו-כיווני בין צמתים
SUBJECTו-OBJECT. - `<->` - כל צומת
SUBJECTחייב להיות בעל קצה דו-כיווני לצומתOBJECTכלשהו. - `in` — כל צומת
SUBJECTחייב להיות חבר בקבוצתOBJECT. - `!in` — אף צומת
SUBJECTלא יכול להיות חבר בקבוצתOBJECT.
אסימוני נושא ואובייקט
כל אסימון יכול להיות סוג צומת (database, external, …), מזהה קבוצה (למשל data_tier), או * (תו כללי תואם לכל צומת).
בלוק ייבוא
מפצל דיאגרמות גדולות על פני קבצי .dtro מרובים. הפותר ממזג IR מיובא לתוך האב לפני אימות. השתמש ב-as עבור מרווח שמות ו-expose כדי לרשום מזהים ספציפיים.
# Import everything from another .dtro file
import "auth.dtro"
# Import with a namespace alias — IDs become auth.user_service, etc.
import "auth.dtro" as auth
# Import only specific IDs (whitelist)
import "infra.dtro" as infra expose [load_balancer, cdn]| Field | Type | Required | Default | Description |
|---|---|---|---|---|
path | string | Yes | — | נתיב יחסי או מוחלט לקובץ .dtro |
as | identifier | No | — | כינוי מרחב שמות - כל המזהים המיובאים מקבלים קידומת alias.id |
expose | identifier[] | No | — | רשימת היתרים - רק המזהים האלה ממוזגים ל-IR האב |
בלוק פריסה
רמזים למעבד כיצד לסדר את הגרף. כל השדות הם אופציונליים - המעבד משתמש בברירות מחדל הגיוניות כאשר החסימה מושמטת.
layout {
direction: LR # LR | RL | TB | BT
algo: dagre # dagre | dot | elk | force | none
node_sep: 60 # px between nodes in the same rank
rank_sep: 120 # px between ranks
margin: 20 # graph margin in px
cluster_padding: 16 # padding inside group boxes
}| Field | Type | Required | Default | Description |
|---|---|---|---|---|
direction | LayoutDirection "LR""RL""TB""BT" | No | LR | גרף כיוון זרימה |
algo | LayoutAlgo "dagre""dot""elk""force""none" | No | dagre | אלגוריתם פריסה |
node_sep | number | No | 60 | מינימום פיקסלים בין צמתים סמוכים באותה דרגה |
rank_sep | number | No | 120 | מינימום פיקסלים בין הדרגות |
margin | number | No | 20 | גרף שולי גרף בפיקסלים |
cluster_padding | number | No | 16 | ריפוד נוסף בתוך תיבות תוחמות קבוצתיות |
בלוק נושא
שולט במראה החזותי של הדיאגרמה המעובדת. ה-palette ממפה סוגי צמתים לצבעי hex. בלוק המשנה accessibility מאפשר בדיקת ניגודיות אוטומטית של WCAG 2.1.
theme {
name: "Corporate"
palette {
service: "#D0E8FF"
database: "#FFE8C0"
gateway: "#FFD0D0"
queue: "#E8D0FF"
cache: "#C0FFE8"
external: "#F0F0F0"
background: "#FFFFFF"
}
typography {
font_family: "Inter, sans-serif"
node_font_size: 11
edge_font_size: 9
label_font_weight: "600"
}
accessibility {
min_contrast: AA # AA | AAA | none
max_label_length: 60
}
}צבע גופן אוטומטי
יצואן DOT בוחר אוטומטית טקסט שחור או לבן עבור כל מילוי צומת באמצעות נוסחת הבהירות היחסית WCAG 2.1. לעולם אינך צריך להגדיר צבע טקסט נפרד.
בלוק בסגנון
עוקפות עדינות לכל אלמנט שהוחלו לאחר ערכת הנושא. מפל הכללים: by_id עוקף את by_type. כל תת בלוק ממפה מפתח למפת נכסים.
style {
# Override by node type
by_type {
database { fill: "#FFF3CD" stroke: "#E6A817" shape: cylinder }
external { fill: "#F8F9FA" stroke: "#6C757D" dash: true }
}
# Override individual node by id
by_id {
stripe { fill: "#635BFF" stroke: "#4B44CC" }
}
# Style edge kinds
by_edge_kind {
query { color: "#E6A817" width: 2 }
publish { color: "#198754" dash: true }
}
# Style edges that carry a boolean attr set to true
by_edge_attr {
async { dash: true color: "#ADB5BD" }
}
}| Field | Type | Required | Default | Description |
|---|---|---|---|---|
by_type | Record<NodeType, StyleProps> | No | — | סגנונות שהוחלו על כל הצמתים מסוג נתון |
by_id | Record<id, StyleProps> | No | — | סגנונות שהוחלו על מזהה צומת ספציפי - העדיפות הגבוהה ביותר |
by_edge_kind | Record<EdgeKind, StyleProps> | No | — | סגנונות מיושמים על כל הקצוות מסוג מסוים |
by_edge_attr | Record<attrName, StyleProps> | No | — | סגנונות מוחלים על קצוות שבהם ה-attr בוליאני בשם הוא true |
קודי אבחון
כל האבחון כולל מיקום code, severity, message, ומיקום line:col אופציונלי. הטבלה שלהלן מפרטת כל קוד ששרשרת הכלים יכולה לפלוט.
שגיאות (E×××)
- `E100` — כותרת הקסם
#!DATRO 1.0חסרה או פגומה - `E201` - זיהוי צומת כפול
- `E202` - הצומת מפנה למזהה קבוצה לא ידוע
- `E301` — צומת קצה
fromלא נמצא - `E302` — צומת קצה
toלא נמצא - `E303` — קצה
weightהוא שלילי - `E401` - מזהה קבוצה כפול
- `E402` - קבוצה
membersמפנה למזהה לא ידוע - `E403` - הצומת מוקצה ליותר מקבוצה אחת
- `E404` - זוהה קינון קבוצתי מעגלי
- `E500` - לכלל אילוץ יש שגיאת תחביר
- `E501` - כלל האילוץ מופר (החומרה משקפת את
severityשל האילוץ עצמו)
אזהרות (W×××)
- `W301` — קצה משוכפל (אותו מ/אל/סוג/תווית)
- `W501` - כלל אילוץ משתמש בעבודה לא ידועה
- `W601` — תווית הצומת עולה על
max_label_length(ברירת מחדל 80 תווים) - `W602` — צבע פלטת ערכת הנושא נופל מתחת לניגודיות WCAG AA (4.5:1)
- `W603` — צבע פלטת ערכת הנושא נופל מתחת לניגודיות WCAG AAA (7.0:1)
רמזים למידע (I×××)
- `I001` — צומת מבודד — אין קצוות שמתחברים אליו
- `I002` — קבוצה ריקה — לא הוכרזו חברים
- `I003` — אין חסימה
meta— מומלץ לתיעוד - `I601` - לא הוגדרה לוח ערכות נושא - בדיקות ניגודיות דילגו
השלבים הבאים
- השתמש ב-CLI Reference כדי לאמת, לעצב ולייצא משורת הפקודה.
- הטמע דיאגרמות ב-Markdown עם ה-Markdown plugin.
- חזור אל Quick Start להדרכה שלב אחר שלב.
נסה את השפה המלאה בשידור חי - הדבק כל קטע למעלה ואמת באופן מיידי.