Diagram Maker›Language Reference
📐

Language Reference

Full syntax — every block, field, and diagnostic code

Referencja językowa

Pełna referencja syntax dla plików Datro DSL (.dtro-Pliki). Każdy typ bloku, każde pole, każdy kod diagnostyczny wszystko w jednym miejscu.

23 Typy węzłów21 Artykuły krawędzi6 OgraniczeniaWCAG 2.1 AA/AAA

Magiczne nagłówki

Każdy .dtro-Plik musi rozpocząć się od magicznego nagłówka w linii 1. Parser daje E100 w przypadku braku lub błędu.

DATRO
#!DATRO 1.0
Wymagane pierwsze wiersze – `1.0` jest aktualna wersja specyfikacji

Metablok

Opcjonalne metadata na poziomie dokumentu. Wywołuje I003-Wskazówka, jeżeli zostaje ona pominięta. Wszystkie pole z wyjątkiem kind są opcjonalnymi ciągami/arryami.

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
titlestringNoTytuły wykresów czytelnych dla ludzi
versionstringNoWersja semantyczna wykresu
descriptionstringNoOpis wolnego tekstu
authorstringNoImię lub e-mail autora
ownerstringNoZespół lub osoba odpowiedzialna
tagsstring[]NoWłaściwe dni klasyfikacji
slastringNoPoziom serwisowy-Ziel, z.B. "99.9%"
criticalitystringNoStopień krytyczności: "P0" | "high" | "medium" | "low"
kindDiagramKind
"architecture""mindmap""state""sequence""algorithm"
NoWariant wykresu

Węzełowy blok

Oświadczenie jednostki w wykresie. Każdy węzeł ma jednoznaczny identyfikator, type, który kontroluje jego zmieniony kształt i kolor standardowy, oraz opcjonalny attrs-Blok metadanych.

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
ididentifierYesJednoznaczne rozpoznawanie węzłów alfanumeryczne + podkreślenie
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"
NoKategoria węzłów semantycznych
labelstringNoWyświetla tekst w wykresie
groupidentifierNoIdentyfikator grupy należącej do tych węzłów (alternatywa do group.members)
attrsAttrMapNoUżytkowane metadata kluczowych wartości ciągi znaków, liczby, wartości bułkowe lub arrayy
ℹ️

23 Typy węzłów

Wszystkie 23 wartości: service database queue cache gateway user actor system external process storage function broker scheduler load_balancer cdn dns firewall client mobile web iot unknown.

Randblock

Wyjaśnia relację między dwoma węzłami. Położenie krawędzi jest napisane bezpośrednio w deklaracji.: -> (wysyłane), <-> (bidirekcjonalnie) lub -- (niewykonane).

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
fromidentifierYesId identyfikacyjny węzłów źródłowych
directionEdgeDir
"->""<->""--"
YesPfeiltyp napisany w linii
toidentifierYesId identyfikatorów węzłów docelowych
kindEdgeKind
"http""grpc""graphql""websocket""tcp""udp""query""event""publish""subscribe""stream""call""read""write""deploys""monitors""depends""extends""implements""triggers""unknown"
NoTyp relacji semantycznych określa kolor i styl
labelstringNoKrótki tekst wyświetlany w linii marginesowej
weightnumberNoWzględna waga ruchu cięższe krawędzi stają się grubsze
asyncbooleanNoW przypadku true jest wyświetlony na krawędzi (fire-and-forget)).
attrsAttrMapNoUżytkowane metadata są przekazywane do JSON IR i tipów narzędzi
ℹ️

21 Artykuły krawędzi

Wszystkie 21 wartości: http grpc graphql websocket tcp udp query event publish subscribe stream call read write deploys monitors depends extends implements triggers unknown.

Blok grupy

Grupa wiązanych węzłów w opisywanym polu poddiagramu. Węzeł może należeć do jednej grupy – E403 jest wywołana w przypadku konfliktów. Grupy mogą być zestawione: ID członka może odnosić się do innego ID grupy.

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
ididentifierYesJednoznaczne oznakowanie grupy
labelstringNoOznaczenie widzenia dla pola poddiagramu
membersidentifier[]Nopriorytetowe są identyfikaty węzłowe lub grupowe node { group: X }
attrsAttrMapNoUżytkowy metadata

Blok ograniczający

Oświadcza zasadę architektoniczną, którą weryfikujący ocenia na podstawie IR. Stworzenie naruszeń E501 (lub W501, jeżeli: severity: warn). Połączenie rule wykorzystuje przenikającą gramatykę trzech tokenów.

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
idstringNoOpcjonalne, czytelne dla ludzi oznakowanie reguł
rulestringYesSUBJECT VERB OBJECT – Zobacz tabelę wpisów poniżej
messagestringNoW przypadku naruszenia reguły, komunikat użytkownika wyświetlany w diagnostyce
severityConstraintSeverity
"error""warn"
NoPoziom ciężkości diagnostycznej w przypadku naruszenia

Ograniczenia

  • `!->` – nie SUBJECT-Węzeł może mieć obręb skierowany do dowolnego OBJECT-Węzły.
  • `->` – Każdy SUBJECT-Węzeł musi mieć co najmniej jeden obrót w kierunku OBJECT-Węzły.
  • `!<->` – pomiędzy węzłami SUBJECT i OBJECT nie ma dwuosobowej krawędzi.
  • `<->` – Każdy SUBJECT-Węzeł musi mieć dwuwyjazdową krawędzię OBJECT-Węzły.
  • `in` – Każdy SUBJECT-Węzeł musi być członkiem grupy OBJECT być.
  • `!in` – nie SUBJECT-Węzeł może być członkiem grupy OBJECT być.
