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

шеткі блок

Екі түйін арасындағы қатынасты жариялайды. Жиек бағыты декларацияда тікелей жазылады: -> (бағытталған), <-> (екі бағытты) немесе -- (бағытсыз).

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Салыстырмалы қозғалыс салмағы — ауыр шеттер қалыңырақ етеді
asyncbooleanNotrue болғанда, жиек сызықша ретінде көрсетіледі (өрт және ұмыту)
attrsAttrMapNoЕркін метадеректер — 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 қақтығыстар бойынша өрт. Топтарды кірістіруге болады: мүше идентификаторы басқа топ идентификаторына сілтеме жасай алады.

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 тудырады (немесе severity: warn кезінде W501). 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 түйінінің ->] түйініне бағытталған кемінде бір жиегі болуы керек.
  • `!<->` — 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Аталған логикалық аттр 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 бетіне оралыңыз.
Диаграмма жасау құралын ашыңыз

Тікелей эфирде толық тілді қолданып көріңіз — жоғарыдағы кез келген үзіндіні қойып, бірден растаңыз.

Schema v1 · Updated October 2026