Google Wave協議的常見問題表明[HTML]「沒有理想的屬性」,而且「HTML使得OT(操作變換)如果不是不可能也很困難」[1]。這是爲什麼?如果將HTML簡單處理爲純文本,然後應用OT,會出現什麼問題?如果簡單地將它視爲純文本,那麼對HTML等結構化文檔是否進行操作轉換?
回答
我沒有一個完整的答案,但我希望看到在使現有的開源運營轉型與圖書館豐富的文本工作,更多的工作要做,所以我會貢獻什麼我知道。
HTML和Wave模式之間的重要區別似乎是標記文本格式的方式:用於HTML的帶嵌套標籤的分層對比帶外註釋(在文檔的頁腳中)帶有Wave XML範圍。帶外註釋可能是標記文本格式的更自然的方式,因爲它們允許重疊(非嵌套)格式。它允許這樣的事情(在僞標記),使用嵌套表示這不會是有效的XML:
(b) This is bold (i) while this range is both bold and italic (/b) and this last bit is just italic (/i)
相關,這裏是在ShareJS項目relevant issue。也許他們可以通過採用Wave XML模式的一部分來實現豐富的文本支持。
我假設你在這裏瞭解OT的基礎知識。將HTML做爲純文本的主要問題是合併html標籤。舉一個簡單的例子,假設我們有一個文件如下:
Hello world
愛麗絲然後決定這個世界應該是大膽:
Hello <b>world</b>
這可以用在OT雙插入操作來表示,示意圖:
Edit A: Keep 6 : Insert "<b>" : Keep 5 : Insert "</b>"
如果Bob決定,「世界」應該是斜體,他看到了愛麗絲的編輯之前,他會增加操作的
Edit B: Keep 6 : Insert "<i>" : Keep 5 : Insert "</i>"
如果服務器在Alice之後收到Bob的編輯,它需要將B轉換成A來變爲B'。
Keep語句通過轉換保持不變,但Insert「」轉換爲Insert「」可以變爲Keep 3:Insert「」或Insert「」: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
有approaches in OT支持的SGML(超XML),但沒有實現。所以,這不是不可能!雖然,我同意OT不是啓用XML的最佳方法。這是因爲OT是爲線性數據結構設計的。但HTML/XML更復雜:它具有屬性,並且它像樹一樣構建。它是一棵樹的事實是可以解決的,但是這些屬性 - 作爲一個有序的關聯數組來實現 - 並不支持OT。僅僅因爲關聯數組不被OT支持(目前)。上面的方法實際上建議將屬性視爲一個字符串:例如, 「id ='myid'value ='mystuff'」 但是,當一個用戶刪除所有屬性,並且另一個用戶在「mystuff」之後直接插入「字符時,您可以輕鬆地打破'屬性字符串'的整個語法。 。可能在一些div標籤看起來像這樣<div ">
,這不是有效的語法解析
也許您對此有興趣:
CEFX是一個項目,目的是支持XML - 它已經死了,據我所知,但它使用。由於某些原因,不可能編輯字符串 - 只有xml元素
谷歌的Drive SDK支持類似圖形的數據結構,但它是專有和nobod你知道它是如何工作的。
我正在開發一個支持任意數據結構的框架。目前支持Text,Json,XML和HTML。它有一個不同的方法:檢查出來:Yatta!
順便說一句:Wave協議和Eric Drechsel描述的是OT中的Annotations。它通常用於支持富文本。
- 1. 如何將純文本轉換成結構化的PowerShell對象
- 2. 將HTML文本轉換爲純文本
- 3. 是否有將HTML轉換爲純文本的功能?
- 4. 將HTML轉換爲純文本剃刀
- 5. Ruby:將HTML/Redcloth轉換爲純文本
- 6. 將純文本輸入轉換爲HTML
- 7. 將html轉換爲純文本jquery .ajax
- 8. HTML /文本到新結構化轉換
- 9. 將表單轉換爲純文本
- 10. 如何將HTML文本轉換爲純文本?
- 11. 如何將html文本轉換爲報表中的純文本
- 12. 如何將純文本轉換爲android中的html文本?
- 13. Xcode iPhone - 如何將圖像轉換爲文本進行操作?
- 14. 如何將舊的MS Word文檔轉換爲純文本?
- 15. 將HTML轉換爲純文本維護換行符
- 16. 將兩列文本文檔轉換爲單行文本挖掘
- 17. 對不同結構的文檔進行求和操作
- 18. 將塊從文本/純文本轉換爲文本/ javascript並執行它
- 19. 如何將簡單結構的xml文件轉換爲csv?
- 20. 如何將純文本轉換爲HTML中的html格式
- 21. 將HTML轉換爲Google文檔轉換
- 22. 如何將純文本轉換爲ODF?
- 23. 如何將RTF轉換爲純文本?
- 24. 如何將純文本轉換爲xsl
- 25. 將HTML轉換爲純文本並保持結構/格式,使用ruby
- 26. textarea html標籤轉換爲純文本
- 27. Outlook - 將純文本轉換爲HTML - 在2007年不起作用
- 28. 將純文本映射回HTML文檔
- 29. 本地化一個HTML文檔(後視)
- 30. 將純文本HTML文件轉換爲二進制文件Excel 97-2003
+1 [ShareJS討論](https://github.com/josephg/ShareJS/issues/1)! – mb21 2013-01-31 14:28:08