2008-08-18 14 views
4

自動リンクとは、ページコンテンツにインライン化されたwikiリンクがページへのハイパーリンク(存在する場合)または作成リンク(ページが存在しない場合)のいずれかに生成されるプロセスです。wikiページのコンテンツで自動リンクを処理する方法は?

私が使用しているパーサでは、これは2段階のプロセスです。まずページの内容が解析され、ソースマークアップのwikiページへのリンクがすべて抽出されます。次に、最終的なHTMLマークアップが生成される前に、既存のページの配列をパーサに戻します。

このプロセスを処理する最善の方法は何ですか?毎回ページタイトルのインデックスを抽出するのではなく、サイトのすべてのページのキャッシュリストを保持する必要があるようです。または、リンクが別々に存在するかどうかを確認する方がよいでしょうか?これは、リストがキャッシュされていないと、多くのデータベース検索が行われる可能性があります。これは何千ページもの大きなWikiサイトではまだ有効でしょうか?

答えて

1

私自身のwikiではすべてのリンクを(キャッシュせずに)チェックしていますが、私のwikiは内部的には少数の人しか使っていません。あなたはこのようなものをベンチマークするべきです。

1

私のキャッシュシステムでは、キャッシングシステムはかなりシンプルです。ページが更新されると、リンクが有効であることを確認し、そうでないページの正しい書式設定/場所が適用されます。キャッシュされたページは、キャッシュルートにHTMLページとして保存されます。

ページの更新時に「作成されていません」とマークされたページは、ページを保持するデータベースのテーブルに挿入され、ページにリンクするページのcsvに挿入されます。

誰かがそのページを作成すると、それは各リンクページを調べるスキャンを開始し、正しいリンクとフォーマットでリンクページを再キャッシュします。

作成されていないページを強調表示したくない場合は、ページにアクセスしようとしたときにページが作成されているか、作成ページにリダイレクトされていないかを確認するチェッカーがあります。その後、他の記事では普通のページにリンクします。

0

私の考えは、SELECT title FROM articlesのようなタイトルを検索し、各ウィキリンクがその文字列に含まれているかどうかを確認することです。あなたがページにリンクしている場合は、作成ページにリンクします。

1

私はこれを一度やろうとしましたが、それは悪夢でした!私の解決策はSQLプロシージャーでは厄介なループでしたが、私はそれをお勧めしません。

私に問題を起こしたことは、複数の単語で使用するリンクを決めることでした。 「スタックオーバーフローを使用しています」というテキストがあり、wikiに「スタック」、「オーバーフロー」、「スタックオーバーフロー」という3ページがあるとします。フレーズのどの部分がどこにリンクされていますか?それは起こります!

0

Markdownを通じてコン​​テンツを実行した後、私はSinatra(link text)で作った個人プロジェクトで、wikiの単語やその他のもの([ここは自分のリンクです]など)と適切なリンクを置き換えるgsubを実行しますそれぞれのチェック時にページが存在し、リンクして作成または表示するかどうかに依存します。

これは最高ではありませんが、キャッシュ/スピードを考慮してこのアプリを構築しませんでした。これはリソースの少ない単純なwikiです。

スピードが重要だった場合は、アプリをキャッシュしてキャッシュすることができます。たとえば、sinatraはRackキャッシングでラップできます。

0

私の経験では、オートリンクを使用したオフラインの個人用wikiであるJuliを開発しているので、静的なHTMLアプローチを使用すると問題が解決する場合があります。

あなたが思うように、自動リンクされたWikiページを生成するには時間がかかります。しかし、静的なHTML状況を生成する際に、自動リンクされたWikiページを再生成するのは、ウィキペディアが新たに追加または削除された場合(つまり、ウィキペディアの更新時には発生しない)、 '再生'どのように長い時間がかかるかは関係ありません。ユーザーには、生成された静的HTMLのみが表示されます。

関連する問題