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 system external] process process broker scheduler load_balancer cdn dns firewall client mobile 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 | — | წყაროს კვანძის 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 event publish] subscribe subscribe 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 | [] | კვანძის ან ჯგუფის იდენტიფიკატორის ჩართვა — უპირატესობა აქვს 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)
გაფრთხილებები (W×××)
- `W301` - დუბლიკატი კიდე (იგივე საწყისი/to/სახის/ეტიკეტის)
- `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-ზე ნაბიჯ-ნაბიჯ მიმოხილვისთვის.
სცადეთ სრული ენა პირდაპირ ეთერში — ჩასვით ნებისმიერი ფრაგმენტი ზემოთ და გადაამოწმეთ მყისიერად.