什么是命名空间以及如何在MediaWiki中管理它们

为了使MediaWiki更便于页面管理,所有页面根据其在网站上的目的和功能都可以按照命名空间的方式进行分组。也就是说,每个页面都属于一个命名空间。例如,所有常规内容页面(也称为文章、条目或词条)都是主(Main)命名空间的一部分,而所有个人用户页面都存储在用户(User)命名空间中。而“心理学”即可以放入主(Main)命名空间中(属于一个条目),也可以放入用户(User)命名空间中(某个用户名叫心理学),也可以放入Project命名空间中(网站名叫心理学),甚至放入某个自定义的命名空间。正是通过这些不同的命名空间,网站可以区分同一个名称的不同功能和显示内容。那么MediaWiki有哪些默认命名空间?又该如何创建自定义命名空间以及如何进行其他设置呢?

默认命名空间

MediaWiki内置18个命名空间。其中有两个命名空间(属于系统级别的,具体见下文)是用户无法修改的,这意味着用户无法新建和编辑其页面。而其他16个命名空间中的页面可以新增也可以编辑,且都是成对设置。也就是说,总共有8个通用命名空间以及它们对应的讨论命名空间。

每个命名空间都有一个用于标识的ID号和常量名。常量名为大写,它们都以NS_开头,后跟命名空间的名称。默认命名空间的ID号和常量名在Defines.php文件中定义。该文件位于MediaWiki根目录下的includes文件夹中。当想要对命名空间的选项进行一些更改时,需要使用到ID号。

下面将列出并描述每个默认命名空间以及每个命名空间的ID号(括号中是该命名空间的常量名),其中部分命名空间支持中文。

-2 (NS_MEDIA) - Media命名空间。这是两个虚拟命名空间之一,用户无法修改。该命名空间的目的是提供上传文件的直接链接。
-1 (NS_SPECIAL) - 特殊(Special)命名空间是另一个虚拟命名空间,其中包含用户无法编辑的页面,所有工具和统计信息的页面都属于该命名空间。可以通过单击“工具”菜单中的“特殊页面”按钮来访问和使用这些页面。

0 (NS_MAIN) - 主(Main)命名空间。顾名思义,这是用于大部分页面的命名空间,即网站用户创建和编辑的条目页面。它也是唯一一个在URL中不需要输入前缀的命名空间。这意味着,与其他命名空间中的页面不同,主命名空间中的页面在URL地址中直接显示名称。

1 (NS_TALK) - 条目页面中进行讨论的讨论(Talk)命名空间。主命名空间中的每个页面都可以有一个讨论页面,用户可以在该页面上发布有关文章的评论。

2 (NS_USER) - 用户(User)命名空间用于保存和显示个人用户信息。每个用户都可以创建自己的页面,其中包含该用户的用户名、个人信息或他们认为合适的任何其他信息。有关用户的详细信息,请查看《如何在MediaWiki中管理用户、用户组和权限》一文。

3 (NS_USER_TALK) - 每个用户页面都可以有一个相关的讨论页面——即用户讨论(User_talk)命名空间,其他用户可以在该讨论页面上向特定用户发表评论。当用户打开站点并且该用户的讨论页已被其他人编辑(即已发表评论)时,所有页面的站点顶部都会显示一条消息。该消息在用户访问其讨论页后被删除。用户也可以开启相应的选项,然后通过电子邮件收到有关其用户讨论页更改的通知。

4 (NS_PROJECT) - Project命名空间的用途是存储有关网站本身相关的页面。相对于与主(Main)命名空间区,它没有任何特殊选项或功能,只是为了方便区分和管理。默认情况下,它不包含任何页面,但在网站的页脚中,有指向可以创建的页面链接,其中包括关于免责声明隐私政策,这些页面都使用Project命名空间。

请注意,在Project命名空间的前端上所使用的标签实际上可能不一定是Project。默认情况下是使用网站提供的wiki名称进行标识,在最初应用程序安装时就会要求填写wiki名称(默认项目名称与wiki名称相同,但可以设置为不同)。如果没有更改或编辑相应的选项,则项目命名空间实际上就是网站的名称。例如,如果已将网站名设置为“心百科”,则该Project命名空间的名称就是心百科(这也是该命名空间中页面URL所使用的前缀,如心百科的网站中,关于页面就是心百科:关于)。但请记住,在搜索或打开该命名空间中页面URL时,Project仍可用作前缀。它们将被重定向到实际名称(除非你将网站名设为Project)。如果我们使用心百科作为网站名,则可以使用wiki.mindseed/心百科:关于wiki.mindseed/project:关于打开网站的关于页面。
安装应用程序后,可以通过修改文件LocalSettings.php中的相应选项来更改站点名称和Project命名空间的名称(也称为元名称)。单维基百科中,站点名称和项目(Project)名称通常是同一个,维基农场中则会有所区别。

