帮助:导出
维基页面可以使用特殊 XML 格式导出,以便导入到其他 MediaWiki 安装中,或者以其他方式使用,例如分析内容。
至少有四种方法可以导出页面
- 在 特殊:导出 中将文章名称粘贴到框中,或使用 URL//wikibooks.cn/wiki/Special:Export/article's_name。您可以在 特殊:所有页面 中获取所有页面名称(在指定命名空间中)的列表。
- 备份脚本dumpBackup.php将所有维基页面转储到一个 XML 文件中。dumpBackup.php仅适用于 MediaWiki 1.5 或更高版本。您需要直接访问服务器才能运行此脚本。Mediawiki 项目的转储(或多或少)定期提供在 http://download.wikipedia.org。
- 有一个 OAI-PMH 接口可以定期获取自特定时间以来修改过的页面。对于维基媒体项目,此接口不可公开使用。OAI-PMH 包含围绕实际导出文章的包装格式。
- 使用 Python 维基百科机器人框架。这里不会解释。
默认情况下,只包含页面的当前版本。您可以选择获取所有版本,包括日期、时间、用户名和编辑摘要。
此外,您可以复制 SQL 数据库。这就是在 MediaWiki 1.5 之前如何提供数据库转储,这里不再详细说明。
首先,您需要知道要导出的页面的名称。要导出命名空间中的所有页面
- 使用 特殊:所有页面 并选择所需的命名空间。
- 将页面名称列表复制到文本编辑器中
- 将所有名称放在单独的行上
- 如果所选命名空间不是主命名空间:在页面名称之前插入命名空间前缀,例如“帮助:目录”
现在您已准备好执行导出。
- 转到 特殊:导出 并将所有页面名称粘贴到文本框中,确保没有空行。
- 单击“提交查询”
- 使用浏览器的保存功能将生成的 XML 保存到文件中。
最后...
- 在文本编辑器中打开 XML 文件。滚动到底部以检查错误消息。
现在可以使用此 XML 文件 执行导入。
您收到的 XML 文件的格式在所有方面都相同。它在 XML 模式 中进行了编码,位于 http://www.mediawiki.org/xml/export-0.3.xsd 此格式不适合在 Web 浏览器中查看。一些浏览器会向您显示带有“+”和“ - ”链接的漂亮打印的 XML,以查看或隐藏选定部分。或者,可以使用浏览器的“查看源代码”功能查看 XML 源代码,或者在将 XML 文件本地保存后,可以使用您选择的程序查看它。如果您直接读取 XML 源代码,您将不会很难找到实际的维基文本。如果您不使用特殊的 XML 编辑器,“<”和“>”会显示为“<”和“>”,以避免与 XML 标记冲突;为了避免歧义,“&”被编码为“&”。
在当前版本中,导出格式不包含维基标记的 XML 替换(请参阅 维基百科 DTD,了解更早的建议)。您只会获得编辑文章时获得的维基文本。
<mediawiki xml:lang="en"> <page> <title>Page title</title> <restrictions>sysop</restrictions> <revision> <timestamp>2001-01-15T13:15:00Z</timestamp> <contributor><username>Foobar</username></contributor> <comment>I have just one thing to say!</comment> <text>A bunch of [[text]] here.</text> <minor /> </revision> <revision> <timestamp>2001-01-15T13:10:27Z</timestamp> <contributor><ip>10.0.0.2</ip></contributor> <comment>new!</comment> <text>An earlier [[revision]].</text> </revision> </page> <page> <title>Talk:Page title</title> <revision> <timestamp>2001-01-15T14:03:00Z</timestamp> <contributor><ip>10.0.0.2</ip></contributor> <comment>hey</comment> <text>WHYD YOU LOCK PAGE??!!! i was editing that jerk</text> </revision> </page> </mediawiki>
这里有一个非官方的简短 文档类型定义 版本的格式。如果您不知道 DTD 是什么,请忽略它。
<!ELEMENT mediawiki (siteinfo,page*)> <!-- version contains the version number of the format (currently 0.3) --> <!ATTLIST mediawiki version CDATA #REQUIRED xmlns CDATA #FIXED "http://www.mediawiki.org/xml/export-0.3/" xmlns:xsi CDATA #FIXED "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation CDATA #FIXED "http://www.mediawiki.org/xml/export-0.3/ http://www.mediawiki.org/xml/export-0.3.xsd" > <!ELEMENT siteinfo (sitename,base,generator,case,namespaces)> <!ELEMENT sitename (#PCDATA)> <!-- name of the wiki --> <!ELEMENT base (#PCDATA)> <!-- url of the main page --> <!ELEMENT generator (#PCDATA)> <!-- MediaWiki version string --> <!ELEMENT case (#PCDATA)> <!-- how cases in page names are handled --> <!-- possible values: 'first-letter' | 'case-sensitive' 'case-insensitive' option is reserved for future --> <!ELEMENT namespaces (namespace+)> <!-- list of namespaces and prefixes --> <!ELEMENT namespace (#PCDATA)> <!-- contains namespace prefix --> <!ATTLIST namespace key CDATA #REQUIRED> <!-- internal namespace number --> <!ELEMENT page (title,id?,restrictions?,(revision|upload)*)> <!ELEMENT title (#PCDATA)> <!-- Title with namespace prefix --> <!ELEMENT id (#PCDATA)> <!ELEMENT restrictions (#PCDATA)> <!-- optional page restrictions --> <!ELEMENT revision (id?,timestamp,contributor,minor?,comment,text)> <!ELEMENT timestamp (#PCDATA)> <!-- according to ISO8601 --> <!ELEMENT minor EMPTY> <!-- minor flag --> <!ELEMENT comment (#PCDATA)> <!ELEMENT text (#PCDATA)> <!-- Wikisyntax --> <!ATTLIST text xml:space CDATA #FIXED "preserve"> <!ELEMENT contributor ((username,id) | ip)> <!ELEMENT username (#PCDATA)> <!ELEMENT ip (#PCDATA)> <!ELEMENT upload (timestamp,contributor,comment?,filename,src,size)> <!ELEMENT filename (#PCDATA)> <!ELEMENT src (#PCDATA)> <!ELEMENT size (#PCDATA)>
无疑有很多工具可以处理导出的 XML。如果您处理大量页面(例如整个转储),您可能无法将文档加载到主内存中,因此您将需要一个基于 SAX 或其他事件驱动方法的解析器。
您也可以使用正则表达式来直接处理 XML 代码的部分。这可能比其他方法更快,但不建议使用,因为很难维护。
请在这里列出处理 XML 导出的方法和工具
- Parse::MediaWikiDump 是一个用于处理 XML 转储文件的 perl 模块。
- m:使用 STX 处理 MediaWiki XML - 基于流的 XML 转换
- m:IBM 历史流项目 可以应用一个小型的 Python 程序 export-historyflow-expand.py 后读取它。
- 要确定页面的命名空间,您必须将其标题与在
/mediawiki/siteinfo/namespaces/namespace
- 中定义的前缀进行匹配
- 可能的限制是sysop