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დიაგრამის ვარიანტი

კვანძის ბლოკი

აცხადებს ერთეულს დიაგრამაზე. თითოეულ კვანძს აქვს უნიკალური ID, სემანტიკური 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ჯგუფის ID, რომელსაც ეკუთვნის ეს კვანძი (ალტერნატივა group.members)
attrsAttrMapNoთვითნებური გასაღები-მნიშვნელობის მეტამონაცემები - სტრიქონები, რიცხვები, ლოგიკური ან მასივები
ℹ️

23 ტიპის კვანძი

ყველა 23 მნიშვნელობა: service database queue cache gateway user actor system external] process process broker scheduler load_balancer cdn dns firewall client mobile 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წყაროს კვანძის ID
directionEdgeDir
"->""<->""--"
Yesისრის ტიპი ჩაწერილია ხაზში
toidentifierYesსამიზნე კვანძის ID
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შედარებითი სატრანსპორტო წონა - მძიმე კიდეები უფრო სქელია
asyncbooleanNoროდესაც true, კიდე გამოიხატება როგორც წყვეტილი (გაახანგრძლივე და დაივიწყე)
attrsAttrMapNoთვითნებური მეტამონაცემები — გადაცემულია 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-ზე.

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 (ან W501, როდესაც severity: warn). 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 კვანძს უნდა ჰქონდეს მინიმუმ ერთი მიმართული კიდე OBJECT კვანძთან.
  • `!<->` — არ შეიძლება არსებობდეს ორმხრივი კიდე SUBJECT და OBJECT კვანძებს შორის.
  • `<->` — თითოეულ SUBJECT კვანძს უნდა ჰქონდეს ორმხრივი კიდე ზოგიერთ OBJECT კვანძთან.
  • `in` — ყოველი SUBJECT კვანძი უნდა იყოს OBJECT ჯგუფის წევრი.
  • `!in` — არცერთი SUBJECT კვანძი არ შეიძლება იყოს OBJECT ჯგუფის წევრი.
💡

სუბიექტისა და ობიექტის ნიშნები

თითოეული ჟეტონი შეიძლება იყოს კვანძის ტიპი (database, external, …), ჯგუფის id (მაგ. data_tier) ან * (ყველა კვანძის შესაბამისი სიმბოლო).

იმპორტის ბლოკი

ყოფს დიდ დიაგრამებს მრავალ .dtro ფაილზე. გადამწყვეტი აერთებს იმპორტირებულ IR-ს მშობელში ვალიდაციამდე. გამოიყენეთ as სახელთა ინტერვალისთვის და expose კონკრეტული ID-ების თეთრ სიაში.

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სახელთა სივრცის მეტსახელი — ყველა იმპორტირებული ID არის პრეფიქსი alias.id
exposeidentifier[]Noთეთრი სია — მხოლოდ ეს ID არის გაერთიანებული მშობელ 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კონკრეტული კვანძის ID-ზე გამოყენებული სტილები - უმაღლესი პრიორიტეტი
by_edge_kindRecord<EdgeKind, StyleProps>Noსტილები გამოიყენება მოცემული ტიპის ყველა კიდეზე
by_edge_attrRecord<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-ზე ნაბიჯ-ნაბიჯ მიმოხილვისთვის.
გახსენით დიაგრამის შემქმნელი

სცადეთ სრული ენა პირდაპირ ეთერში — ჩასვით ნებისმიერი ფრაგმენტი ზემოთ და გადაამოწმეთ მყისიერად.

Schema v1 · Updated October 2026