Diagram Maker›Language Reference
📐

Language Reference

Full syntax — every block, field, and diagnostic code

مرجع اللغة

مرجع بناء الجملة الكامل لملفات Datro DSL (.dtro). كل نوع كتلة وكل حقل وكل رمز تشخيصي - كل ذلك في مكان واحد.

23 نوعًا من العقد21 نوعًا من الحواف6 أفعال مقيدةWCAG 2.1 AA/AAA

رأس سحري

كل ملف .dtro يجب أن يبدأ بالرأس السحري في السطر 1. يقوم المحلل بإرجاع E100 إذا كان مفقودًا أو مشوهًا.

DATRO
#!DATRO 1.0
السطر الأول المطلوب — `1.0` هو إصدار المواصفات الحالي

كتلة التعريف

البيانات التعريفية الاختيارية على مستوى المستند. يُنتج تلميح معلومات I003 إذا تم حذفه. كافة الحقول عبارة عن سلاسل/مصفوفات اختيارية باستثناء kind.

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
titlestringNoعنوان الرسم البياني الذي يمكن قراءته بواسطة الإنسان
versionstringNoالنسخة الدلالية من الرسم التخطيطي
descriptionstringNoوصف النص الحر
authorstringNoاسم المؤلف أو البريد الإلكتروني
ownerstringNoالفريق أو الشخص المسؤول
tagsstring[]Noعلامات التصنيف التعسفي
slastringNoهدف مستوى الخدمة، على سبيل المثال. "99.9%"
criticalitystringNoمستوى الأهمية: "P0" | "high" | "medium" | "low"
kindDiagramKind
"architecture""mindmap""state""sequence""algorithm"
Noمتغير الرسم البياني

كتلة العقدة

يعلن كيان في الرسم التخطيطي. تحتوي كل عقدة على معرف فريد، وtype دلالي يتحكم في شكلها المعروض ولونها الافتراضي، وكتلة attrs اختيارية للبيانات التعريفية.

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
ididentifierYesمعرف العقدة الفريد - أبجدي رقمي + شرطة سفلية
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"
Noفئة العقدة الدلالية
labelstringNoعرض النص الموضح في الرسم التخطيطي
groupidentifierNoمعرف المجموعة الذي تنتمي إليه هذه العقدة (بديل لـ group.members)
attrsAttrMapNoالبيانات التعريفية ذات القيمة الرئيسية العشوائية - السلاسل أو الأرقام أو القيم المنطقية أو المصفوفات
ℹ️

23 نوعًا من العقد

جميع القيم الـ 23: service database queue cache user actor system external process storage function broker scheduler load_balancer cdn dns firewall client mobile web iot unknown.

كتلة الحافة

يعلن عن وجود علاقة بين عقدتين. يتم كتابة اتجاه الحافة مباشرة في الإعلان: -> (موجه)، <-> (ثنائي الاتجاه)، أو -- (غير موجه).

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
fromidentifierYesمعرف العقدة المصدر
directionEdgeDir
"->""<->""--"
Yesنوع السهم مكتوب في السطر
toidentifierYesمعرف العقدة الهدف
kindEdgeKind
"http""grpc""graphql""websocket""tcp""udp""query""event""publish""subscribe""stream""call""read""write""deploys""monitors""depends""extends""implements""triggers""unknown"
Noنوع العلاقة الدلالية - يحرك اللون والأسلوب
labelstringNoنص قصير معروض على سطر الحافة
weightnumberNoالوزن النسبي لحركة المرور - الحواف الأثقل تصبح أكثر سمكًا
asyncbooleanNoعند true، تصبح الحافة متقطعة (أطلق النار وننسى)
attrsAttrMapNoالبيانات الوصفية التعسفية - يتم تمريرها إلى JSON IR وتلميحات الأدوات
ℹ️

21 نوعًا من الحواف