💡

Tokeny przedmiotu i obiektu

Każdy token może mieć rodzaj węzłów (`database`, `external`, …), ID grupy** (z). B. data_tier) lub * (Wykorzystanie wszystkich węzłów.

Importuj blok

Rozdziela duże wykresy na kilka .dtro-Pliki. Rozporządnik łączy przywożony IR przed weryfikacją z najwyższym IR. Wykorzystaj as w odniesieniu do przestrzeni nazwisk i expose, Aby umieścić określone identyfikatory na liście białych.

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
pathstringYesRelatywny lub absolutny ścieżka do pliku .dtro.
asidentifierNowszystkie importowane identyfikatory alias.id Przedstawione.
exposeidentifier[]Notylko te identyfikatory zostaną połączone z wyższą IR

Blok w układzie

Informacje dla przedstawiciela w sprawie układu wykresu. Wszystkie pole są opcjonalne renderer używa istotnych wartości standardowych, gdy blok zostaje pominięty.

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"
NoGraficzne przedstawienie kierunku przepływu
algoLayoutAlgo
"dagre""dot""elk""force""none"
NoAlgorytm układu
node_sepnumberNoMinimalny piksel pomiędzy sąsiednimi węzłami o tej samej pozycji
rank_sepnumberNoMinimalny piksel pomiędzy rankami
marginnumberNoWykres w pikslach
cluster_paddingnumberNoDodatkowa odległość w ramach ograniczeń grupowych

Blok tematyczny

Kontrola wygląd wizualny zwrotnego wykresu. Ten palette Kształtuje typy węzłów w kolorze hex. Podblokowy accessibility umożliwia automatyczne sprawdzanie kontrastów 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
  }
}
💡

Automatyczny kolor pisma

Eksporter DOT automatycznie wybiera czarny lub biały tekst na każde wypełnienie węzłów, wykorzystując względną formułę świetlności WCAG 2.1. Nigdy nie musisz określać oddzielnego koloru tekstu.

Stylblock

Szczegółowe stopniowe przesłanki dla każdego elementu, stosowane według tematu. Wykorzystanie władzy: by_id przekształcanie by_type. Każdy podbloki ustawia klucz do przydziału właściwości.

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>NoSztyły stosowane do wszystkich węzłów określonego typu
by_idRecord<id, StyleProps>NoStyły stosowane do określonego ID węzła najwyższy priorytet
by_edge_kindRecord<EdgeKind, StyleProps>NoStyły stosowane na wszystkich krawędzi określonego rodzaju
by_edge_attrRecord<attrName, StyleProps>NoStyły stosowane na krawędzi, w których przypisywany jest atrybut Boolean true jest

Kody diagnostyczne

Wszystkie diagnozy obejmują code, severity, message i opcjonalny line:col-Mieszkanie. W poniższej tabeli znajduje się każdy kod, który może wydać łańcuch narzędzi.

Błąd (E)×××)

  • `E100` – "Magic-Header" #!DATRO 1.0 brakuje lub jest błędne
  • `E201` – Podwójny identyfikator węzłów
  • `E202` – Węzły odnoszą się do nieznanego ID grupy
  • `E301` – Węzły krawędzi from nie znaleziono
  • `E302` – Węzły krawędzi to nie znaleziono
  • `E303` – Krawędzi weight jest negatywny
  • `E401` – Podwójna identyfikacja grupy
  • `E402` – Grupa members wskazuje na nieznany identyfikator
  • `E403` – Węzły przypisane do więcej niż jednej grupy
  • `E404` – Zidentyfikowane zakładki grup w kształcie okręgowym
  • `E500` – Rzecz ograniczająca wykazuje błąd w syntaxie
  • `E501` – W przypadku naruszenia reguły ograniczenia (sciwota odzwierciedla własną severity ograniczenia)

ostrzeżenia (B)×××)

  • `W301` – Duplikowanie krawędzi (równoważne z / do / rodzaju / oznakowania))
  • `W501` – Rzecz ograniczająca używa nieznanego czasownika
  • `W601` – Powyższe oznakowanie węzłów max_label_length (Standardowe 80 znaków)
  • `W602` – Kolor palety tematycznej jest poniżej kontrastu WCAG AA (4,5:1)
  • `W603` – Kolor palety tematycznej jest poniżej kontrastu AAA WCAG (7,0:1)

Informacje (I)×××)

  • `I001` – Węzły izolowane bez krawędzi do niego połączonych
  • `I002` – Puste grupy nie deklarowany członek
  • `I003` – Żaden meta-Blok zalecany do dokumentacji
  • `I601` – Nie zdefiniowano palety tematycznych przejście kontrastów

Następne kroki

  • Wykorzystaj CLI Reference do weryfikacji, formatowania i eksportowania za pomocą linii poleceń.
  • Wkładać wykresy w markdown za pomocą plugina markdown.
  • Wróć do Quick Start dla instrukcji krok po kroku.
Otwórz twórcę diagramów

Spróbuj pełnego języka na żywo wstaw dowolny fragment na górze i natychmiast go zatwierdź.

Schema v1 · Updated October 2026