实时 – 如果简单地将其视为纯文本,是否可以对结构化文档(如HTML)进行操作转换?

前端之家收集整理的这篇文章主要介绍了实时 – 如果简单地将其视为纯文本,是否可以对结构化文档(如HTML)进行操作转换?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Google Wave Protocol的常见问题解答说,[HTML]“没有理想的属性”,“HTML使得OT(操作变换)难以实现,甚至不可能”[1]。为什么这样呢如果HTML被简单地视为纯文本,然后再应用OT,会出现什么问题?

> http://www.waveprotocol.org/faq#TOC-What-s-the-XML-schema-for-waves-Why

解决方法

我在这里假设你了解OT的基础知识。将HTML作为纯文本做OT的主要问题是合并html标签。作为一个简单的例子,说我们有一个文件如下:
Hello world

爱丽丝然后决定世界应该是粗体:

Hello <b>world</b>

这可以通过OT中的双重插入操作来表示:示意性地:

Edit A: Keep 6 : Insert "<b>" : Keep 5 : Insert "</b>"

如果鲍勃决定在看到爱丽丝的编辑之前,“世界”应该是斜体,那么他会添加这个操作

Edit B: Keep 6 : Insert "<i>" : Keep 5 : Insert "</i>"

如果服务器在Alice之后接收到Bob的编辑,则需要将B转换为A变为B’。

通过转换,Keep语句不变,但插入“”可以变为“插入”“插入”或“插入”“保留3”。通常,服务器将被配置为在第一次编辑后放置后续编辑。

Edit B': Keep 6 : Keep 3 : Insert "<i>" : Keep 5 : Keep 3 : Insert "</i>"

这里的问题变得很明显。应用A然后B’到原始字符串给无效的html:

Hello <b><i>world</b></i>

从理论上讲,这可以通过改变前置和后置插入来解决,但是对于更复杂的例子,这将会变得毛茸茸,可能涉及到每次转换的完整文档扫描。

正如另一个答案指出的,这个混乱可以避免使用带外注释纯文本。在学术论文中我迄今为止看到的另一种方法是将XML结构视为具有OT操作的树,用于节点添加删除,例如:

http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.100.74

猜你在找的HTML相关文章