Language Reference
Full syntax — every block, field, and diagnostic code
Kieliohje
Datro DSL-tiedostojen täydellinen syntaksisuhde (.dtro-Tiedot). Jokaisen piirin tyyppi, jokainen kenttä, jokainen diagnosointikoodi kaikki yhdessä paikassa.
Taikainen otsikko
Jokainen .dtro-Tiedosto on aloitettava Magic-headerin kanssa. Parser antaa E100 palautetaan, jos se on puuttuva tai virheellinen.
#!DATRO 1.0Metablokki
Valinnaiset metatodat asiakirja-alalla. Tuottaa I003-Ilmoitus, jos se jätetään pois. Kaikki kentät paitsi kind ovat valinnaisia harjoituksia/sarjoja.
#!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 | — | Ihmisten lukemattomat taulukot |
version | string | No | — | Seemanttinen versio kaaviosta |
description | string | No | — | Vapaa-aineinen kuvaus |
author | string | No | — | Kirjoittajan nimi tai sähköposti |
owner | string | No | — | Työryhmä tai johtaja |
tags | string[] | No | — | Miellyttävät luokituspäivät |
sla | string | No | — | Palvelutaso-Ziel, z.B. "99.9%" |
criticality | string | No | — | Kriittisyysaste: "P0" | "high" | "medium" | "low" |
kind | DiagramKind "architecture""mindmap""state""sequence""algorithm" | No | architecture | Kuvio-vaihtoehto |
Kytkysäiliö
Kertokaa yksikkö kaaviossa. Jokaisella kytköllä on ainutlaatuinen tunnus, semantiikka. type, joka ohjaa sen muokattua muotoa ja vertaista väriä, ja vaihtoehtoinen attrs-Metadata-lokki.
# 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 | — | Yksityinen kynnysarviointi alphanumerinen + korostus |
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 | Semanttiset kytkentät |
label | string | No | (node id) | Näytä taulukossa näkyvä teksti |
group | identifier | No | — | ryhmä-ID, johon tämä kytkö kuuluu (alternatiivinen group.members) |
attrs | AttrMap | No | — | Valitettavissa olevia avainmen metatietoja merkkejä, numeroita, tuloksia tai järjestelmiä |
23 Tyyppiset kytket
Kaikki 23 arvoa: service database queue cache gateway user actor system external process storage function broker scheduler load_balancer cdn dns firewall client mobile web iot unknown.
Randiblokki
Kertokaa kahden solun välinen suhde. Kanta on kirjoitettu suoraan julistukseen: -> (suunnattu), <-> (kaksisuuntainen) tai -- (epäohjattu).
# 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 | — | Lähdekohteen tunnus |
direction | EdgeDir "->""<->""--" | Yes | — | Inline-kirjattu piippi |
to | identifier | Yes | — | Kohdeyhteys-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 | Seemanttinen suhde tyyppi määrittää väriä ja tyyliä |
label | string | No | — | Lyhyt teksti, joka näkyy sivulla |
weight | number | No | 1.0 | Vertainen liikennepaino raskastuvat reunat pakenevat |
async | boolean | No | false | Ehdotukset true on varustettu (Fire-and-Forget). |
attrs | AttrMap | No | — | Valituista metatietoja siirretään JSON IR:hen ja työkalutyypeihin |
21 Kantelajeet
Kaikki 21 arvoa: http grpc graphql websocket tcp udp query event publish subscribe stream call read write deploys monitors depends extends implements triggers unknown.
Ryhmäblokki
Ryhmitetty sukupuoliset kytket merkittyyn aladiagrammin kentällä. Yhdellä kytköllä on oltava enintään yksi ryhmä – E403 on syntynyt ristiriidassa. Ryhmä voi olla yhdistynyt: jäsen-ID voi viitata toiseen ryhmän ID:hen.
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 | — | Selkeät ryhmän nimet |
label | string | No | (group id) | Näyttömerkintä aladiagrammin kentälle |
members | identifier[] | No | [] | Sisäily- tai ryhmä-ID:t ovat ensisijaisia node { group: X } |
attrs | AttrMap | No | — | Ehdokkaat meta-tiedot |
Rajoitusblokki
Tiedottaa arkkitehtuurissääntöä, jonka validoija arvioi IR:n perusteella. rikkomisen syntyminen E501 (tai W501, jos severity: warn). Alue rule käyttää tiukkaa kolmen tunnuksen kieliä.
# 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 | — | Valinnaiset, ihmisille luettavat säännösmerkinnät |
rule | string | Yes | — | SUBJECT VERB OBJECT – Katso jäljempänä oleva versio taulukko |
message | string | No | — | Käyttäjäkohtainen ilmoitus, joka näkyy diagnoosissa, jos sääntöä rikkotaan |
severity | ConstraintSeverity "error""warn" | No | error | Rikkomisen diagnosointiaste |
Rajoitusvaikutukset
- `!->` – ei mitään
SUBJECT-Kytket voivat olla suunnattujen ranteiden mukaanOBJECT-Kytkät ovat. - `->` – jokaisella
SUBJECT-Kytköllä on oltava vähintään yksi suunnattu ääriOBJECT-Kytkät ovat. - `!<->` – simpukoiden välissä
SUBJECTjaOBJECTei saa olla kaksisuuntaista reunaa. - `<->` – jokaisella
SUBJECT-Kytköllä on oltava kaksisuuntainen reunaOBJECT-Kytkät ovat. - `in` – jokaisella
SUBJECT-Noten on oltava ryhmän jäsenOBJECTSe on. - `!in` – ei mitään
SUBJECT-Kytket voivat olla ryhmän jäsenOBJECTSe on.
Kohde- ja kohteetokenit
Jokaisen tunnuksen voi olla yksi *nottyyppi** (database, external, …), ryhmä-ID (z). B. data_tier) tai * (Pysäyttävä jokaiselle kytkelle.
Importaatio
Se jakaa suuria kaavioita useisiin .dtro-Korjaa tiedostoja. Resolventti yhdistää ennen validointia tuonti IR:n ylemmän IR:n kanssa. Käytä as nimikkeen osalta; ja expose, jotta tietyt tunnusmerkit olisivat listalla.
# 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 | — | Relatiivinen tai absoluuttinen tilaa tiedostoon .dtro. |
as | identifier | No | — | Name-space alias kaikki maahantuotuneet ID:t alias.id Ennakkoratkaisu. |
expose | identifier[] | No | — | Whitelist vain nämä ID:t yhdistetään ylimmäiseen IR:hen |
Laajennusblokki
Tarjoajalle annettavat ohjeet diagramman järjestämisestä. Kaikki kentät ovat valinnaisia lentäjä käyttää järkeviä standardoita, kun blokki jätetään pois.
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 | Näytä virran suunta graafisesti |
algo | LayoutAlgo "dagre""dot""elk""force""none" | No | dagre | Laajennusalgoritmi |
node_sep | number | No | 60 | Vähimmäispixelli saman tason naapurissa olevien solmien välillä |
rank_sep | number | No | 120 | Vähimmäispixelli rajan välissä |
margin | number | No | 20 | Pixelissä oleva kaavio |
cluster_padding | number | No | 16 | Ylimääräinen etäisyys ryhmän rajoitusraamissa |
Aihe-arvot
Käsittelee käännetyn kaavan visuaalista ulkonäköä. Se on palette järjestää kynen tyyppejä hex-värinä. Alusblokki accessibility mahdollistaa automaattisen WCAG 2.1 kontrastitarkastuksen;.
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
}
}Automaattinen kirjoitusväri
DOT-eksportti valitsee automaattisesti mustaa tai valkoista tekstiä jokaista kytkötä käyttämällä WCAG 2.1:n suhteellista valoa koskeva kaava. Sinun ei tarvitse koskaan määrittää erillistä tekstiväria.
Vihreä
Kiinteät luokitukset kohden, joita sovelletaan aiheesta. Säännön kaskadot: by_id kirjoittaa yli by_type. Kunkin alaluokkaan kohdistetaan ominaisuussääntöjen avain.
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 | — | Muun tyypin kaikkiin kytöihin sovellettavat tyylit |
by_id | Record<id, StyleProps> | No | — | Tiettyyn kytkö-ID:hen sovellettavat tyylit ensisijainen |
by_edge_kind | Record<EdgeKind, StyleProps> | No | — | Niitä käytetään kaikkiin tietyn tyypin ääriin |
by_edge_attr | Record<attrName, StyleProps> | No | — | Kanteissa käytetyt tyylit, joissa on nimetty Boo-attribuuti true on |
Diagnoosikoodit
Kaikki diagnosoinnit sisältävät code, severity, message ja vaihtoehtoinen line:col-Paikka. Seuraavassa taulukossa on luettelo kaikista koodeista, joita työketju voi antaa.
Virheet (E)×××)
- `E100` – Der Magic-Header
#!DATRO 1.0puuttuva tai virheellinen - `E201` – Kaksinkertainen kytkö-ID
- `E202` – Kohdat viittaavat tuntemattomaan ryhmä-ID:hen
- `E301` – Vihreiden kytket
fromei löytynyt - `E302` – Vihreiden kytket
toei löytynyt - `E303` – Kanteet
weighton negatiivinen - `E401` – Kaksoisryhmän tunnus
- `E402` – Ryhmä
membersviittaa tuntemattomaan tunnukseen - `E403` – Kytket on osoitettu useampaan ryhmään
- `E404` – Tutkittu kiertotyyppinen ryhmä
- `E500` – Rajoitusrajeissa on syntaaksovirhe
- `E501` – Rajoitusrajan rikkominen (vaikeusaste heijastaa oman
severityrajoituksen vastainen)
Varoitus (B)×××)
- `W301` – Kanteen kaksinkertaistaminen (vastaavaa/laatuista/merkinnästä)
- `W501` – Rajoituskäytäntö käyttää tuntemattomia verbejä
- `W601` – Yli kytkentämerkintö
max_label_length(Standardi 80 merkkiä) - `W602` – Näyttelypaletin väri on WCAG AA -kontrastin alla. (4,5:1)
- `W603` – Näyttelypaletin väri on WCAG AAA-kontrastin alla. (7,0:1)
Tiedot (I)×××)
- `I001` – Isooitu kytkö ei ole ranteja, jotka liittyvät siihen
- `I002` – Tyhjä ryhmä ei ilmoittanut jäseniä
- `I003` – Ei mitään .
meta-Rakenne suositeltu dokumentaatioon - `I601` – Yksikään aihepaletta ei määritelty Kontrastitarkastuksia ohitettu
Seuraava askel
- Käytä CLI Reference validoimaan, muokkaamaan ja vientiä käskyjen kautta.
- Lisää kaavioita Markdownissa käyttämällä Markdown plugin.
- Palaa Quick Start vaiheittaiseen ohjeeseen.
Kokeile koko kieli elävänä laita lopullinen kappale yläpuolelle ja vahvista se välittömästi.