Diagram Maker›Language Reference
📐

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.

23 Tyyppiset kytket21 Kantelajeet6 RajoitusvaikutuksetWCAG 2.1 AA/AAA

Taikainen otsikko

Jokainen .dtro-Tiedosto on aloitettava Magic-headerin kanssa. Parser antaa E100 palautetaan, jos se on puuttuva tai virheellinen.

DATRO
#!DATRO 1.0
Tarvittavissa oleva ensimmäinen rivi – `1.0` on nykyinen eritelmäversio

Metablokki

Valinnaiset metatodat asiakirja-alalla. Tuottaa I003-Ilmoitus, jos se jätetään pois. Kaikki kentät paitsi kind ovat valinnaisia harjoituksia/sarjoja.

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
titlestringNoIhmisten lukemattomat taulukot
versionstringNoSeemanttinen versio kaaviosta
descriptionstringNoVapaa-aineinen kuvaus
authorstringNoKirjoittajan nimi tai sähköposti
ownerstringNoTyöryhmä tai johtaja
tagsstring[]NoMiellyttävät luokituspäivät
slastringNoPalvelutaso-Ziel, z.B. "99.9%"
criticalitystringNoKriittisyysaste: "P0" | "high" | "medium" | "low"
kindDiagramKind
"architecture""mindmap""state""sequence""algorithm"
NoKuvio-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.

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
ididentifierYesYksityinen kynnysarviointi alphanumerinen + korostus
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"
NoSemanttiset kytkentät
labelstringNoNäytä taulukossa näkyvä teksti
groupidentifierNoryhmä-ID, johon tämä kytkö kuuluu (alternatiivinen group.members)
attrsAttrMapNoValitettavissa 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).

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
fromidentifierYesLähdekohteen tunnus
directionEdgeDir
"->""<->""--"
YesInline-kirjattu piippi
toidentifierYesKohdeyhteys-ID
kindEdgeKind
"http""grpc""graphql""websocket""tcp""udp""query""event""publish""subscribe""stream""call""read""write""deploys""monitors""depends""extends""implements""triggers""unknown"
NoSeemanttinen suhde tyyppi määrittää väriä ja tyyliä
labelstringNoLyhyt teksti, joka näkyy sivulla
weightnumberNoVertainen liikennepaino raskastuvat reunat pakenevat
asyncbooleanNoEhdotukset true on varustettu (Fire-and-Forget).
attrsAttrMapNoValituista 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.

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
ididentifierYesSelkeät ryhmän nimet
labelstringNoNäyttömerkintä aladiagrammin kentälle
membersidentifier[]NoSisäily- tai ryhmä-ID:t ovat ensisijaisia node { group: X }
attrsAttrMapNoEhdokkaat 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ä.

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
idstringNoValinnaiset, ihmisille luettavat säännösmerkinnät
rulestringYesSUBJECT VERB OBJECT – Katso jäljempänä oleva versio taulukko
messagestringNoKäyttäjäkohtainen ilmoitus, joka näkyy diagnoosissa, jos sääntöä rikkotaan
severityConstraintSeverity
"error""warn"
NoRikkomisen diagnosointiaste

Rajoitusvaikutukset

  • `!->` – ei mitään SUBJECT-Kytket voivat olla suunnattujen ranteiden mukaan OBJECT-Kytkät ovat.
  • `->` – jokaisella SUBJECT-Kytköllä on oltava vähintään yksi suunnattu ääri OBJECT-Kytkät ovat.
  • `!<->` – simpukoiden välissä SUBJECT ja OBJECT ei saa olla kaksisuuntaista reunaa.
  • `<->` – jokaisella SUBJECT-Kytköllä on oltava kaksisuuntainen reuna OBJECT-Kytkät ovat.
  • `in` – jokaisella SUBJECT-Noten on oltava ryhmän jäsen OBJECT Se on.
  • `!in` – ei mitään SUBJECT-Kytket voivat olla ryhmän jäsen OBJECT Se 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.

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
pathstringYesRelatiivinen tai absoluuttinen tilaa tiedostoon .dtro.
asidentifierNoName-space alias kaikki maahantuotuneet ID:t alias.id Ennakkoratkaisu.
exposeidentifier[]NoWhitelist 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.

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"
NoNäytä virran suunta graafisesti
algoLayoutAlgo
"dagre""dot""elk""force""none"
NoLaajennusalgoritmi
node_sepnumberNoVähimmäispixelli saman tason naapurissa olevien solmien välillä
rank_sepnumberNoVähimmäispixelli rajan välissä
marginnumberNoPixelissä oleva kaavio
cluster_paddingnumberNoYlimää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;.

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
  }
}
💡

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.

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>NoMuun tyypin kaikkiin kytöihin sovellettavat tyylit
by_idRecord<id, StyleProps>NoTiettyyn kytkö-ID:hen sovellettavat tyylit ensisijainen
by_edge_kindRecord<EdgeKind, StyleProps>NoNiitä käytetään kaikkiin tietyn tyypin ääriin
by_edge_attrRecord<attrName, StyleProps>NoKanteissa 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.0 puuttuva tai virheellinen
  • `E201` – Kaksinkertainen kytkö-ID
  • `E202` – Kohdat viittaavat tuntemattomaan ryhmä-ID:hen
  • `E301` – Vihreiden kytket from ei löytynyt
  • `E302` – Vihreiden kytket to ei löytynyt
  • `E303` – Kanteet weight on negatiivinen
  • `E401` – Kaksoisryhmän tunnus
  • `E402` – Ryhmä members viittaa tuntemattomaan tunnukseen
  • `E403` – Kytket on osoitettu useampaan ryhmään
  • `E404` – Tutkittu kiertotyyppinen ryhmä
  • `E500` – Rajoitusrajeissa on syntaaksovirhe
  • `E501` – Rajoitusrajan rikkominen (vaikeusaste heijastaa oman severity rajoituksen 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

Avaa kaavioiden tekijä

Kokeile koko kieli elävänä laita lopullinen kappale yläpuolelle ja vahvista se välittömästi.

Schema v1 · Updated October 2026