维基百科如何为其文章实施“编辑此部分”功能,其中用户只能编辑文章的一部分,而不是整篇文章?我自己尝试过浏览mediawiki的代码,但是我理解它有点密集。这是我的猜测(但只是猜测):
用户点击文章中的[编辑]。这链接到常规编辑页面,但在URL中通过GET传递了另一个参数,指定要编辑的部分。如果没有这个额外的参数,Mediawiki通常只会向用户显示一个编辑整个页面的表单。但指定要编辑的部分会导致Mediawiki仅提取该部分并将其呈现以进行编辑。
什么让我感到困惑的是Mediawiki如何解析各个部分?根据我的理解,MW不会单独存储这些部分 - 它将每个版本页面的每个整个版本存储为一个大的文本块(除了元数据量之外)。 MW是否仅仅查找H1,H2,H3,...标签,并在呈现页面时使用这些标签将文本拆分为区域?当用户保存修改后的部分时,是否会查看当前版本,将文本重新解析为部分,然后将新版本“注入”到当前版本的副本中,然后将其另存为新版本?
我认为我对MediaWiki的理解大大简化了,但我只是想弄清楚。
谢谢!
答案 0 :(得分:3)
这可能是一条线索 - 来自http://en.wikipedia.org/wiki/Help:Section。这些部分使用特定的标记:
==Section==
===Subsection===
====Sub-subsection====
可以通过单击标题中标有“[edit]”的特殊编辑链接或右键单击节标题来单独编辑节,具体取决于设置的首选项。这称为“部分编辑功能”(首选项 - >编辑 - >“通过[编辑]链接启用部分编辑”)。部分编辑功能将通过诸如
之类的URL将您带到编辑页面http://en.wikipedia.org/w/index.php?title=Help:Section&action=edit§ion=2
请注意,此处使用了部分编号,而不是部分标题;小节有一个数字,例如2.1节可以编号为3,第3节则编号为4,等等。您也可以直接在浏览器的地址栏中输入这些URL。
所以看起来解析器在TOC中有一些部分,然后使用=标签将特定文本放入编辑器中。
以下是一些使用的表格:
页面表 - (http://www.mediawiki.org/wiki/Manual:Page_table) - MediaWiki安装中的每个页面都有一个条目,用于按标题标识
修订表包含对wiki中页面所做的每个编辑的元数据。每次编辑页面都会创建一个修订行,其中包含进行编辑的用户,编辑时间以及文本表中对新wiki文本的引用等信息
文本表 - 保存各个页面修订的wiki文本。
页面内容存储为BLOB。所以它必须用二进制解析。
希望这有帮助。