527 lines
16 KiB
JSON
527 lines
16 KiB
JSON
{
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"title": "DingTalk Document JSONML Body Schema",
|
|
"description": "钉钉文档 body JSONML 的结构校验 schema",
|
|
"type": "array",
|
|
"items": { "$ref": "#/definitions/blockNode" },
|
|
"definitions": {
|
|
"blockNode": {
|
|
"oneOf": [
|
|
{ "$ref": "#/definitions/paragraph" },
|
|
{ "$ref": "#/definitions/heading" },
|
|
{ "$ref": "#/definitions/hr" },
|
|
{ "$ref": "#/definitions/table" },
|
|
{ "$ref": "#/definitions/code" },
|
|
{ "$ref": "#/definitions/container" },
|
|
{ "$ref": "#/definitions/embed" },
|
|
{ "$ref": "#/definitions/onlineVideo" },
|
|
{ "$ref": "#/definitions/card" },
|
|
{ "$ref": "#/definitions/toc" },
|
|
{ "$ref": "#/definitions/refblock" }
|
|
]
|
|
},
|
|
"inlineContent": {
|
|
"oneOf": [
|
|
{ "type": "string" },
|
|
{ "$ref": "#/definitions/textNode" },
|
|
{ "$ref": "#/definitions/link" },
|
|
{ "$ref": "#/definitions/image" },
|
|
{ "$ref": "#/definitions/mention" },
|
|
{ "$ref": "#/definitions/formula" },
|
|
{ "$ref": "#/definitions/sticker" },
|
|
{ "$ref": "#/definitions/inlineCode" },
|
|
{ "$ref": "#/definitions/br" }
|
|
]
|
|
},
|
|
"textNode": {
|
|
"type": "array",
|
|
"minItems": 3,
|
|
"maxItems": 3,
|
|
"items": [
|
|
{ "type": "string", "const": "text" },
|
|
{ "$ref": "#/definitions/textMarks" },
|
|
{ "type": "string" }
|
|
]
|
|
},
|
|
"textMarks": {
|
|
"type": "object",
|
|
"properties": {
|
|
"bold": { "type": "boolean" },
|
|
"italic": { "type": "boolean", "const": true },
|
|
"strike": { "type": "boolean" },
|
|
"dstrike": { "type": "boolean" },
|
|
"underline": {
|
|
"type": "object",
|
|
"properties": {
|
|
"value": { "type": "string", "enum": ["single", "dash", "wave", "double", "none"] },
|
|
"color": { "type": "string" }
|
|
},
|
|
"required": ["value"]
|
|
},
|
|
"color": { "type": "string" },
|
|
"highlight": { "type": "string" },
|
|
"shd": {
|
|
"type": "object",
|
|
"properties": {
|
|
"val": { "type": "string" },
|
|
"color": { "type": "string" },
|
|
"fill": { "type": "string" }
|
|
}
|
|
},
|
|
"sz": { "type": "number" },
|
|
"szUnit": { "type": "string", "enum": ["px", "pt"], "default": "px" },
|
|
"fonts": {
|
|
"type": "object",
|
|
"properties": {
|
|
"ascii": { "type": "string" },
|
|
"hAnsi": { "type": "string" },
|
|
"cs": { "type": "string" },
|
|
"eastAsia": { "type": "string" }
|
|
}
|
|
},
|
|
"vertAlign": { "type": "string", "enum": ["superscript", "subscript", "baseline"] },
|
|
"spacing": { "type": "number", "description": "字间距,单位 pt" }
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"paragraphAttrs": {
|
|
"type": "object",
|
|
"properties": {
|
|
"jc": { "type": "string", "enum": ["left", "center", "right", "both", "distribute", "justify"] },
|
|
"ind": {
|
|
"type": "object",
|
|
"properties": {
|
|
"left": { "type": "number" },
|
|
"start": { "type": "number" },
|
|
"leftChars": { "type": "number" },
|
|
"right": { "type": "number" },
|
|
"end": { "type": "number" },
|
|
"rightChars": { "type": "number" },
|
|
"hanging": { "type": "number" },
|
|
"hangingChars": { "type": "number" },
|
|
"firstLine": { "type": "number" },
|
|
"firstLineChars": { "type": "number" }
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"spacing": {
|
|
"type": "object",
|
|
"properties": {
|
|
"line": { "type": "number" },
|
|
"before": { "type": "number" },
|
|
"beforeLines": { "type": "number" },
|
|
"beforeAutospacing": { "type": "boolean" },
|
|
"after": { "type": "number" },
|
|
"afterLines": { "type": "number" },
|
|
"afterAutospacing": { "type": "boolean" },
|
|
"lineRule": { "type": "string", "enum": ["atLeast", "auto", "exact"] }
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"shd": {
|
|
"type": "object",
|
|
"properties": {
|
|
"val": { "type": "string" },
|
|
"color": { "type": "string" },
|
|
"fill": { "type": "string" }
|
|
}
|
|
},
|
|
"blockquote": { "type": "boolean" },
|
|
"list": { "$ref": "#/definitions/listProperties" },
|
|
"refs": { "type": "array", "items": { "type": "string" } }
|
|
},
|
|
"additionalProperties": true
|
|
},
|
|
"listProperties": {
|
|
"type": "object",
|
|
"required": ["listId", "level"],
|
|
"properties": {
|
|
"listId": { "type": "string" },
|
|
"level": { "type": "integer", "minimum": 0 },
|
|
"isOrdered": { "type": "boolean", "default": false },
|
|
"isTaskList": { "type": "boolean", "default": false },
|
|
"isChecked": { "type": "boolean" },
|
|
"isCanceled": { "type": "boolean" },
|
|
"start": { "type": "integer", "minimum": 1 },
|
|
"listStyleType": { "type": "string" },
|
|
"hideSymbol": { "type": "boolean" },
|
|
"listStyle": {
|
|
"type": "object",
|
|
"properties": {
|
|
"format": { "type": "string", "enum": ["bullet", "decimal", "decimalZero", "lowerLetter", "lowerRoman", "upperLetter", "upperRoman", "chineseCountingThousand"] },
|
|
"text": { "type": "string" },
|
|
"align": { "type": "string", "enum": ["left", "start", "end", "center", "both", "right", "distribute"] }
|
|
},
|
|
"required": ["format", "text", "align"]
|
|
}
|
|
},
|
|
"additionalProperties": true
|
|
},
|
|
"paragraph": {
|
|
"type": "array",
|
|
"minItems": 2,
|
|
"items": [
|
|
{ "type": "string", "const": "p" },
|
|
{ "$ref": "#/definitions/paragraphAttrs" }
|
|
],
|
|
"additionalItems": { "$ref": "#/definitions/inlineContent" }
|
|
},
|
|
"heading": {
|
|
"type": "array",
|
|
"minItems": 2,
|
|
"items": [
|
|
{ "type": "string", "enum": ["h1", "h2", "h3", "h4", "h5", "h6"] },
|
|
{ "$ref": "#/definitions/paragraphAttrs" }
|
|
],
|
|
"additionalItems": { "$ref": "#/definitions/inlineContent" }
|
|
},
|
|
"hr": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"maxItems": 2,
|
|
"items": [
|
|
{ "type": "string", "const": "hr" },
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"type": { "type": "string", "enum": ["single", "dotted", "dashed", "double", "wave", "doubleWave", "dotDash", "dotDotDash", "custom", "thickThinSmallGap", "thinThickThinMediumGap", "dashStroked", "dashDotStroked", "widthDoubleWave", "widthWave", "roundDot"] },
|
|
"sz": { "type": "number", "default": 1 },
|
|
"color": { "type": "string" },
|
|
"width": { "oneOf": [{ "type": "number" }, { "type": "string" }] }
|
|
},
|
|
"additionalProperties": true
|
|
}
|
|
]
|
|
},
|
|
"table": {
|
|
"type": "array",
|
|
"minItems": 2,
|
|
"items": [
|
|
{ "type": "string", "const": "table" },
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"colsWidth": { "type": "array", "items": { "type": "number" } },
|
|
"sr": { "type": "boolean" },
|
|
"jc": { "type": "string" },
|
|
"spacing": { "type": "number" }
|
|
}
|
|
}
|
|
],
|
|
"additionalItems": { "$ref": "#/definitions/tableRow" }
|
|
},
|
|
"tableRow": {
|
|
"type": "array",
|
|
"minItems": 2,
|
|
"items": [
|
|
{ "type": "string", "const": "tr" },
|
|
{ "type": "object" }
|
|
],
|
|
"additionalItems": { "$ref": "#/definitions/tableCell" }
|
|
},
|
|
"tableCell": {
|
|
"type": "array",
|
|
"minItems": 2,
|
|
"items": [
|
|
{ "type": "string", "const": "tc" },
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"colSpan": { "type": "integer", "minimum": 1, "default": 1 },
|
|
"rowSpan": { "type": "integer", "minimum": 1, "default": 1 },
|
|
"fill": { "type": "string" },
|
|
"vAlign": { "type": "string", "enum": ["top", "middle", "bottom"], "default": "middle" }
|
|
},
|
|
"additionalProperties": true
|
|
}
|
|
],
|
|
"additionalItems": { "$ref": "#/definitions/blockNode" }
|
|
},
|
|
"code": {
|
|
"type": "array",
|
|
"minItems": 2,
|
|
"maxItems": 2,
|
|
"items": [
|
|
{ "type": "string", "const": "code" },
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"code": { "type": "string", "default": "" },
|
|
"syntax": { "type": "string", "default": "plaintext" },
|
|
"theme": { "type": "string", "enum": ["default", "light", "dracula", "github", "cobalt", "atomOneDark", "oneLightPro", "nightOwl", "githubDark", "realDracula"], "default": "default" },
|
|
"wrap": { "type": "boolean", "default": true },
|
|
"showLineNumber": { "type": "boolean", "default": true },
|
|
"title": { "type": "string", "maxLength": 1000 },
|
|
"fold": { "type": "boolean", "default": false }
|
|
},
|
|
"additionalProperties": true
|
|
}
|
|
]
|
|
},
|
|
"container": {
|
|
"type": "array",
|
|
"minItems": 2,
|
|
"items": [
|
|
{ "type": "string", "const": "container" },
|
|
{
|
|
"type": "object",
|
|
"required": ["subType"],
|
|
"properties": {
|
|
"subType": { "type": "string" },
|
|
"metadata": { "type": "object" }
|
|
}
|
|
}
|
|
],
|
|
"additionalItems": { "$ref": "#/definitions/blockNode" }
|
|
},
|
|
"embed": {
|
|
"type": "array",
|
|
"minItems": 2,
|
|
"maxItems": 2,
|
|
"items": [
|
|
{ "type": "string", "const": "embed" },
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"name": { "type": "string" },
|
|
"type": { "type": "string" },
|
|
"src": { "type": "string" },
|
|
"size": { "type": "number" },
|
|
"viewType": { "type": "string" },
|
|
"previewSize": { "type": "object", "properties": { "height": { "type": "number" } } }
|
|
},
|
|
"additionalProperties": true
|
|
}
|
|
]
|
|
},
|
|
"onlineVideo": {
|
|
"type": "array",
|
|
"minItems": 2,
|
|
"maxItems": 2,
|
|
"items": [
|
|
{ "type": "string", "const": "onlineVideo" },
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"src": { "type": "string" },
|
|
"type": { "type": "string" },
|
|
"poster": { "type": "string" }
|
|
},
|
|
"additionalProperties": true
|
|
}
|
|
]
|
|
},
|
|
"card": {
|
|
"type": "array",
|
|
"minItems": 2,
|
|
"maxItems": 2,
|
|
"items": [
|
|
{ "type": "string", "const": "card" },
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"cardType": { "type": "string" },
|
|
"metadata": { "type": "object" },
|
|
"height": { "type": "number" }
|
|
},
|
|
"additionalProperties": true
|
|
}
|
|
]
|
|
},
|
|
"toc": {
|
|
"type": "array",
|
|
"minItems": 2,
|
|
"maxItems": 2,
|
|
"items": [
|
|
{ "type": "string", "const": "toc" },
|
|
{
|
|
"type": "object",
|
|
"required": ["title", "mode", "styles", "content"],
|
|
"properties": {
|
|
"title": { "type": "string" },
|
|
"mode": { "type": "string", "enum": ["outline", "column"] },
|
|
"styles": {
|
|
"type": "object",
|
|
"required": ["global", "title", "item"],
|
|
"properties": {
|
|
"global": {
|
|
"type": "object",
|
|
"required": ["maxLevel", "bgColor"],
|
|
"properties": {
|
|
"maxLevel": { "type": "integer", "minimum": 1 },
|
|
"bgColor": { "type": "string" },
|
|
"css": { "type": "object" }
|
|
}
|
|
},
|
|
"title": {
|
|
"type": "object",
|
|
"properties": {
|
|
"font": { "type": "string" },
|
|
"color": { "type": "string" },
|
|
"numbering": { "type": "boolean" },
|
|
"css": { "type": "object" }
|
|
}
|
|
},
|
|
"item": {
|
|
"type": "object",
|
|
"properties": {
|
|
"symbol": { "type": "string", "enum": ["disc", "none"] },
|
|
"css": { "type": "object" }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"content": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/definitions/tocItem" }
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"tocItem": {
|
|
"type": "object",
|
|
"required": ["uuid", "anchorId", "level", "children"],
|
|
"properties": {
|
|
"uuid": { "type": "string" },
|
|
"anchorId": { "oneOf": [{ "type": "string" }, { "type": "null" }] },
|
|
"level": { "type": "integer" },
|
|
"children": { "type": "array", "items": { "$ref": "#/definitions/tocItem" } },
|
|
"text": { "type": "string" }
|
|
}
|
|
},
|
|
"refblock": {
|
|
"type": "array",
|
|
"minItems": 2,
|
|
"items": [
|
|
{ "type": "string", "const": "refblock" },
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"docKey": { "type": "string" },
|
|
"refblockUUID": { "type": "string" }
|
|
},
|
|
"additionalProperties": true
|
|
}
|
|
],
|
|
"additionalItems": { "$ref": "#/definitions/blockNode" }
|
|
},
|
|
"link": {
|
|
"type": "array",
|
|
"minItems": 2,
|
|
"items": [
|
|
{ "type": "string", "const": "a" },
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"href": { "type": "string" },
|
|
"cardInfo": { "type": "object" },
|
|
"metadata": { "type": "object" }
|
|
},
|
|
"additionalProperties": true
|
|
}
|
|
],
|
|
"additionalItems": { "$ref": "#/definitions/inlineContent" }
|
|
},
|
|
"image": {
|
|
"type": "array",
|
|
"minItems": 2,
|
|
"maxItems": 2,
|
|
"items": [
|
|
{ "type": "string", "const": "img" },
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"src": { "type": "string" },
|
|
"width": { "type": "number" },
|
|
"height": { "type": "number" },
|
|
"rectClip": { "type": "object" },
|
|
"rotation": { "type": "number" },
|
|
"radius": { "type": "number" },
|
|
"shadow": { "type": "string" }
|
|
},
|
|
"additionalProperties": true
|
|
}
|
|
]
|
|
},
|
|
"mention": {
|
|
"type": "array",
|
|
"minItems": 2,
|
|
"items": [
|
|
{ "type": "string", "const": "span" },
|
|
{
|
|
"type": "object",
|
|
"required": ["data-type"],
|
|
"properties": {
|
|
"data-type": { "type": "string", "const": "mention" },
|
|
"id": { "type": "string" },
|
|
"name": { "type": "string" },
|
|
"login": { "type": "string" },
|
|
"metadata": { "type": "object" }
|
|
},
|
|
"additionalProperties": true
|
|
}
|
|
],
|
|
"additionalItems": { "type": "string" }
|
|
},
|
|
"formula": {
|
|
"type": "array",
|
|
"minItems": 2,
|
|
"maxItems": 2,
|
|
"items": [
|
|
{ "type": "string", "const": "tag" },
|
|
{
|
|
"type": "object",
|
|
"required": ["tagType", "metadata"],
|
|
"properties": {
|
|
"tagType": { "type": "string", "const": "formula" },
|
|
"metadata": {
|
|
"type": "object",
|
|
"required": ["formula"],
|
|
"properties": {
|
|
"formula": { "type": "string" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"sticker": {
|
|
"type": "array",
|
|
"minItems": 2,
|
|
"items": [
|
|
{ "type": "string", "const": "span" },
|
|
{
|
|
"type": "object",
|
|
"required": ["data-type"],
|
|
"properties": {
|
|
"data-type": { "type": "string", "const": "emoji" },
|
|
"code": { "type": "string" },
|
|
"newCode": { "type": "object" }
|
|
},
|
|
"additionalProperties": true
|
|
}
|
|
]
|
|
},
|
|
"inlineCode": {
|
|
"type": "array",
|
|
"minItems": 2,
|
|
"items": [
|
|
{ "type": "string", "const": "inlineCode" },
|
|
{ "type": "object", "properties": { "bgColor": { "type": "string" } }, "additionalProperties": true }
|
|
],
|
|
"additionalItems": { "$ref": "#/definitions/inlineContent" }
|
|
},
|
|
"br": {
|
|
"type": "array",
|
|
"minItems": 2,
|
|
"maxItems": 3,
|
|
"items": [
|
|
{ "type": "string", "const": "br" },
|
|
{ "type": "object" },
|
|
{ "type": "string" }
|
|
]
|
|
}
|
|
}
|
|
}
|