Как мне справиться с автосвязью в содержимом вики-страниц?

Под автосвязью я подразумеваю процесс, с помощью которого вики-ссылки, встроенные в содержимое страницы, преобразуются либо в гиперссылку на страницу (если она существует), либо в ссылку для создания (если страница не существует).

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

Каков наилучший способ справиться с этим процессом? Кажется, что мне нужно хранить кэшированный список каждой страницы на сайте, а не извлекать каждый раз указатель заголовков страниц. Или лучше проверить каждую ссылку отдельно, чтобы увидеть, существует ли она? Это может привести к большому количеству поисков в базе данных, если список не был кэширован. Будет ли это жизнеспособным для большого вики-сайта с тысячами страниц?

18.08.2008 12:52:53
6 ОТВЕТОВ

В моей собственной вики я проверяю все ссылки (без кеширования), но моя вики используется только несколькими людьми внутри страны. Вы должны сравнить такие вещи.

1
18.08.2008 14:23:06

В моей собственной вики-системе моя система кеширования довольно проста - когда страница обновляется, она проверяет ссылки, чтобы убедиться, что они действительны, и применяет правильное форматирование / расположение для тех, которые не являются. Кэшированная страница сохраняется как HTML-страница в корне кеша.

Страницы, помеченные как «не созданные» во время обновления страницы, вставляются в таблицу базы данных, которая содержит страницу, а затем в CSV-страницу страниц, которые ссылаются на нее.

Когда кто-то создает эту страницу, он запускает сканирование для просмотра каждой страницы ссылок и повторно кэширует страницу ссылок с правильной ссылкой и форматированием.

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

1
22.08.2008 10:52:03

Моя идея заключается в том, чтобы запросить заголовки, как SELECT title FROM articlesи просто проверить, есть ли каждая вики-ссылка в этом массиве строк. Если это ваша ссылка на страницу, если нет, вы ссылаетесь на страницу создания.

0
28.08.2008 08:49:12

Я пытался сделать это один раз, и это был кошмар! Моим решением был неприятный цикл в процедуре SQL, и я не рекомендую его.

Одна вещь, которая доставляла мне проблемы, заключалась в том, чтобы решить, какую ссылку использовать в фразе из нескольких слов. Скажем, у вас был какой-то текст с надписью «Я использую переполнение стека», а в вашей вики было 3 страницы, которые назывались «стек», «переполнение» и «переполнение стека» .... с какой частью вашей фразы связано, где? Это произойдет!

1
15.10.2008 08:35:44

В личном проекте, который я сделал с помощью Sinatra ( текст ссылки ), после того, как я запустил контент через Markdown, я делаю gsub, чтобы заменить слова вики и другие вещи (например, [[Здесь моя ссылка]] и еще много чего) с соответствующими ссылками на каждом проверка существования страницы и создание ссылок или просмотр в зависимости.

Это не самое лучшее, но я не создавал это приложение с учетом скорости кэширования. Это простой ресурс вики с низким ресурсом.

Если бы скорость была важнее, вы могли бы обернуть приложение во что-нибудь, чтобы его кешировать. Например, синатру можно обернуть с помощью кэширования в стойке.

0
18.02.2009 15:23:49

Основываясь на моем опыте разработки Juli , которая представляет собой автономную персональную вики с автолинком, генерация статического HTML-подхода может решить вашу проблему.

Как вы думаете, генерация автоматически связанной страницы Wiki занимает много времени. Однако при создании статической HTML-ситуации регенерирование автоматически связанной вики-страницы происходит только тогда, когда вики-страница добавляется или удаляется заново (другими словами, этого не происходит при обновлении вики-страницы), а «регенерирование» может выполняться в фоновом режиме, поэтому обычно не важно, как это займет много времени. Пользователь увидит только сгенерированный статический HTML.

0
1.09.2011 00:26:20