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 [1]K process [1]K broker scheduler load_balancer cdn dns firewall client mobile web scheduler web cdn
шеткі блок
Екі түйін арасындағы қатынасты жариялайды. Жиек бағыты декларацияда тікелей жазылады: -> (бағытталған), <-> (екі бағытты) немесе -- (бағытсыз).
# 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 subscribe [1]K subscribe [1]K 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 тудырады (немесе severity: warn кезінде W501). 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түйінінің->] түйініне бағытталған кемінде бір жиегі болуы керек. - `!<->` —
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 | — | Аталған логикалық аттр true болатын жиектерге қолданылатын мәнерлер |
Диагностикалық кодтар
Барлық диагностикалар code, severity, message және қосымша line:col орнын қамтиды. Төмендегі кестеде құралдар тізбегі шығара алатын әрбір код берілген.
Қателер (E×××)
- `E100` — Сиқырлы тақырып
#!DATRO 1.0жоқ немесе дұрыс емес - `E201` — Түйін идентификаторының көшірмелері
- `E202` — Түйін белгісіз топ идентификаторына сілтеме жасайды
- `E301` — Edge
fromтүйіні табылмады - `E302` — Edge
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 бетіне оралыңыз.
Тікелей эфирде толық тілді қолданып көріңіз — жоғарыдағы кез келген үзіндіні қойып, бірден растаңыз.