文档结构、身份与合法性
区分文本、树、标记和嵌入对象,用 schema 明确允许结构。
文档包含哪些对象
纯文本主要保存字符序列,富文本还保存段落、标题、列表、链接和格式。结构化文档可以用树表示:根节点包含块节点,块节点包含文本或内联对象,某些节点还携带属性。
格式可以作为节点或标记表示。一个标题是具有层级属性的块,一段文本上的强调是覆盖范围的标记,一张图片是携带资源引用的对象。它们的编辑、转换和身份需求不同,不能只靠展示出来的 HTML 判断全部文档状态。
Schema 规定允许结构
Schema 描述节点、属性、可包含内容与标记的规则。例如根可以包含块,列表可以包含列表项,段落可以包含文本和内联节点。输入需要按规则解析或校验,操作后也应得到合法文档。
同一段 HTML 在不同 schema 中可能被解释为不同结构,也可能被丢弃未知节点。扩展注册决定实际可用规则;仅安装包或导出类并不能证明编辑器使用它。ProseMirror 原项目的 Schema guide说明 schema 怎样约束文档结构。
身份与位置各有作用
位置用于定位当前文档中的边界或范围,插入删除可能让它改变。节点身份用于跨变化继续指认同一对象,需要有明确生成和维护规则。两者不能互换:保存一个旧字符偏移,稍后对已经改变的文档使用,可能命中其他内容。
选择范围还需要起止方向、文本与节点选择等条件。编辑器状态通常包括文档和选择,视图把它们呈现为光标和选区。用户点击的位置经过界面坐标、节点视图和模型位置映射后,才变成模型中的目标。
原始内容与展示
结构模型可以导出 HTML、Markdown 或 JSON。JSON 通常保留模型节点和属性,HTML 服务展示和交换,Markdown 受语法能力限制。某种格式能展示一个效果,不代表它能完整往返恢复结构、注释或扩展属性。
嵌入内容还应区分数据、引用与执行。图片 URL 指向外部资源,视频嵌入涉及第三方页面,脚本或可执行表达式引入新的信任边界。清理输入、限制协议和按渲染上下文编码,各有实际条件。
Schema 如何变化
新增节点类型时,旧客户端可能无法识别;删除属性时,旧文档可能仍依赖它。需要先确定版本、未知结构处理和迁移过程,再把新规则用于旧内容。协同参与者具有不同 schema 时,合法性分歧可能导致内容丢失或重复修复。
本页采用结构模型,不把某个编辑器的节点名推广成唯一文档表示方式。实践应进一步说明实际注册、解析和渲染路径。
最后更新于