2008-08-18 10 views
4

Was ich mit Autolinking meine, ist der Prozess, bei dem Wiki-Links im Seiteninhalt in Hyperlinks zu der Seite (falls vorhanden) oder einem Erstellungslink (wenn die Seite nicht existiert) generiert werden.Wie sollte ich mit dem Autolinking im Wiki-Seiteninhalt umgehen?

Mit dem Parser, den ich verwende, ist dies ein zweistufiger Prozess - zuerst wird der Seiteninhalt analysiert und alle Links zu Wiki-Seiten aus dem Quellmarkup werden extrahiert. Dann führe ich ein Array der vorhandenen Seiten zurück zum Parser, bevor das endgültige HTML-Markup generiert wird.

Was ist der beste Weg, um diesen Prozess zu behandeln? Es scheint, als ob ich eine zwischengespeicherte Liste von jeder einzelnen Seite auf der Seite aufbewahren müsste, anstatt jedes Mal den Index der Seitentitel extrahieren zu müssen. Oder ist es besser, jeden Link einzeln zu überprüfen, um festzustellen, ob er existiert? Wenn die Liste nicht zwischengespeichert wurde, kann das zu vielen Datenbank-Suchen führen. Wäre das noch für eine größere Wiki-Site mit Tausenden von Seiten machbar?

Antwort

1

In meinem eigenen Wiki überprüfe ich alle Links (ohne Caching), aber mein Wiki wird nur von ein paar Leuten intern benutzt. Du solltest solche Sachen vergleichen.

1

In meinem eigenen Wiki-System ist mein Caching-System ziemlich einfach - wenn die Seite aktualisiert wird, prüft sie Links, um sicherzustellen, dass sie gültig sind und wendet die korrekte Formatierung/Position für diejenigen an, die nicht sind. Die zwischengespeicherte Seite wird als HTML-Seite in meinem Cache-Root gespeichert.

Seiten, die während der Seitenaktualisierung als 'nicht erstellt' markiert sind, werden in eine Tabelle der Datenbank eingefügt, die die Seite enthält, und dann in einen csv der Seiten, die darauf verweisen.

Wenn jemand diese Seite erstellt, initiiert er einen Scan, um jede Linking-Seite durchzusehen und die Linking-Seite mit dem richtigen Link und der korrekten Formatierung neu zu cachen.

Wenn Sie nicht daran interessiert waren, nicht erstellte Seiten hervorzuheben, können Sie einfach überprüfen, ob die Seite erstellt wird, wenn Sie versuchen, darauf zuzugreifen - und nicht zur Erstellungsseite umleiten. Dann verlinke einfach wie in anderen Artikeln auf Seiten.

0

Meine Idee wäre, die Titel wie SELECT title FROM articles abzufragen und einfach zu überprüfen, ob jeder Wikilink in diesem Array von Strings ist. Wenn Sie mit der Seite verlinkt sind, verknüpfen Sie sie mit der Seite zum Erstellen.

1

Ich habe versucht, dies einmal zu tun, und es war ein Albtraum! Meine Lösung war eine böse Schleife in einer SQL-Prozedur, und ich empfehle es nicht.

Eine Sache, die mir Probleme machte, war zu entscheiden, welcher Link für eine Mehrwortphrase verwendet werden sollte. Angenommen, Sie hatten einen Text mit der Aufschrift "Ich benutze Stack Overflow" und Ihr Wiki hatte 3 Seiten mit den Namen "stack", "overflow" und "stack overflow" ... welcher Teil Ihrer Phrase wird mit wohin verbunden? Es wird passieren!

0

In einem persönlichen Projekt, das ich mit Sinatra (link text) gemacht habe, nachdem ich den Inhalt durch Markdown ausgeführt habe, mache ich einen gsub, um Wiki-Wörter und andere Dinge (wie [hier ist mein Link]] und whatnot) mit richtigen Links zu ersetzen , bei jeder Überprüfung, ob die Seite existiert und Verknüpfung zum Erstellen oder Anzeigen abhängig.

Es ist nicht das beste, aber ich habe diese App nicht mit Caching/Geschwindigkeit erstellt. Es ist ein einfaches Wiki mit niedrigen Ressourcen.

Wenn Geschwindigkeit wichtiger ist, könnten Sie die App in etwas einbetten, um es zu cachen. Zum Beispiel kann sinatra mit dem Rack-Caching verpackt werden.

0

Basierend auf meiner Erfahrung mit der Entwicklung Juli, die ein offline persönliches Wiki mit Autolink ist, kann die Generierung von statischen HTML-Ansatz Ihr Problem beheben.

Wie Sie denken, dauert es lange Zeit, um eine automatisch verknüpfte Wiki-Seite zu generieren. Beim Generieren einer statischen HTML-Situation wird die automatisch generierte Wiki-Seite jedoch nur neu generiert, wenn ein Wikipage neu hinzugefügt oder gelöscht wird (mit anderen Worten, es passiert nicht beim Aktualisieren von Wikipage) und das 'Regenerieren' kann im Hintergrund erfolgen, so dass ich normalerweise egal wie lange es dauert. Der Benutzer sieht nur das generierte statische HTML.