5 (NS_PROJECT_TALK) - Project_talk与其他讨论命名空间一样,它用于存储与项目命名空间关联的讨论页面。命名空间的确切名称取决于项目命名空间的名称。例如,如果项目名称是心百科,则讨论命名空间的相应名称将是心百科讨论

6 (NS_FILE) - 文件(File)命名空间用于上传文件的页面。例如,当用户上传图像等文件时,这会自动为该图像创建一个页面。上面会列出该文件(如果是图像,则显示预览图)并且还会显示一些附加信息(例如,文件的上传时间、上传文件的用户、链接到它的页面等)。可以通过以与任何其他页面相同的方式编辑页面来向页面添加更多内容和信息。
另外,如果在URL中使用Media作为前缀将会跳转到文件(File)前缀,而如果在页面内容中插入[[file:Example_file.jpg]]和[[media:Example_file.jpg]],前者将直接显示图片,后者仅显示图片的链接。

7 (NS_FILE_TALK) - 文件讨论(File_talk)命名空间与其他讨论命名空间类似;它仅包含与特定命名空间关联的讨论页。

8 (NS_MEDIAWIKI) - MediaWiki命名空间用于用于配置站点的页面。基本上,它们主要用于更改网站的外观。例如,用于设置所有或部分皮肤CSS(级联样式表)的页面,像MediaWiki:Common.css(用于整个站点)、MediaWiki:Vector.css(用于更改Vector皮肤)等。该命名空间中还存储了用于编辑网站界面文本和消息的页面。当然,你还可以通过该命名空间增加一些JS代码用于实现某些特定功能,比如MediaWiki:Common.js(用于整个站点)。

9 (NS_MEDIAWIKI_TALK) - MediaWiki讨论(MediaWiki_talk)命名空间与其他讨论命名空间没有什么不同。它适用于与MediaWiki命名空间中的页面关联的讨论。

10 (NS_TEMPLATE) - 模板(Template)命名空间用于存储模板页面。使用模板页面,你可以创建模板或编辑现有模板。创建和编辑模板页面的方式与创建/编辑常规页面相同。页面的内容是模板。模板可以添加到其他页面(也称为嵌入)。这可用于在许多页面上添加一些标准消息,而无需每次都键入整个消息。

11 (NS_TEMPLATE_TALK) - 模板讨论(Template_talk)适用于模板(Template)页面关联的讨论。

12 (NS_HELP) - 帮助(Help)命名空间主要是为提供帮助信息而创建的。就其功能和选项而言,它与主命名空间没有任何不同。你可以使用它向其添加包含有用信息的页面、与站点相关的任何说明或者想要的任何内容。默认情况下,它不包含任何预配置的页面。

13 (NS_HELP_TALK) - 帮助讨论(Help_talk)用于评论帮助(Help)命名空间关联的页面。

14 (NS_CATEGORY) - 分类(Category)命名空间包含所有分类页面,用于对在内容或处理主题方面具有相似之处的页面进行分组。分类中的页面可以来自不同的命名空间。每个类别页面都列出了该类别中的页面。将页面添加到类别时,该类别也会自动列在页面底部。有关类别的更多信息,请查看《如何在 MediaWiki中创建和管理分类》。

15 (NS_CATEGORY_TALK) - 分类讨论(Category_talk)用于讨论分类(Category)关联的页面。

更多常用命名空间请参看《MediaWiki的命名空间列表》一文。

命名空间的URL地址

页面的URL地址是由站点的基本URL加上页面所属命名空间的前缀,后跟英文冒号和页面名称所构成。所以更准确地说,页面的全名实际上是由命名空间的前缀加上页面名称组成的,比如特殊:特殊页面

命名空间的名称用于其前缀(在中文系统中,中英文皆可,见上文中的斜体部分)。如果名称由多个单词组成,请在前缀中在单词之间添加下划线。例如,用户讨论命名空间的前缀是用户讨论(User_talk)。页面标题中的单词在URL地址中也用下划线分隔,但即使输入的URL在单词之间带有空格,MediaWiki也会自动为其添加下划线。因此,例如,如果文件命名空间中的页面名为Example file.jpg,则带有命名空间前缀的完整页面名称将为文件:Example file.jpgFile:Example file.jpg。如果网站的主URL是wiki.mindseed.cn,则该页面的URL将会是wiki.mindseed.cn/File:Example_file.jpg

请注意,唯一不向其页面添加前缀的是主(Main)命名空间。因此,所有主条目的URL都没有命名空间前缀,只是将页面名称添加到基本URL中。

