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] process process broker scheduler load_balancer] cdn dns firewall client mobile web cdn firewall

بلوک لبه

رابطه بین دو گره را اعلام می کند. جهت لبه مستقیماً در اعلان نوشته می‌شود: -> (جهت‌دار)، <-> (دو جهته)، یا -- (غیر جهت‌دار).

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 نوع لبه

همه ۲۱ مقدار: http grpc graphql] websocket tcp udp query event publish] subscribe subscribe 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 انواع گره ها را به رنگ های هگزا ترسیم می کند. بلوک فرعی 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 plugin نمودارها را در Markdown جاسازی کنید.
  • برای بررسی گام به گام به Quick Start برگردید.
دیاگرام ساز را باز کنید

زبان کامل را به صورت زنده امتحان کنید - هر قطعه را در بالا جای‌گذاری کنید و فوراً اعتبارسنجی کنید.

Schema v1 · Updated October 2026