جميع القيم الـ 21: http grpc graphql websocket udp query event publish subscribe stream call read write deploys monitors depends extends implements triggers unknown.

كتلة المجموعة

مجموعات العقد ذات الصلة في مربع الرسم البياني الفرعي المسمى. قد تنتمي العقدة إلى مجموعة واحدة على الأكثر — E403 يتم تشغيلها عند حدوث تعارضات. يمكن أن تكون المجموعات متداخلة: قد يشير معرف العضو إلى معرف مجموعة آخر.

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
ididentifierYesمعرف المجموعة الفريد
labelstringNoعرض التسمية لمربع الرسم البياني الفرعي
membersidentifier[]Noمعرفات العقدة أو المجموعة المطلوب تضمينها — لها الأولوية على node { group: X }
attrsAttrMapNoالبيانات الوصفية التعسفية

كتلة القيد

يعلن عن قاعدة معمارية يقوم المدقق بتقييمها مقابل IR. تنتج الانتهاكات E501 (أو W501 عندما severity: warn). يستخدم الحقل rule قواعد نحوية مختصرة مكونة من ثلاثة رموز.

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
idstringNoمعرف قاعدة اختياري يمكن قراءته بواسطة الإنسان
rulestringYesSUBJECT VERB OBJECT — انظر جدول الأفعال أدناه
messagestringNoتظهر رسالة مخصصة في التشخيص عند انتهاك القاعدة
severityConstraintSeverity
"error""warn"
Noشدة التشخيص عند انتهاكها

أفعال القيد

  • `!->` — لا يجوز أن تحتوي عقدة SUBJECT على حافة موجهة إلى أي عقدة OBJECT.
  • `->` — يجب أن تحتوي كل عقدة SUBJECT على حافة موجهة واحدة على الأقل إلى عقدة OBJECT.
  • `!<->` — لا يجوز وجود حافة ثنائية الاتجاه بين العقدتين SUBJECT وOBJECT.
  • `<->` — يجب أن يكون لكل عقدة SUBJECT حافة ثنائية الاتجاه لبعض عقدة OBJECT.
  • `in` — يجب أن تكون كل عقدة SUBJECT عضوًا في مجموعة OBJECT.
  • `!in` — لا يجوز أن تكون عقدة SUBJECT عضوًا في مجموعة OBJECT.
💡

رموز الموضوع والكائن

يمكن أن يكون كل رمز مميز نوع عقدة (database، external، …)، معرف مجموعة (على سبيل المثال، data_tier)، أو * (حرف بدل يطابق كل عقدة).

كتلة الاستيراد

يقسم المخططات الكبيرة عبر ملفات .dtro متعددة. يقوم المحلل بدمج IR المستورد في الأصل قبل التحقق من الصحة. استخدم as لمسافة الاسم وexpose لإدراج معرفات محددة في القائمة البيضاء.

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
pathstringYesالمسار النسبي أو المطلق لملف .dtro
asidentifierNoالاسم المستعار لمساحة الاسم — جميع المعرفات المستوردة مسبوقة ببادئة alias.id
exposeidentifier[]Noالقائمة البيضاء — يتم دمج هذه المعرفات فقط في IR الأصلي

كتلة التخطيط

تلميحات للعارض حول كيفية ترتيب الرسم البياني. جميع الحقول اختيارية — يستخدم العارض إعدادات افتراضية معقولة عند حذف الكتلة.

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"
Noاتجاه تدفق الرسم البياني
algoLayoutAlgo
"dagre""dot""elk""force""none"
Noخوارزمية التخطيط
node_sepnumberNoالحد الأدنى من وحدات البكسل بين العقد المجاورة في نفس الترتيب
rank_sepnumberNoالحد الأدنى من البكسل بين الرتب
marginnumberNoهامش الرسم البياني بالبكسل
cluster_paddingnumberNoحشوة إضافية داخل المربعات المحيطة بالمجموعة

