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