Language Reference
Full syntax — every block, field, and diagnostic code
Reference til sproget
Fuldsyntaxreference til Datro DSL (.dtro-filer). Alle bloktyper, alle felter, alle diagnostiske koder på ét sted.
Magisk overskrift
Hver .dtro-fil skal begynde med den magiske overskrift på linje 1. Parsereren returnerer E100, hvis den mangler eller er fejlagtig.
#!DATRO 1.0Meta blok
Optativ metadata på dokumentniveau. Det giver I003 info hint, hvis det ikke er angivet. Alle felter er valgfrie strings/arrays med undtagelse af 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 | — | Indtitel på et diagram, der kan læses af mennesker |
version | string | No | — | Semantisk version af diagrammet |
description | string | No | — | Beskrivelse af frit tekst |
author | string | No | — | Forfatterens navn eller e-mail |
owner | string | No | — | Team eller ansvarlig person |
tags | string[] | No | — | Arbitrære klassificeringsmærker |
sla | string | No | — | Tjenesteniveaumål, f.eks. "99.9%" |
criticality | string | No | — | Kritisk niveau: "P0" "high" "medium" "low" |
kind | DiagramKind "architecture""mindmap""state""sequence""algorithm" | No | architecture | Diagramvarianten |
Nodeblok
Annoncerer en enhed i diagrammet. Hver node har et unikt id, en semantisk type, der kontrollerer dens afleverede form og standardfarve, og en valgfri attrs-blok 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 | — | Unique node identifier alfanumerisk + underpunkt |
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 | Kategori af semantiske noder |
label | string | No | (node id) | Vis tekst i diagrammet |
group | identifier | No | — | Gruppen id dette knot tilhører (alternativ til group.members) |
attrs | AttrMap | No | — | Vilkårløst nøgleværdi metadata strenge, tal, booleaner eller matriser |
23 nodetyper
Alle 23 værdier: service database queue cache gateway user actor system external process storage function broker scheduler load_balancer cdn dns firewall client mobile web iot unknown.
kantblok
Det erklærer et forhold mellem to knuder. Randretning skrives direkte i erklæringen: -> (dirigeret), <-> (bidirectional) eller -- (undirigeret).
# 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 | — | Kilde noden id |
direction | EdgeDir "->""<->""--" | Yes | — | Piletype skrevet i linje |
to | identifier | Yes | — | Tiltænkning |
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 relationstype driver farve og stil |
label | string | No | — | Kort tekst vises på kantlinjen |
weight | number | No | 1.0 | Relativ trafikvægt tungere kanter gør tykkere |
async | boolean | No | false | Når true, kanten giver som dashed (brand og glem) |
attrs | AttrMap | No | — | Vældige metadata overført til JSON IR og værktøjstips |
21 kanttyper
Alle 21 værdier: http grpc graphql websocket tcp udp query event publish subscribe stream call read write deploys monitors depends extends implements triggers unknown.
gruppeblok
Klustere relaterede knuder i en mærket undergraf boks. En knud kan tilhøre højst én gruppe E403 bryder på konflikter. Gruppen kan være indlejret: en medlem id kan henvise til en anden 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 | — | Unge grupper |
label | string | No | (group id) | Display-mærket til undergrafboksen |
members | identifier[] | No | [] | Node- eller gruppe-id'er til at omfatte har forrang over node { group: X } |
attrs | AttrMap | No | — | Vældige metadata |
Blokke
Der erklæres en arkitektonisk regel, som validatoren vurderer i forhold til IR. Overtrædelser producerer E501 (eller W501, når severity: warn). Feltet rule bruger en kortfattet tre-token grammatik.
# 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 | — | Vælgelsespraksis for regler, der kan læses af mennesker |
rule | string | Yes | — | SUBJECT VERB OBJECT se verbal tabel nedenfor |
message | string | No | — | En brugerdefineret besked, der vises i diagnostikken, når reglen overtrædes |
severity | ConstraintSeverity "error""warn" | No | error | Diagnostikkens alvorlighed, når overtrædelsen er overtrådt |
Tilskudssag
- `!->` Ingen
SUBJECT-node kan have en rettet kant til et hvilket som helstOBJECT-node. - `->` hver
SUBJECT-knode skal have mindst én rettet kant til enOBJECT-knode. - `!<->` Der må ikke være en bidirectional kant mellem
SUBJECTogOBJECT-knoderne. - `<->` hver
SUBJECT-knode skal have en bidirectional kant til et eller andetOBJECT-knode. - `in` hver
SUBJECT-node skal være medlem afOBJECT-gruppen. - `!in` Ingen
SUBJECT-node kan være medlem af gruppenOBJECT.
Subjekt- og objekttokens
Hver token kan være en node type (database, external,.), en gruppe id (f.eks. data_tier) eller * (wildcard matching hver node).
importblok
Splittet store diagrammer over flere .dtro filer. Resolveren fusionerer importeret IR i modersystemet før validering. Brug as til navnepacing og expose til whitelist specifikke id'er.
# 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 absolut vej til .dtro-filen |
as | identifier | No | — | Navnrude alias alle indførte id er præfixeret alias.id |
expose | identifier[] | No | — | Hvidliste kun disse ID'er er fusioneret i den moders IR |
blokke
Tipper til rendereren om, hvordan man arrangerer grafen. Alle felter er valgfrie rendereren bruger fornuftige standarder, når blokken udledes.
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 | Grafstrømningsretning |
algo | LayoutAlgo "dagre""dot""elk""force""none" | No | dagre | Layout algoritme |
node_sep | number | No | 60 | Mindste pixel mellem tilstødende noder i samme rang |
rank_sep | number | No | 120 | Mindste pixel mellem række |
margin | number | No | 20 | Grafmargin i pixels |
cluster_padding | number | No | 16 | Yderligere fyldning inde i gruppegrænser |
temablok
Kontroller den visuelle udseende af det fremstillede diagram. palette kortlægger nodetyper til heks farver. Underblokken accessibility muliggør automatisk kontrastkontrol af 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
}
}Automatisk skrifttypefarve
DOT-eksportøren vælger automatisk sort eller hvid tekst til hver knudefyldning ved hjælp af WCAG 2.1-formlen for relativ lysstyrke. Du behøver aldrig at indstille en separat tekstfarve.
stilblok
Fintkorn per-element overrides anvendes efter temaet. Regler kaskade: by_id overrides by_type. Hver subblok kortlægger en nøgle til et egenskab kort.
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 anvendt på alle noder af en given type |
by_id | Record<id, StyleProps> | No | — | Styles anvendt på en bestemt nod id højeste prioritet |
by_edge_kind | Record<EdgeKind, StyleProps> | No | — | Styles, der anvendes på alle kanter af en given art |
by_edge_attr | Record<attrName, StyleProps> | No | — | Styles anvendt på kanter, hvor den navngivne boolean attr er true |
Diagnostikkoder
Alle diagnostik omfatter en code, severity, message og en valgfri line:col placering. Tabellen nedenfor viser alle koder, som værktøjskæden kan udsende.
Fejl (E×××)
- `E100` Magisk overskrift
#!DATRO 1.0mangler eller er defekt - `E201` Dupliceret nod-id
- `E202` Node refererer til en ukendt gruppe-id
- `E301` Edge
from-node ikke fundet - `E302` Edge
to-node ikke fundet - `E303` Edge
weighter negativ - `E401` Dupliceret gruppe-id
- `E402` Gruppe
membershenviser til en ukendt id - `E403` Node er tildelt mere end én gruppe
- `E404` Detekteret cirkulær gruppe-nedering
- `E500` Fraværsreglen har en syntaxfejl
- `E501` En begrænsningsregel overtrædes (sværtheden afspejler den begrænsning, der er underlagt
severity)
Advarsler (W××)
- `W301` Duplikat kant (det samme fra/til/typen/mærket)
- `W501` Bindelsesreglen bruger et ukendt verb
- `W601` Node-mærket overstiger
max_label_length(afvigelse 80 kar) - `W602` Farve på temapaletten falder under WCAG AA kontrast (4.5:1)
- `W603` Farve på temapaletten falder under WCAG AAA kontrast (7,0:1)
Indslag til oplysninger
- `I001` Isoleret knop ingen kanter forbinder med det
- `I002` Frit gruppe Ingen medlemmer erklæret
- `I003` Ingen
meta-blok 001 anbefalet til dokumentation - `I601` Ingen tematiske palæter defineret Kontrastkontrol overgået
Næste trin
- Brug CLI Reference til at validerere, formatere og eksportere fra kommandoen.
- Indlej diagrammer i Markdown med Markdown plugin.
- Gå tilbage til [Quick Start] (/docs/datro-quickstart) for en trin for trin gennemgang.
Prøv det fulde sprog live indsæt et uddrag ovenfor og bekræft øjeblikkeligt.