Diagram Maker›Language Reference
📐

Language Reference

Full syntax — every block, field, and diagnostic code

הפניה לשפה

התייחסות תחביר מלאה עבור Datro DSL (קבצי .dtro). כל סוג בלוק, כל שדה, כל קוד אבחון - הכל במקום אחד.

23 סוגי צמתים21 סוגי קצה6 פעלי אילוץWCAG 2.1 AA/AAA

כותרת קסומה

כל קובץ .dtro חייב להתחיל בכותרת הקסם בשורה 1. המנתח מחזיר E100 אם הוא חסר או פגום.

DATRO
#!DATRO 1.0
שורה ראשונה נדרשת - `1.0` היא גרסת המפרט הנוכחית

בלוק מטה

מטא נתונים אופציונליים ברמת המסמך. מייצר רמז מידע I003 אם מושמט. כל השדות הם מחרוזות/מערכים אופציונליים מלבד kind.

DATRO
#!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
}
FieldTypeRequiredDescription
titlestringNoכותרת דיאגרמה הניתנת לקריאה על ידי אדם
versionstringNoגרסה סמנטית של התרשים
descriptionstringNoתיאור טקסט חופשי
authorstringNoשם המחבר או אימייל
ownerstringNoצוות או אדם אחראי
tagsstring[]Noתגי סיווג שרירותיים
slastringNoמטרה ברמת השירות, למשל. "99.9%"
criticalitystringNoדרג ביקורתיות: "P0" | "high" | "medium" | "low"
kindDiagramKind
"architecture""mindmap""state""sequence""algorithm"
Noוריאנט דיאגרמה

בלוק צומת

מצהיר על ישות בתרשים. לכל צומת יש מזהה ייחודי, type סמנטי השולט בצורתו המעובדת ובצבע ברירת המחדל שלו, ובלוק attrs אופציונלי עבור מטא נתונים.

DATRO
# 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" } }
FieldTypeRequiredDescription
ididentifierYesמזהה צומת ייחודי - אלפאנומרי + קו תחתון
typeNodeType
"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קטגוריית צומת סמנטי
labelstringNoהצג טקסט המוצג בתרשים
groupidentifierNoמזהה קבוצה שהצומת הזה שייך אליו (חלופה ל-group.members)
attrsAttrMapNoמטא נתונים שרירותיים של מפתח-ערך - מחרוזות, מספרים, בוליאנים או מערכים
ℹ️

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]

בלוק קצה

מכריז על קשר בין שני צמתים. כיוון הקצה כתוב ישירות בהצהרה: -> (מכוון), <-> (דו-כיווני), או -- (לא מכוון).

DATRO
# 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 }
FieldTypeRequiredDescription
fromidentifierYesמזהה צומת המקור
directionEdgeDir
"->""<->""--"
Yesסוג החץ כתוב בשורה
toidentifierYesמזהה צומת יעד
kindEdgeKind
"http""grpc""graphql""websocket""tcp""udp""query""event""publish""subscribe""stream""call""read""write""deploys""monitors""depends""extends""implements""triggers""unknown"
Noסוג קשר סמנטי - מניע צבע וסגנון
labelstringNoטקסט קצר מוצג על קו הקצה
weightnumberNoמשקל תנועה יחסי - קצוות כבדים יותר הופכים לעבים יותר
asyncbooleanNoכאשר true, קצה מוצג כמקווקו (אש ושכח)
attrsAttrMapNoמטא נתונים שרירותיים - עברו ל-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 יורה על קונפליקטים. ניתן לקנן קבוצות: מזהה חבר עשוי להתייחס למזהה קבוצה אחר.

DATRO
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
}
FieldTypeRequiredDescription
ididentifierYesמזהה קבוצה ייחודי
labelstringNoהצג תווית עבור תיבת הגרף המשנה
membersidentifier[]Noמזהי צומת או קבוצה שיש לכלול - עדיפות על node { group: X }
attrsAttrMapNoמטא נתונים שרירותיים

בלוק אילוץ

