579 lines
16 KiB
JSON
579 lines
16 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"title": "Draw.io YAML Specification",
|
|
"description": "Schema for the draw.io skill YAML specification format. Validates diagram structure including nodes, edges, modules, and meta configuration.",
|
|
"type": "object",
|
|
"properties": {
|
|
"meta": {
|
|
"type": "object",
|
|
"description": "Diagram-level configuration",
|
|
"properties": {
|
|
"theme": {
|
|
"type": "string",
|
|
"pattern": "^[a-z][a-z0-9-]*$",
|
|
"description": "Theme name (e.g. tech-blue, academic, nature, dark, high-contrast)"
|
|
},
|
|
"layout": {
|
|
"type": "string",
|
|
"enum": [
|
|
"horizontal",
|
|
"vertical",
|
|
"hierarchical",
|
|
"star",
|
|
"mesh"
|
|
],
|
|
"description": "Layout direction or topology intent for automatic positioning"
|
|
},
|
|
"routing": {
|
|
"type": "string",
|
|
"enum": [
|
|
"orthogonal",
|
|
"rounded"
|
|
],
|
|
"description": "Connector routing style"
|
|
},
|
|
"profile": {
|
|
"type": "string",
|
|
"enum": [
|
|
"default",
|
|
"academic-paper",
|
|
"engineering-review"
|
|
],
|
|
"description": "Workflow profile that enables domain-specific validation and defaults"
|
|
},
|
|
"figureType": {
|
|
"type": "string",
|
|
"enum": [
|
|
"architecture",
|
|
"roadmap",
|
|
"workflow"
|
|
],
|
|
"description": "Academic figure intent used for paper-mode guidance and validation"
|
|
},
|
|
"source": {
|
|
"type": "string",
|
|
"enum": [
|
|
"generated",
|
|
"replicated",
|
|
"edited"
|
|
],
|
|
"description": "How this spec was produced"
|
|
},
|
|
"canvas": {
|
|
"type": "string",
|
|
"description": "Canvas size (e.g. auto, 800x600, 1200x800)"
|
|
},
|
|
"title": {
|
|
"type": "string",
|
|
"description": "Diagram title"
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"description": "Diagram description"
|
|
},
|
|
"legend": {
|
|
"type": "string",
|
|
"description": "Optional legend summary used by academic-paper validation"
|
|
},
|
|
"grid": {
|
|
"type": "object",
|
|
"properties": {
|
|
"size": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"snap": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
},
|
|
"replication": {
|
|
"type": "object",
|
|
"description": "Optional metadata for image-driven redraws and source-palette preservation",
|
|
"properties": {
|
|
"colorMode": {
|
|
"type": "string",
|
|
"enum": [
|
|
"preserve-original",
|
|
"theme-first"
|
|
],
|
|
"description": "Whether to preserve extracted source colors or normalize them to the selected theme"
|
|
},
|
|
"background": {
|
|
"type": "string",
|
|
"description": "Detected source background color"
|
|
},
|
|
"palette": {
|
|
"type": "array",
|
|
"description": "Detected flat colors from the source image",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"hex": {
|
|
"type": "string"
|
|
},
|
|
"role": {
|
|
"type": "string"
|
|
},
|
|
"appliesTo": {
|
|
"type": "string",
|
|
"enum": [
|
|
"canvas",
|
|
"nodes",
|
|
"edges",
|
|
"modules",
|
|
"mixed"
|
|
]
|
|
},
|
|
"confidence": {
|
|
"type": "string",
|
|
"enum": [
|
|
"low",
|
|
"medium",
|
|
"high"
|
|
]
|
|
},
|
|
"notes": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"confidenceNotes": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "Freeform notes about low-confidence color extraction or normalization decisions"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"nodes": {
|
|
"type": "array",
|
|
"description": "Diagram nodes/elements",
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"id",
|
|
"label"
|
|
],
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"pattern": "^[A-Za-z][A-Za-z0-9_-]*$",
|
|
"description": "Unique node identifier"
|
|
},
|
|
"label": {
|
|
"type": "string",
|
|
"maxLength": 200,
|
|
"description": "Display label"
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"service",
|
|
"database",
|
|
"decision",
|
|
"terminal",
|
|
"queue",
|
|
"user",
|
|
"document",
|
|
"formula",
|
|
"text",
|
|
"cloud",
|
|
"process",
|
|
"input",
|
|
"output",
|
|
"loss",
|
|
"feature",
|
|
"conv",
|
|
"pool",
|
|
"embed",
|
|
"temporal",
|
|
"attention",
|
|
"gate",
|
|
"norm",
|
|
"graph",
|
|
"matrix",
|
|
"operator",
|
|
"tensor3d",
|
|
"router",
|
|
"switch",
|
|
"firewall",
|
|
"server",
|
|
"load_balancer",
|
|
"subnet",
|
|
"internet",
|
|
"ap"
|
|
],
|
|
"description": "Semantic type for automatic shape selection"
|
|
},
|
|
"module": {
|
|
"type": "string",
|
|
"pattern": "^[A-Za-z][A-Za-z0-9_-]*$",
|
|
"description": "Parent module ID"
|
|
},
|
|
"size": {
|
|
"type": "string",
|
|
"enum": [
|
|
"small",
|
|
"medium",
|
|
"large",
|
|
"xl"
|
|
],
|
|
"description": "Size preset"
|
|
},
|
|
"icon": {
|
|
"type": "string",
|
|
"pattern": "^[a-zA-Z][a-zA-Z0-9._-]*$",
|
|
"description": "Icon identifier (e.g. aws.lambda, gcp.compute)"
|
|
},
|
|
"network": {
|
|
"type": "object",
|
|
"description": "Optional network-specific node metadata",
|
|
"properties": {
|
|
"device": {
|
|
"type": "string",
|
|
"pattern": "^[a-zA-Z][a-zA-Z0-9._-]*$"
|
|
},
|
|
"role": {
|
|
"type": "string"
|
|
},
|
|
"vendor": {
|
|
"type": "string"
|
|
},
|
|
"zone": {
|
|
"type": "string"
|
|
},
|
|
"ip": {
|
|
"type": "string"
|
|
},
|
|
"cidr": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"position": {
|
|
"type": "object",
|
|
"description": "Manual position override",
|
|
"required": [
|
|
"x",
|
|
"y"
|
|
],
|
|
"properties": {
|
|
"x": {
|
|
"type": "number"
|
|
},
|
|
"y": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"style": {
|
|
"type": "object",
|
|
"description": "Style overrides (fillColor, strokeColor, etc.)",
|
|
"properties": {
|
|
"fillColor": {
|
|
"type": "string"
|
|
},
|
|
"strokeColor": {
|
|
"type": "string"
|
|
},
|
|
"strokeWidth": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"fontColor": {
|
|
"type": "string"
|
|
},
|
|
"fontSize": {
|
|
"type": "number",
|
|
"minimum": 1
|
|
},
|
|
"fontWeight": {
|
|
"type": "number"
|
|
},
|
|
"fontFamily": {
|
|
"type": "string"
|
|
},
|
|
"fontStyle": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"maximum": 7
|
|
},
|
|
"italic": {
|
|
"type": "boolean"
|
|
},
|
|
"bold": {
|
|
"type": "boolean"
|
|
},
|
|
"align": {
|
|
"type": "string",
|
|
"enum": [
|
|
"left",
|
|
"center",
|
|
"right"
|
|
]
|
|
},
|
|
"verticalAlign": {
|
|
"type": "string",
|
|
"enum": [
|
|
"top",
|
|
"middle",
|
|
"bottom"
|
|
]
|
|
},
|
|
"spacingLeft": {
|
|
"type": "number"
|
|
},
|
|
"spacingRight": {
|
|
"type": "number"
|
|
},
|
|
"spacingTop": {
|
|
"type": "number"
|
|
},
|
|
"spacingBottom": {
|
|
"type": "number"
|
|
}
|
|
}
|
|
},
|
|
"bounds": {
|
|
"type": "object",
|
|
"description": "Explicit top-left bounds for high-fidelity replication of text boxes and annotations",
|
|
"required": [
|
|
"x",
|
|
"y",
|
|
"width",
|
|
"height"
|
|
],
|
|
"properties": {
|
|
"x": {
|
|
"type": "number"
|
|
},
|
|
"y": {
|
|
"type": "number"
|
|
},
|
|
"width": {
|
|
"type": "number",
|
|
"exclusiveMinimum": 0
|
|
},
|
|
"height": {
|
|
"type": "number",
|
|
"exclusiveMinimum": 0
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"edges": {
|
|
"type": "array",
|
|
"description": "Connections between nodes",
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"from",
|
|
"to"
|
|
],
|
|
"properties": {
|
|
"from": {
|
|
"type": "string",
|
|
"pattern": "^[A-Za-z][A-Za-z0-9_-]*$",
|
|
"description": "Source node ID"
|
|
},
|
|
"to": {
|
|
"type": "string",
|
|
"pattern": "^[A-Za-z][A-Za-z0-9_-]*$",
|
|
"description": "Target node ID"
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"primary",
|
|
"data",
|
|
"optional",
|
|
"dependency",
|
|
"bidirectional"
|
|
],
|
|
"description": "Connector semantic type"
|
|
},
|
|
"label": {
|
|
"type": "string",
|
|
"description": "Edge label text"
|
|
},
|
|
"labelPosition": {
|
|
"type": "string",
|
|
"enum": [
|
|
"start",
|
|
"center",
|
|
"end"
|
|
],
|
|
"description": "Label position along edge"
|
|
},
|
|
"bidirectional": {
|
|
"type": "boolean",
|
|
"description": "Two-way connection flag"
|
|
},
|
|
"srcInterface": {
|
|
"type": "string",
|
|
"description": "Source interface label for network links"
|
|
},
|
|
"dstInterface": {
|
|
"type": "string",
|
|
"description": "Target interface label for network links"
|
|
},
|
|
"ip": {
|
|
"type": "string",
|
|
"description": "IP address or subnet label for the link"
|
|
},
|
|
"vlan": {
|
|
"oneOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "integer"
|
|
}
|
|
],
|
|
"description": "VLAN identifier for the link"
|
|
},
|
|
"bandwidth": {
|
|
"type": "string",
|
|
"description": "Bandwidth/capacity label for the link"
|
|
},
|
|
"linkType": {
|
|
"type": "string",
|
|
"description": "Link media or semantic category (e.g. trunk, access, fiber)"
|
|
},
|
|
"style": {
|
|
"type": "object",
|
|
"description": "Style overrides for this edge",
|
|
"properties": {
|
|
"strokeColor": {
|
|
"type": "string"
|
|
},
|
|
"strokeWidth": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"dashed": {
|
|
"type": "boolean"
|
|
},
|
|
"dashPattern": {
|
|
"type": "string"
|
|
},
|
|
"endArrow": {
|
|
"type": "string"
|
|
},
|
|
"exitX": {
|
|
"type": "number"
|
|
},
|
|
"exitY": {
|
|
"type": "number"
|
|
},
|
|
"exitDx": {
|
|
"type": "number"
|
|
},
|
|
"exitDy": {
|
|
"type": "number"
|
|
},
|
|
"entryX": {
|
|
"type": "number"
|
|
},
|
|
"entryY": {
|
|
"type": "number"
|
|
},
|
|
"entryDx": {
|
|
"type": "number"
|
|
},
|
|
"entryDy": {
|
|
"type": "number"
|
|
},
|
|
"fontSize": {
|
|
"type": "number",
|
|
"minimum": 1
|
|
},
|
|
"fontColor": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"waypoints": {
|
|
"type": "array",
|
|
"description": "Optional explicit routing waypoints for orthogonal edges",
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"x",
|
|
"y"
|
|
],
|
|
"properties": {
|
|
"x": {
|
|
"type": "number"
|
|
},
|
|
"y": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"labelOffset": {
|
|
"type": "object",
|
|
"description": "Explicit draw.io edge-label offset from the label anchor, in pixels",
|
|
"required": [
|
|
"x",
|
|
"y"
|
|
],
|
|
"properties": {
|
|
"x": {
|
|
"type": "number"
|
|
},
|
|
"y": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"modules": {
|
|
"type": "array",
|
|
"description": "Container groups for organizing nodes",
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"id",
|
|
"label"
|
|
],
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"pattern": "^[A-Za-z][A-Za-z0-9_-]*$",
|
|
"description": "Unique module identifier"
|
|
},
|
|
"label": {
|
|
"type": "string",
|
|
"description": "Module display name"
|
|
},
|
|
"color": {
|
|
"type": "string",
|
|
"description": "Fill color or theme token (e.g. $primary)"
|
|
},
|
|
"style": {
|
|
"type": "object",
|
|
"description": "Style overrides for this module"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|