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.
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 1.0Metablok
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 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 | — | Tytuły wykresów czytelnych dla ludzi |
version | string | No | — | Wersja semantyczna wykresu |
description | string | No | — | Opis wolnego tekstu |
author | string | No | — | Imię lub e-mail autora |
owner | string | No | — | Zespół lub osoba odpowiedzialna |
tags | string[] | No | — | Właściwe dni klasyfikacji |
sla | string | No | — | Poziom serwisowy-Ziel, z.B. "99.9%" |
criticality | string | No | — | Stopień krytyczności: "P0" | "high" | "medium" | "low" |
kind | DiagramKind "architecture""mindmap""state""sequence""algorithm" | No | architecture | Wariant 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.
# 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 | — | Jednoznaczne rozpoznawanie węzłów alfanumeryczne + podkreślenie |
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 | Kategoria węzłów semantycznych |
label | string | No | (node id) | Wyświetla tekst w wykresie |
group | identifier | No | — | Identyfikator grupy należącej do tych węzłów (alternatywa do group.members) |
attrs | AttrMap | No | — | Uż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).
# 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 identyfikacyjny węzłów źródłowych |
direction | EdgeDir "->""<->""--" | Yes | — | Pfeiltyp napisany w linii |
to | identifier | Yes | — | Id identyfikatorów węzłów docelowych |
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 | Typ relacji semantycznych określa kolor i styl |
label | string | No | — | Krótki tekst wyświetlany w linii marginesowej |
weight | number | No | 1.0 | Względna waga ruchu cięższe krawędzi stają się grubsze |
async | boolean | No | false | W przypadku true jest wyświetlony na krawędzi (fire-and-forget)). |
attrs | AttrMap | No | — | Uż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.
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 | — | Jednoznaczne oznakowanie grupy |
label | string | No | (group id) | Oznaczenie widzenia dla pola poddiagramu |
members | identifier[] | No | [] | priorytetowe są identyfikaty węzłowe lub grupowe node { group: X } |
attrs | AttrMap | No | — | Uż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.
# 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 | — | Opcjonalne, czytelne dla ludzi oznakowanie reguł |
rule | string | Yes | — | SUBJECT VERB OBJECT – Zobacz tabelę wpisów poniżej |
message | string | No | — | W przypadku naruszenia reguły, komunikat użytkownika wyświetlany w diagnostyce |
severity | ConstraintSeverity "error""warn" | No | error | Poziom ciężkości diagnostycznej w przypadku naruszenia |
Ograniczenia
- `!->` – nie
SUBJECT-Węzeł może mieć obręb skierowany do dowolnegoOBJECT-Węzły. - `->` – Każdy
SUBJECT-Węzeł musi mieć co najmniej jeden obrót w kierunkuOBJECT-Węzły. - `!<->` – pomiędzy węzłami
SUBJECTiOBJECTnie 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 grupyOBJECTbyć. - `!in` – nie
SUBJECT-Węzeł może być członkiem grupyOBJECTbyć.
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.
# 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 | — | Relatywny lub absolutny ścieżka do pliku .dtro. |
as | identifier | No | — | wszystkie importowane identyfikatory alias.id Przedstawione. |
expose | identifier[] | No | — | tylko 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.
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 | Graficzne przedstawienie kierunku przepływu |
algo | LayoutAlgo "dagre""dot""elk""force""none" | No | dagre | Algorytm układu |
node_sep | number | No | 60 | Minimalny piksel pomiędzy sąsiednimi węzłami o tej samej pozycji |
rank_sep | number | No | 120 | Minimalny piksel pomiędzy rankami |
margin | number | No | 20 | Wykres w pikslach |
cluster_padding | number | No | 16 | Dodatkowa 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.
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.
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 | — | Sztyły stosowane do wszystkich węzłów określonego typu |
by_id | Record<id, StyleProps> | No | — | Styły stosowane do określonego ID węzła najwyższy priorytet |
by_edge_kind | Record<EdgeKind, StyleProps> | No | — | Styły stosowane na wszystkich krawędzi określonego rodzaju |
by_edge_attr | Record<attrName, StyleProps> | No | — | Stył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.0brakuje 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
fromnie znaleziono - `E302` – Węzły krawędzi
tonie znaleziono - `E303` – Krawędzi
weightjest negatywny - `E401` – Podwójna identyfikacja grupy
- `E402` – Grupa
memberswskazuje 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ą
severityograniczenia)
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.
Spróbuj pełnego języka na żywo wstaw dowolny fragment na górze i natychmiast go zatwierdź.