Подтвердить что ты не робот

Работает ли операционная трансформация на структурированных документах, таких как HTML, если их просто рассматривать как простой текст?

Часто задаваемые вопросы в Google Wave Protocol говорят, что [HTML] "не имеет желаемых свойств" и что "HTML делает OT (операционные преобразования) сложным, если не невозможным" [1]. Почему это так? Какие проблемы возникают, если HTML обрабатывается просто как обычный текст, а затем применяется OT?

4b9b3361

Ответ 1

Я предполагаю, что вы понимаете основы OT. Основная проблема с выполнением OT в HTML как обычный текст - это слияние тегов 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>"

Если сервер получил сообщение Боба после Алисы, ему нужно будет преобразовать 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 для добавления node, удаления, например:

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

Ответ 2

У меня нет полного ответа, но я заинтересован в том, чтобы проделать большую работу над тем, чтобы существующие библиотеки операционных преобразований с открытым исходным кодом работали с богатым текстом, поэтому я буду вносить то, что знаю.

Важным отличием между 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. Возможно, они могут реализовать поддержку расширенного текста, приняв часть схемы Wave XML.

Ответ 3

В OT есть , которые поддерживают SGML (надмножество XML), но реализаций нет. Поэтому это невозможно! Хотя, я согласен, OT не лучший подход для включения XML. Это связано с тем, что OT был разработан для линейных структур данных. Но HTML/XML намного сложнее: он имеет атрибуты, и он построен как дерево. Тот факт, что это дерево, разрешимо, но атрибуты, реализуемые как упорядоченный ассоциативный массив, не поддерживаются OT. Просто потому, что ассоциативные массивы не поддерживаются OT (на данный момент). Приведенный выше подход рекомендует рассматривать атрибуты как строку: например. "id = 'myid' value = 'mystuff'" Но вы можете легко сломать весь синтаксис своей "атрибуты-строки", когда один пользователь удаляет все атрибуты, а другой вставляет "символ сразу после" mystuff ". Это может быть разрешено в некотором теге div, который выглядит так: <div ">, что является недопустимым синтаксисом.

Возможно, это вас интересует:

CEFX - это проект, который нацелен на поддержку XML - это, насколько мне известно, мертво. Но он использует подход OT. По какой-то причине невозможно редактировать только строковые элементы xml.

SDK Google Drive поддерживает графические структуры данных. Это, однако, запатентовано, и никто не знает, как это работает.

Я разрабатываю структуру, которая поддерживает произвольные структуры данных. В настоящее время поддерживаются текст, Json, XML и HTML. У этого есть другой подход: проверьте его: Yatta!

BTW: что протокол Wave и описание Эрика Дрехселя известны как Аннотации в OT. Он обычно используется для поддержки расширенного текста.