Сравнение версий контента, созданного пользователем и измененного

Я работаю над проектом по созданию инструмента для совместной работы в Интернете. Заглянув в Википедию, я заметил, что созданные пользователем итерации страницы легко сравнивать друг с другом; сравнение подчеркивает различия.

Концептуально, что мне нужно было бы реализовать, чтобы сделать то же самое?


person Kriem    schedule 09.05.2009    source источник
comment
Почему вы не можете просто использовать любой из уже существующих вики-движков для своего инструмента совместной работы?   -  person lothar    schedule 09.05.2009
comment
Сложность нашего инструмента идет немного дальше этого. Вопрос в том, хороши ли эти двигатели? Я не хочу создавать миллионную вики.   -  person Kriem    schedule 09.05.2009
comment
О да, есть множество хороших движков вики. Не изобретайте велосипед. Если вы это сделаете, вы можете взглянуть на средство просмотра редактирования на SO, это похоже на то, что вы описываете.   -  person Zifre    schedule 10.05.2009
comment
Представление редактирования SO - это почти именно то, что я хочу достичь. Это на основе вики-движка?   -  person Kriem    schedule 10.05.2009
comment
@Kriem: да, ТАК это вики. IIRC, он построен на заказ.   -  person Zifre    schedule 10.05.2009
comment
@Zifre (и Lothar?): Полезно знать! Хотите сделать реальный ответ ниже?   -  person Kriem    schedule 10.05.2009


Ответы (2)


Составлено на основе хорошего совета:

Самый простой способ - просто использовать любой из уже существующих вики-движков. Существует множество хороших вики-движков. Не изобретайте велосипед.

Например, сам StackOverflow - это специально созданная вики. Посмотрите на средство просмотра редактирования на Stack Overflow, чтобы увидеть, насколько хорошо его функциональность соответствует описанной в вопросе.

person Kriem    schedule 10.05.2009

Вам понадобится версионное хранилище данных и алгоритм сравнения.

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

Вместо номера ревизии вы можете использовать временные метки. Не только временные метки всегда увеличиваются, но и сам номер редакции может использоваться для определения того, когда ресурс был изменен.

Выберите алгоритм сравнения в зависимости от того, как вы храните ресурсы. Wikitext обычно имеет линейный формат, поэтому, если пользователи его редактируют, имеет смысл использовать линейное различие, например стандартную утилиту Unix diff. Если ресурсы являются XML, вы можете захотеть найти специфичный для XML алгоритм сравнения, чтобы пользователям было ясно, в чем заключаются различия.

person a paid nerd    schedule 09.05.2009