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 | Դիագրամի տարբերակ |
հանգույցի բլոկ
Դիագրամում հայտարարում է սուբյեկտ: Յուրաքանչյուր հանգույց ունի եզակի id, իմաստային 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 | — | Խմբի ID-ն, որին պատկանում է այս հանգույցը (այլընտրանք group.members) |
attrs | AttrMap | No | — | Բանալին-արժեքի կամայական մետատվյալներ՝ տողեր, թվեր, բուլյաններ կամ զանգվածներ |
23 հանգույցների տեսակներ
Բոլոր 23 արժեքները՝ service database queue cache gateway user actor broker scheduler load_balancer cdn dns client mobile web cdn firewall client
եզրային բլոկ
Հայտարարում է հարաբերություն երկու հանգույցների միջև: Եզրային ուղղությունը ուղղակիորեն գրված է հռչակագրում.
# 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 | — | Աղբյուրի հանգույցի id |
direction | EdgeDir "->""<->""--" | Yes | — | Սլաքի տեսակը գրված է ներդիրում |
to | identifier | Yes | — | Թիրախային հանգույցի id |
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 read write deploys monitors depends extends implements triggers unknown.
խմբային բլոկ
Կլաստերավորում է կապված հանգույցները պիտակավորված ենթագրաֆիկի վանդակում: Հանգույցը կարող է պատկանել առավելագույնը մեկ խմբի՝ E403 կրակում է կոնֆլիկտների վրա: Խմբերը կարող են տեղադրվել. անդամի ID-ն կարող է հղում կատարել մեկ այլ խմբի ID-ին:
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 | [] | Հանգույցի կամ խմբի ID-ներ, որոնք պետք է ներառվեն — գերակայում է 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, …), խմբի id (օրինակ՝ data_tier) կամ * (յուրաքանչյուր հանգույցին համապատասխանող նշան):
ներմուծման բլոկ
Մեծ դիագրամները բաժանում է բազմաթիվ .dtro ֆայլերի վրա: Լուծիչը միաձուլում է ներմուծված IR-ը ծնողի մեջ նախքան վավերացումը: Օգտագործեք as-ը անունների տարածության համար և expose-ը՝ որոշակի ID-ների սպիտակ ցուցակում տեղադրելու համար:
# 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 | — | Անվանատարածքի այլանուն. բոլոր ներմուծված ID-ները նախածանցով են alias.id |
expose | identifier[] | No | — | Սպիտակ ցուցակ. միայն այս ID-ներն են միավորվում մայր 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 | — | Ոճեր, որոնք կիրառվում են կոնկրետ հանգույցի id-ի վրա՝ ամենաբարձր առաջնահերթությունը |
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` — Կրկնվող հանգույցի id
- `E202` — Հանգույցը հղում է անում անհայտ խմբի id-ին
- `E301` — Եզր
fromհանգույցը չի գտնվել - `E302` — Եզր
toհանգույցը չի գտնվել - `E303` — Եզր
weightբացասական է - `E401` — Կրկնվող խմբի id
- `E402` — Խումբը
membersհղում է անհայտ ID-ին - `E403` — Հանգույցը նշանակված է մեկից ավելի խմբի
- `E404` — Հայտնաբերվել է շրջանաձև խմբակային բույն
- `E500` — Սահմանափակման կանոնն ունի շարահյուսական սխալ
- `E501` — Սահմանափակման կանոնը խախտված է (խստությունը արտացոլում է սահմանափակման սեփական
severity)
Զգուշացումներ (Վ×××)
- `W301` - Կրկնվող եզր (նույնը / to/ kind / label)
- `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՝ քայլ առ քայլ ուսումնասիրության համար:
Փորձեք ամբողջ լեզուն ուղիղ եթերում՝ տեղադրեք վերևում գտնվող ցանկացած հատված և անմիջապես հաստատեք: