我该如何处理维基页面内容中的自动链接?

时间:2008-08-18 12:52:54

标签: html database wiki hyperlink

自动链接的意思是将页面内容中内联的wiki链接生成到页面的超链接(如果存在)或创建链接(如果页面不存在)的过程。

使用我正在使用的解析器,这是一个两步过程 - 首先,解析页面内容,并提取源标记的所有wiki页面链接。然后,在生成最终的HTML标记之前,我将现有页面的数组反馈给解析器。

处理此过程的最佳方法是什么?似乎我需要保留网站上每个页面的缓存列表,而不是每次都必须提取页面标题的索引。或者,最好分别检查每个链接以查看它是否存在?如果列表未缓存,这可能会导致大量数据库查找。对于拥有数千页的大型wiki站点,这仍然可行吗?

6 个答案:

答案 0 :(得分:1)

我试过这次,这是一场噩梦!我的解决方案在SQL过程中是一个讨厌的循环,我不推荐它。

让我遇到麻烦的一件事是决定在多词短语上使用什么链接。假设您有一些文字说“我正在使用Stack Overflow”并且您的wiki有3个页面称为“堆栈”,“溢出”和“堆栈溢出”....您的短语的哪一部分链接到哪里?它会发生!

答案 1 :(得分:1)

在我自己的wiki系统中,我的缓存系统非常简单 - 当页面更新时,它会检查链接以确保它们有效,并为那些没有的链接应用正确的格式/位置。缓存页面将保存为缓存根目录中的HTML页面。

页面更新期间标记为“未创建”的页面将插入到保存页面的数据库表中,然后插入链接到该页面的csv页面。

当有人创建该页面时,它会启动扫描以查看每个链接页面,并使用正确的链接和格式重新缓存链接页面。

如果您对突出显示未创建的页面不感兴趣,那么您可以使用检查器查看是否在您尝试访问该页面时创建该页面 - 如果没有重定向到创建页面。然后在其他文章中正常链接到页面。

答案 2 :(得分:1)

在我自己的wiki中,我检查所有链接(没有缓存),但我的wiki仅在内部由少数人使用。你应该对这样的东西进行基准测试。

答案 3 :(得分:0)

在我通过Markdown运行内容后,我用Sinatra(link text)制作的个人项目,我做了一个gsub来取代维基词和其他东西(比如[[这里是我的链接]]等等)使用适当的链接,每次检查页面是否存在,并链接到创建或查看依赖。

这不是最好的,但我没有考虑到缓存/速度来构建这个应用程序。这是一个资源简单的小wiki。

如果速度更重要,您可以将应用程序包装起来以缓存它。例如,sinatra可以使用Rack缓存进行包装。

答案 4 :(得分:0)

我的想法是查询像SELECT title FROM articles这样的标题,然后检查每个wikilink是否在该字符串数组中。如果您链接到该页面,如果没有,则链接到创建页面。

答案 5 :(得分:0)

根据我开发Juli的经验,这是一个带有自动链接的离线个人wiki,生成静态HTML方法可能会解决您的问题。

您认为,生成自动链接的Wiki页面需要很长时间。但是,在生成静态HTML情况时,重新生成自动链接的Wiki页面仅在新添加或删除wikipage时发生(换句话说,更新wikipage时不会发生)并且'再生'可以在后台完成,因此通常我不管怎么花很长时间。用户只能看到生成的静态HTML。