维基百科上的"编辑部分"功能如何运作?

lon*_*oat 9 php parsing mediawiki content-management-system

维基百科如何为其文章实现"编辑此部分"功能,其中用户只能编辑文章的一部分,而不是整篇文章?我自己尝试过浏览mediawiki的代码,但是我理解它有点密集.这是我的猜测(但只是猜测):

用户单击文章中的[编辑].这链接到常规编辑页面,但在URL中通过GET传递了另一个参数,指定要编辑的部分.如果没有这个额外的参数,Mediawiki通常只会向用户显示一个编辑整个页面的表单.但指定要编辑的部分会导致Mediawiki仅提取该部分并将其呈现以进行编辑.

困扰我的是Mediawiki如何解析各个部分?根据我的理解,MW不会单独存储这些部分 - 它将每个版本页面的每个整个版本存储为一个大的文本块(除了元数据量之外).MW是否仅仅查找H1,H2,H3,...标签,并在呈现页面时使用这些标签将文本拆分为区域?当用户保存修改后的部分时,是否会查看当前版本,将文本重新解析为部分,然后将新版本"注入"到当前版本的副本中,然后将其另存为新版本?

我认为我对MediaWiki的理解大大简化了,但我只是想弄个粗略的想法.

谢谢!

Tod*_*ses 3

这可能是一条线索 - 来自http://en.wikipedia.org/wiki/Help:Section。这些部分使用特定的标记,如下所示:

==Section==

===Subsection===

====Sub-subsection====
Run Code Online (Sandbox Code Playgroud)
  • 在一个页面上多次使用相同的标题会导致问题。
  • 当编辑具有重复名称的部分时,编辑历史记录和摘要将不清楚编辑了哪个部分。
  • 在部分编辑后保存页面时,编辑者的浏览器可能会导航到错误的部分。

可以通过单击标题旁标有“[编辑]”的特殊编辑链​​接或右键单击节标题来单独编辑节,具体取决于设置的首选项。这称为“部分编辑功能”(首选项 -> 编辑 -> “通过 [编辑] 链接启用部分编辑”)。部分编辑功能将通过 URL 将您带到编辑页面,例如

http://en.wikipedia.org/w/index.php?title=帮助:Section&action=edit§ion=2

请注意,这里使用的是节号,而不是节标题;小节有一个编号,例如第 2.1 节可能编号为 3,第 3 节编号为 4,等等。您也可以直接在浏览器的地址栏中输入此类 URL。

因此,解析器似乎对目录中的部分进行了计数,然后使用 = 标记将特定文本放入编辑器中。

以下是一些使用的表格:

页表 - ( http://www.mediawiki.org/wiki/Manual:Page_table ) - MediaWiki 安装中的每个页面都有一个条目,通过标题对其进行标识

修订表保存对 wiki 中页面进行的每次编辑的元数据。页面的每次编辑都会创建一个修订行,其中包含进行编辑的用户、进行编辑的时间以及对文本表中新维基文本的引用等信息

文本表 - 保存各个页面修订的维基文本。

页的内容存储为 BLOB。所以它必须以二进制形式解析。

希望这可以帮助。