Language Reference
Full syntax — every block, field, and diagnostic code
Språklig referanse
Full syntaxreferanse for Datro DSL-filer (.dtro-Filer). Hver blokktype, hvert felt, hver diagnosekode alt på ett sted.
Magiske overskrifter
Alle .dtro-Fil må starte med Magic-header i linje 1. Parseren gir E100 Retur hvis den mangler eller er feilaktig.
#!DATRO 1.0Metablokk
Valgfrie metadata på dokumentnivå. Gir informasjonsmeldingen I003 dersom blokken utelates. Alle felt unntatt kind er valgfrie strenger eller matriser.
#!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 | — | For mennesker lesbare diagrammetitler |
version | string | No | — | Semantisk versjon av diagrammet |
description | string | No | — | Fremstilling på basis av bruttekst |
author | string | No | — | Forfatteren navn eller e-post |
owner | string | No | — | Team eller ansvarlig |
tags | string[] | No | — | Veldig populære klassifikasjonsdatoer |
sla | string | No | — | Tjenestenivå-Ziel, z.B. "99.9%" |
criticality | string | No | — | Kritikknivå: "P0" "High" "Medium" "Low""` |
kind | DiagramKind "architecture""mindmap""state""sequence""algorithm" | No | architecture | Grafikvariant |
Knotblokker
Deklarerer en enhet i diagrammet. Hver knute har en unik ID, en semantisk type, som styrer sin omformede form og standardfarge, og en valgfri attrs-Block for metadata.
# 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 | — | Enkelknuttkennelse Alphanumerisk + understrekning |
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 | Semantisk knopskategori |
label | string | No | (node id) | Vis den teksten som vises i diagrammet |
group | identifier | No | — | Gruppen-ID som tilhører denne knuten (alternativ til group.members)) |
attrs | AttrMap | No | — | Nødvendige nøkkelværdi-metadata tegneserier, tall, bokstavelige verdier eller arrays |
23 Knottyper
Alle 23 verdier: service database queue cache gateway user actor system external process storage function broker scheduler load_balancer cdn dns firewall client mobile web iot unknown.
Kantblokk
Deklarerer et forhold mellom to knopper. Den kantlige retningen blir skrevet direkte i deklarasjonen: -> (rettet), <-> (bidirectional) eller -- (Uregistert).
# 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 | — | Kildeknutt-ID |
direction | EdgeDir "->""<->""--" | Yes | — | Inline-skrevet pfeiltyp |
to | identifier | Yes | — | Tiltak-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 | Semantisk type forhold bestemt farge og stil |
label | string | No | — | Kort tekst som vises på marginallinjen |
weight | number | No | 1.0 | Relativt trafikkvekt tyngre kanter blir tykkere |
async | boolean | No | false | I true vises kanten strikket (Fire-and-forget)). |
attrs | AttrMap | No | — | Lykkelig metadata blir videreført til JSON IR og tooltips |
21 Kantenarter
Alle 21 verdier: http grpc graphql websocket tcp udp query event publish subscribe stream call read write deploys monitors depends extends implements triggers unknown.
Gruppeblokk
Grupper relaterte knopper i et overskrevet underdiagramfelt. En knute må ikke tilhøre en gruppe – E403 blir utløst i konflikter. Gruppen kan være pakket: En medlem-ID kan henvise til en annen gruppe-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 | — | Enkelte gruppespesifikatorer |
label | string | No | (group id) | Anmeldelse for underdiagramfeltet |
members | identifier[] | No | [] | Inkluderende knop- eller gruppeIDer har forrang over node { group: X } |
attrs | AttrMap | No | — | Lykkelige metadata |
Begrensningsklokk
Utser en arkitektonisk regel som validatoren vurderer på basis av IR. Generere overtredelser E501 (eller W501, når severity: warn). Feltet rule bruker en fast tre-token grammatikk.
# 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 | — | Vaksjonelle, for mennesker lesbare regelregelmenn |
rule | string | Yes | — | `Subject VERB Object se verbalstabellen nedenfor |
message | string | No | — | Brukerspecifikk melding som vises i diagnosen når regelbrudd blir gjort |
severity | ConstraintSeverity "error""warn" | No | error | Diagnosemegripet i overtredelse |
Begrensningsregler
- `!->` – Ingen
SUBJECT-knot må ha en rett kant mot noenOBJECT-knot. - `->` – Hver
SUBJECT-knot skal ha minst en rett kant til enOBJECT-knot. - `!<->` – mellom knopene
SUBJECTogOBJECTmå det ikke være en bi-direktionskant. - `<->` – Hver
SUBJECT-knot skal ha en bidirectionell kant til enOBJECT-knot. - `i` hver
SUBJECT-knot må være medlem av gruppenOBJECT. - `!In` ingen
SUBJECT-knot kan være medlem av gruppenOBJECT.
Subjekt- og objekttokener
Hvert token kan ha en *knottype (`database`, `external`, …), en gruppe-ID** (z). B. data_tier) eller * (For å være plasssholdere for hver knop).
Import av blokk
Spliter store diagrammer i flere .dtro-Filer opp. Resolveren kombinerer den importerte IR før validering med den overordnede IR. Bruk as for navneområdet, og expose, for å sette bestemte ID-er på den hvite listen.
# 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 | — | Relativt eller absolutt vei til filen .dtro. |
as | identifier | No | — | Namespace alias alle importerte ID'er blir forhåndsansatt alias.id. |
expose | identifier[] | No | — | Whitelist bare disse ID'ene blir samlet i den overordnede IR |
Lageblokk
Informasjon til returneren om hvordan diagrammet skal arrangeres. Alle feltene er valgfrie returneren bruker fornuftige standardverdier når blokken blir slettet.
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 | For å illustrere flysiden |
algo | LayoutAlgo "dagre""dot""elk""force""none" | No | dagre | Layout-algoritme |
node_sep | number | No | 60 | Mindste pixel mellom naboler i samme rang |
rank_sep | number | No | 120 | Mindste pixel mellom rangene |
margin | number | No | 20 | Grafikkjøp i pixeler |
cluster_padding | number | No | 16 | Ytterligere avstand innenfor gruppens grenser |
Temablokke
Styr den visuelle utseendet på det returnerte diagrammet. Den palette Ordner knotttyper med hex farger. Underblokken accessibility muliggjør automatisk WCAG 2.1 kontrastkontroll.
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
}
}Automatisert skriftfarge
DOT-eksportøren velger automatisk svart eller hvit tekst for hver knutefylling ved å bruke WCAG 2.1's relative lysformel. Du trenger aldri å velge en separat tekstfarge.
Stilblokk
Fint graderte overskrifter per element som brukes etter temaet. Regelkaskade: by_id overskrev by_type. Hver underblokke ordner en nøkkel til en egenskap til.
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 | — | Styles som brukes på alle knopper av et bestemt type |
by_id | Record<id, StyleProps> | No | — | Styles som brukes til en bestemt knop-ID høyeste prioritet |
by_edge_kind | Record<EdgeKind, StyleProps> | No | — | Styles som brukes på alle kanter av en bestemt art |
by_edge_attr | Record<attrName, StyleProps> | No | — | Styles som brukes på kantene, hvor det benøvede boolettributtet er true |
Diagnosekoder
Alle diagnoser omfatter en code, severity, message og en valgfri line:col-Sted. I tabellen nedenfor er alle koder som verktøykjeden kan utgi.
Fejl (E)×××)
- `E100` Magic-header
#!DATRO 1.0mangler eller er feilaktig - `E201` Dopplet knop-ID
- `E202` Knot refererer til en ukjent gruppe-ID
- `E301` Edge-knot
fromikke funnet - `E302` Edge-knot
toikke funnet - `E303` Kante
vekter negativ - `E401` Dobbel gruppe-ID
- `E402` gruppe
membersrefererer til en ukjent ID - `E403` Knotter er tildelt mer enn en gruppe
- `E404` Kastet av sirkulære grupper oppdaget
- `E500` Begrensningsregelen viser en syntaxfeil
- `E501` begrensningsregelen blir brutt (sværhetsgrad reflekterer egen
severityav begrensningen))
Varminger (B)×××)
- `W301` Klipper kant (lik til/til/art/skilt))
- `W501` Begrensningsregelen bruker et ukjent verb
- `W601` Knotnavnet overstiger
max_label_length(standard 80 tegn)) - `W602` Fargen på temapaletten er under WCAG AA-kontrast (4,5:1)
- `W603` Fargen på temapaletten er under WCAG AAA-kontrast (7,0:1)
Informasjonsinformasjon (I)×××)
- `I001` Isolasjonerte knopper ingen kanter er knyttet til den
- `I002` Emne gruppe ingen medlemmer
- `I003` Ingen
meta-block anbefalt for dokumentasjon - `I601` Ingen tema-palette definert Overskutt kontrastundersøkelser
Neste skritt
- Bruk CLI Reference for å validere, formatere og eksportere via kommandoene.
- Legg inn diagrammer i markdown med markdown plugin.
- Gå tilbake til quick start for en steg-for-steg-håndledning.
Prøv det hele språket live ut legg inn et hvilket som helst stykke ovenfor og valider det umiddelbart.