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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。