מכריז על כלל ארכיטקטוני שהמאמת מעריך מול ה-IR. הפרות מייצרות E501 (או W501 כאשר severity: warn). השדה rule משתמש בדקדוק תמציתי בעל שלושה אסימונים.

DATRO
# 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
}
FieldTypeRequiredDescription
idstringNoמזהה כלל קריא אנושי אופציונלי
rulestringYesSUBJECT VERB OBJECT - ראה טבלת פעלים למטה
messagestringNoהודעה מותאמת אישית מוצגת באבחון כאשר הכלל מופר
severityConstraintSeverity
"error""warn"
Noחומרת אבחון בעת הפרה

פעלי אילוץ

  • `!->` — אין צומת SUBJECT יכול להיות בעל קצה מכוון לכל צומת OBJECT.
  • `->` - כל צומת SUBJECT חייב להיות בעל קצה מכוון אחד לפחות לצומת OBJECT.
  • `!<->` — ייתכן שלא קיים קצה דו-כיווני בין צמתים SUBJECT ו-OBJECT.
  • `<->` - כל צומת SUBJECT חייב להיות בעל קצה דו-כיווני לצומת OBJECT כלשהו.
  • `in` — כל צומת SUBJECT חייב להיות חבר בקבוצת OBJECT.
  • `!in` — אף צומת SUBJECT לא יכול להיות חבר בקבוצת OBJECT.
💡

אסימוני נושא ואובייקט

כל אסימון יכול להיות סוג צומת (database, external, …), מזהה קבוצה (למשל data_tier), או * (תו כללי תואם לכל צומת).

בלוק ייבוא

מפצל דיאגרמות גדולות על פני קבצי .dtro מרובים. הפותר ממזג IR מיובא לתוך האב לפני אימות. השתמש ב-as עבור מרווח שמות ו-expose כדי לרשום מזהים ספציפיים.

DATRO
# 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]
FieldTypeRequiredDescription
pathstringYesנתיב יחסי או מוחלט לקובץ .dtro
asidentifierNoכינוי מרחב שמות - כל המזהים המיובאים מקבלים קידומת alias.id
exposeidentifier[]Noרשימת היתרים - רק המזהים האלה ממוזגים ל-IR האב

בלוק פריסה

רמזים למעבד כיצד לסדר את הגרף. כל השדות הם אופציונליים - המעבד משתמש בברירות מחדל הגיוניות כאשר החסימה מושמטת.

DATRO
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
}
FieldTypeRequiredDescription
directionLayoutDirection
"LR""RL""TB""BT"
Noגרף כיוון זרימה
algoLayoutAlgo
"dagre""dot""elk""force""none"
Noאלגוריתם פריסה
node_sepnumberNoמינימום פיקסלים בין צמתים סמוכים באותה דרגה
rank_sepnumberNoמינימום פיקסלים בין הדרגות
marginnumberNoגרף שולי גרף בפיקסלים
cluster_paddingnumberNoריפוד נוסף בתוך תיבות תוחמות קבוצתיות

בלוק נושא

שולט במראה החזותי של הדיאגרמה המעובדת. ה-palette ממפה סוגי צמתים לצבעי hex. בלוק המשנה accessibility מאפשר בדיקת ניגודיות אוטומטית של WCAG 2.1.

DATRO
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. כל תת בלוק ממפה מפתח למפת נכסים.

DATRO
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" }
  }
}
FieldTypeRequiredDescription
by_typeRecord<NodeType, StyleProps>Noסגנונות שהוחלו על כל הצמתים מסוג נתון
by_idRecord<id, StyleProps>Noסגנונות שהוחלו על מזהה צומת ספציפי - העדיפות הגבוהה ביותר
by_edge_kindRecord<EdgeKind, StyleProps>Noסגנונות מיושמים על כל הקצוות מסוג מסוים
by_edge_attrRecord<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 להדרכה שלב אחר שלב.
פתח את יוצר הדיאגרמות

נסה את השפה המלאה בשידור חי - הדבק כל קטע למעלה ואמת באופן מיידי.

Schema v1 · Updated October 2026