18

Câu hỏi thường gặp về Giao thức Google Wave cho biết rằng [HTML] "không có các thuộc tính mong muốn" và "HTML làm cho OT (Biến đổi hoạt động) khó nếu không phải là không thể" [1]. Tại sao cái này rất? Có vấn đề gì nếu HTML được xử lý đơn giản dưới dạng văn bản thuần túy và sau đó OT được áp dụng?Hoạt động chuyển đổi có hoạt động trên các tài liệu có cấu trúc như HTML nếu chỉ được coi là văn bản thuần túy không?

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

Trả lời

5

Tôi không có một câu trả lời hoàn chỉnh nhưng tôi muốn nhìn thấy nhiều việc làm trên làm cho hiện mã nguồn mở thư viện chuyển đổi hoạt động làm việc với văn bản phong phú, vì vậy tôi sẽ đóng góp những gì Tôi biết.

Sự khác biệt quan trọng giữa HTML và lược đồ Wave dường như là cách định dạng văn bản được đánh dấu: một heirarchy của các thẻ lồng nhau cho HTML so với chú thích ban nhạc (trong phần cuối của tài liệu) với phạm vi cho Wave XML . Chú thích ngoài băng có lẽ là cách tự nhiên hơn để đánh dấu định dạng văn bản vì chúng cho phép các định dạng chồng chéo (không lồng nhau). Nó cho phép một cái gì đó như thế này (trong giả đánh dấu), mà sẽ không có XML hợp lệ bằng cách sử dụng đại diện lồng nhau:

(b) This is bold (i) while this range is both bold and italic (/b) and this last bit is just italic (/i)

liên quan, đây là relevant issue trong dự án ShareJS. Có lẽ họ có thể triển khai hỗ trợ văn bản đa dạng bằng cách chấp nhận một phần lược đồ XML Wave.

+1

+1 cho [ShareJS discussion] (https://github.com/josephg/ShareJS/issues/1)! – mb21

16

Tôi giả định ở đây bạn hiểu các khái niệm cơ bản về OT. Vấn đề chính khi thực hiện OT trên HTML dưới dạng văn bản thuần túy là việc kết hợp các thẻ html. Như một ví dụ đơn giản, nói rằng chúng ta đã có một tài liệu như sau:

Hello world 

Alice sau đó quyết định thế giới cần được in đậm:

Hello <b>world</b> 

Điều này có thể được biểu diễn bằng một thao tác chèn đôi trong Cựu Ước, sơ đồ :

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

Nếu Bob quyết định rằng 'thế giới' nên nghiêng trước khi anh nhìn thấy chỉnh sửa của Alice, ông sẽ thêm các hoạt động

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

Nếu máy chủ nhận được bản chỉnh sửa của Bob sau Alice, nó sẽ cần phải chuyển B thành A để trở thành B '.

Câu lệnh Keep không thay đổi thông qua quá trình chuyển đổi, nhưng Chèn "" được chuyển qua Chèn "" có thể trở thành Keep 3: Insert "" hoặc Insert "": Keep 3. Thường thì máy chủ sẽ được định cấu hình để đặt chỉnh sửa sau chỉnh sửa đầu tiên.

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

Tại đây vấn đề trở nên rõ ràng. Áp dụng A sau đó B' vào chuỗi ban đầu cung cấp cho các html hợp lệ:

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

Về mặt lý thuyết điều này có thể được giải quyết bằng cách thay đổi trước và sau khi chèn, nhưng điều này sẽ được lông cho các ví dụ phức tạp hơn, có khả năng liên quan đến một tài liệu quét toàn bộ cho mọi biến đổi.

Như câu trả lời khác đã lưu ý, có thể tránh được sự lộn xộn này bằng cách sử dụng chú thích ngoài băng + văn bản thuần túy.Một cách tiếp cận tôi chỉ thấy cho đến nay trong các giấy tờ học tập là để điều trị cấu trúc XML như một cây với các hoạt động OT bổ sung nút, xóa, ví dụ:

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

+1

Tôi đoán vấn đề cơ bản ở đây là với chèn đồng thời, kết quả cuối cùng luôn có thể sai ngữ nghĩa - nhưng với trường hợp của XML/HTML, kết quả cuối cùng có thể sai cú pháp. Việc sử dụng các chú thích không làm gì để giảm bớt sự không thống nhất ngữ nghĩa, nhưng đảm bảo rằng phép chuyển đổi sẽ tạo ra XML/HTML hợp lệ và vì vậy luôn có thể được trả về một cách độc đáo. Cảm ơn. – Nakedible

+0

Hoàn toàn đúng – jazmit

1

approaches in OT hỗ trợ SGML (superset của XML), nhưng không có triển khai. Vì vậy, nó không phải là không thể! Mặc dù, tôi đồng ý, OT không phải là cách tiếp cận tốt nhất để kích hoạt XML. Điều này là do OT được thiết kế cho các cấu trúc dữ liệu tuyến tính. Nhưng HTML/XML phức tạp hơn nhiều: nó có các thuộc tính, và nó được xây dựng như một cái cây. Thực tế là nó là một cây có thể giải quyết được, nhưng các thuộc tính - được nhận ra như là một mảng kết hợp có thứ tự - không được OT hỗ trợ. Đơn giản vì mảng kết hợp không được OT hỗ trợ (hiện tại). Phương pháp trên thực sự đề xuất để coi các thuộc tính là một chuỗi: Ví dụ: "id = 'myid' value = 'mystuff'" Nhưng bạn có thể dễ dàng phá vỡ toàn bộ cú pháp của 'thuộc tính-chuỗi' của bạn, khi một người dùng xóa tất cả các thuộc tính, và một người khác chèn một "nhân vật trực tiếp sau" bí ẩn ". . có thể giải quyết trong một số thẻ div đó trông giống như <div "> này, mà không phải là cú pháp hợp lệ

có lẽ đây bạn quan tâm:

CEFX là một dự án nhằm hỗ trợ XML - nó chết để kiến ​​thức của tôi Nhưng nó sử dụng. Vì một lý do nào đó, không thể chỉnh sửa các phần tử xml chỉ chuỗi -

SDK Drive của Google hỗ trợ cấu trúc dữ liệu giống như đồ thị. y biết cách nó hoạt động.

Tôi đang phát triển một khung công tác hỗ trợ cấu trúc dữ liệu tùy ý. Hiện tại, hỗ trợ Text, Json, XML và HTML. Phương pháp này có cách tiếp cận khác: hãy kiểm tra: Yatta!

BTW: Giao thức Wave và mô tả Eric Drechsel được gọi là Chú thích trong Cựu ước. Nó thường được thừa hưởng để hỗ trợ văn bản đa dạng thức.

Các vấn đề liên quan