限制命名空间的编辑

在MediaWiki中,可以阻止特定用户组的用户编辑特定页面,也可以对网站上的所有页面进行编辑。还可以限制用户编辑特定命名空间中的所有页面。例如,希望阻止所有未注册的用户编辑用户讨论命名空间中的页面。

可以通过修改配置文件LocalSettings.php来实现此类限制。有一个选项$wgNamespaceProtection专门用于限制命名空间的编辑。使用该选项可以指定可以编辑所选命名空间中页面的用户。在LocalSettings.php末尾的新行上,必须添加具有以下形式的行:

$wgNamespaceProtection[NS_NAMESPACE] = array( 'permission' );

你必须将NS_NAMESPACE替换为命名空间的实际常量,并将权限替换为用户权限。可以在上文第一部分中找到所有命名空间的ID/常量名。具有指定用户权限的所有用户都可以编辑特定命名空间中的页面。其余用户将不被允许这样做。

你可以使用仅分配给要允许编辑命名空间中页面的用户组的现有权限,也可以创建新权限,将其分配给所需的组,然后使用该权限。例如,将以下内容添加到LocalSettings.php文件中:

$wgNamespaceProtection[NS_USER_TALK] = array( 'editinterface' );

只有管理员/管理员才能编辑用户讨论命名空间的页面。editinterface权限是默认情况下仅分配给管理员的核心权限。你也可以创建新权限,然后使用它来限制命名空间的编辑。例如,使用以下内容:

$wgGroupPermissions['user']['editusertalk'] = true;
$wgNamespaceProtection[NS_USER_TALK] = array( 'editusertalk' );

这将创建一个名为EditUserTalk的新权限,将其分配给用户组(即所有注册用户的组),并且只允许具有该权限的用户编辑用户讨论(User talk)命名空间中的页面。这意味着只有访问者/未注册用户才能向用户的讨论页添加评论。

创建自定义命名空间

除了默认命名空间之外,还可以创建自定义命名空间。例如,可能希望有一个命名空间来存储包含特定主题内容的页面和/或一个只能由选定的用户组编辑的命名空间,比如心百科中最常用的图书(Book)命名空间就是用于对图书条目进行分组的;又比如维基百科中的主题(Portal)命名空间是提供特定领域百科内容的页面,每个主题以所涵盖的领域命名,比如主题:心理学

正如前文所提到的,命名空间通常是成对创建的:一个用于内容页面,一个用于内容关联的讨论页面。因此,如果要决定创建一个命名空间,那么最好是也为它创建一个讨论(Talk)命名空间。

可以通过在LocalSettings.php配置文件末尾添加几行来创建命名空间。一行用于定义命名空间的ID和常量名。然后使用另一行添加命名空间,这是通过选项$wgExtraNamespaces完成的。使用该选项和在上一行定义的命名空间的常量,你可以指定要在前端使用的命名空间的名称。

例如,将以下内容添加到LocalSettings.php文件中:

define("NS_BOOK", 3000); 
define("NS_BOOK_TALK", 3001);

$wgExtraNamespaces[NS_BOOK] = "图书";
$wgExtraNamespaces[NS_BOOK_TALK] = "图书讨论";

上述代码将创建图书(Book)命名空间及其关联的图书讨论(Book_talk)命名空间。使用define函数可以指定每个命名空间的ID和常量名。但需要记住以下几个要点:

  • 常量全部为大写,应以NS_开头,后跟名称;单词用下划线分隔。在我们的示例中,常量是NS_BOOKNS_BOOK_TALK
  • 内容命名空间的ID号应为偶数,讨论命名空间的编号应为奇数。在上述示例中,它们分别为30003001

在为新命名空间选择ID数字时请务必注意,它们不应与现有命名空间或扩展可能创建的命名空间相同。默认命名空间的编号从-215,但有许多扩展在安装时,会自动创建具有某些指定ID号的功能所需的新命名空间。大多数扩展名使用1003000之间的数字,因此保险的方法是使用3000及以上的数字。
使用$wgExtraNamespaces选项使用使用 define 选项指定的命名空间的常量,并将要在前端使用的相应名称放置。在我们的示例中,命名空间NS_BOOK的名称为图书NS_BOOK_TALK命名空间的名称为图书讨论;该名称用作属于命名空间的页面URL中的前缀(比如:https://wiki.mindseed.cn/图书:心理学名词或者是https://wiki.mindseed.cn/Book:心理学名词)。如果名称由多个单词组成,请用下划线分隔它们(例如Example_talk),避免在单词之间留空格。

最后修改:2025 年 10 月 31 日
如果觉得我的文章对你有用,请随意赞赏