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] process process broker scheduler load_balancer] cdn dns firewall client mobile web cdn firewall
بلوک لبه
رابطه بین دو گره را اعلام می کند. جهت لبه مستقیماً در اعلان نوشته میشود: -> (جهتدار)، <-> (دو جهته)، یا -- (غیر جهتدار).
# 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 نوع لبه
همه ۲۱ مقدار: http grpc graphql] websocket tcp udp query event publish] subscribe subscribe 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 انواع گره ها را به رنگ های هگزا ترسیم می کند. بلوک فرعی 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 plugin نمودارها را در Markdown جاسازی کنید.
- برای بررسی گام به گام به Quick Start برگردید.
زبان کامل را به صورت زنده امتحان کنید - هر قطعه را در بالا جایگذاری کنید و فوراً اعتبارسنجی کنید.