كتلة الموضوع

يتحكم في المظهر المرئي للرسم التخطيطي المعروض. يقوم palette بتعيين أنواع العقد إلى الألوان السداسية. تتيح الكتلة الفرعية accessibility فحص التباين التلقائي لـ WCAG 2.1.

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

لون الخط التلقائي

يقوم مُصدّر DOT تلقائيًا باختيار النص باللون الأسود أو الأبيض لكل تعبئة عقدة باستخدام صيغة النصوع النسبي WCAG 2.1. لن تحتاج أبدًا إلى تعيين لون نص منفصل.

كتلة النمط

يتم تطبيق التجاوزات الدقيقة لكل عنصر بعد السمة. تتالي القواعد: by_id يتجاوز by_type. تقوم كل كتلة فرعية بتعيين مفتاح لخريطة الممتلكات.

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>Noالأنماط المطبقة على كافة العقد من نوع معين
by_idRecord<id, StyleProps>Noالأنماط المطبقة على معرف عقدة محدد - الأولوية القصوى
by_edge_kindRecord<EdgeKind, StyleProps>Noالأنماط المطبقة على كافة الحواف من نوع معين
by_edge_attrRecord<attrName, StyleProps>Noالأنماط المطبقة على الحواف حيث يكون attr المنطقي المسمى هو true

رموز التشخيص

تتضمن جميع التشخيصات موقع code، severity، message، وموقع line:col اختياري. يسرد الجدول أدناه كل التعليمات البرمجية التي يمكن لسلسلة الأدوات إصدارها.

الأخطاء (E×××)

  • `E100` — الرأس السحري #!DATRO 1.0 مفقود أو مشوه
  • `E201` — معرف العقدة المكرر
  • `E202` — تشير العقدة إلى معرف مجموعة غير معروف
  • `E301` — لم يتم العثور على عقدة الحافة from
  • `E302` — لم يتم العثور على عقدة الحافة to
  • `E303` — الحافة weight سالبة
  • `E401` — معرف مجموعة مكرر
  • `E402` — المجموعة members تشير إلى معرف غير معروف
  • `E403` — العقدة مخصصة لأكثر من مجموعة واحدة
  • `E404` — تم اكتشاف تداخل مجموعة دائرية
  • `E500` — تحتوي قاعدة القيد على خطأ في بناء الجملة
  • `E501` — تم انتهاك قاعدة القيد (تعكس الخطورة القيد الخاص severity)

التحذيرات (العرض×××)

  • `W301` — حافة مكررة (نفس الشيء من/إلى/نوع/تصنيف)
  • `W501` — تستخدم قاعدة القيد فعلًا غير معروف
  • `W601` — تتجاوز تسمية العقدة max_label_length (80 حرفًا افتراضيًا)
  • `W602` — يقع لون لوحة السمات تحت مستوى تباين WCAG AA (4.5:1)
  • `W603` — يقع لون لوحة السمات تحت مستوى تباين WCAG AAA (7.0:1)

تلميحات المعلومات (I×××)

  • `I001` — عقدة معزولة — لا توجد حواف متصلة بها
  • `I002` — مجموعة فارغة — لم يتم الإعلان عن أي أعضاء
  • `I003` — لا يوجد كتلة meta — يوصى بها للتوثيق
  • `I601` — لم يتم تحديد لوحة السمات — تم تخطي عمليات التحقق من التباين

الخطوات التالية

  • استخدم CLI Reference للتحقق من الصحة والتنسيق والتصدير من سطر الأوامر.
  • تضمين المخططات في Markdown باستخدام Markdown plugin.
  • ارجع إلى Quick Start للحصول على إرشادات خطوة بخطوة.
افتح صانع المخططات

جرب اللغة الكاملة مباشرة - الصق أي مقتطف أعلاه وقم بالتحقق من صحته على الفور.

Schema v1 · Updated October 2026