MediaWikiのページデータの取り込み インポート・エクスポート用XMLファイルの各XMLタグの意味を調べてみた

各CMSにはページのインポート・エクスポートするためのファイルフォーマットがあり、それに合わせてページの一括取り込みや書き出し(インポート・エクスポート)が行えるようになっている。MediaWikiにおいても、テキストベースのXMLで作成されたファイルを一括取り込み行う際に利用できる。

XMLはExtensible Markup Languageの略で、あるシステムから別のシステムへデータを引き継ぐ際に互換性のあるデータとしてよく利用されるファイル形式。HTMLのようにタグでデータの意味を定義し、各フィールドの値や属性値などを指定することが可能。決まりは、タグを開いたら閉じるということと、ツリー構造に記述すること。それ以外は特にルールが決まっているわけではなく、エラーとならない限りは自由に記載できる。ブラウザなどでXMLの文法が間違っているかどうということは確認可能。
各XMLファイルのルールというものは、決まっていないがシステム間のデータのやり取りを行う時にはそれぞれのシステムで決められたフィールド名(タグ)で指定しなければいけない。それぞれのシステムに合わせたXMLの記述方法で例えば、インポート・エクスポートを行う。

さて、そういったXML形式のファイルを使ってMediaWikiはWiki[A]からWiki[B]にデータをコピー、一括登録することが出来る。

https://example.com/special:export/test/

といったようなURLにアクセスするとtestで作成されたMediaWikiのページの内容がXMLファイルとして表示される。それをコピーして、xxx.xmlの形式(モジコードはUTF-8)で保存する。

ファイルの中身は以下のような形式となっている。

<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml:lang="ja">
<siteinfo>
<sitename>[サイト名]</sitename>
<dbname>[databaseの名称(MySQL等のデータベース名)]</dbname>
<base>[URL]https://example.com/test/</base>
<generator>[このファイルを作成したときのMediaWikiのバージョン]</generator>
<case>case-sensitive</case>
<namespaces>
<namespace key="-2" case="case-sensitive">メディア</namespace>
<namespace key="-1" case="first-letter">特別</namespace>
<namespace key="0" case="case-sensitive" />
<namespace key="1" case="case-sensitive">トーク</namespace>
<namespace key="2" case="first-letter">利用者</namespace>
<namespace key="3" case="first-letter">利用者・トーク</namespace>
<namespace key="4" case="case-sensitive">production site</namespace>
<namespace key="5" case="case-sensitive">production site・トーク</namespace>
<namespace key="6" case="case-sensitive">ファイル</namespace>
<namespace key="7" case="case-sensitive">ファイル・トーク</namespace>
<namespace key="8" case="first-letter">MediaWiki</namespace>
<namespace key="9" case="first-letter">MediaWiki・トーク</namespace>
<namespace key="10" case="case-sensitive">テンプレート</namespace>
<namespace key="11" case="case-sensitive">テンプレート・トーク</namespace>
<namespace key="12" case="case-sensitive">ヘルプ</namespace>
<namespace key="13" case="case-sensitive">ヘルプ・トーク</namespace>
<namespace key="14" case="case-sensitive">カテゴリ</namespace>
<namespace key="15" case="case-sensitive">カテゴリ・トーク</namespace>
<namespace key="2300" case="case-sensitive">Gadget</namespace>
<namespace key="2301" case="case-sensitive">Gadget talk</namespace>
<namespace key="2302" case="case-sensitive">Gadget definition</namespace>
<namespace key="2303" case="case-sensitive">Gadget definition talk</namespace>
</namespaces>
</siteinfo>
<page>
<title>[ページ名]test</title>
<ns>1</ns>
<id>1</id>
<revision>
<id>1</id>
<parentid>1</parentid>
<timestamp>[タイムスタンプ]2000-01-01T01:01:01Z</timestamp>
<contributor>
<username>[ユーザー名]</username>
<id>1</id>
</contributor>
<model>wikitext</model>
<format>text/x-wiki</format>
<text xml:space="preserve" bytes="***">&lt;div class=&quot;sample&quot;&gt;
本文にタグが使用されている時は、エンティティ化するか、<![CDATA[**********]]>で囲う。
本文中のHTMLタグがXMLのタグとして認識され、XMLエラー等になるため。
&lt;/div&gt;
[[Category:カテゴリ1]]
[[Category:カテゴリ2]]
[[Category:カテゴリ3]]</text>
<sha1>ハッシュキー</sha1>
</revision>
</page>
</mediawiki>

最初と最後は<mediawiki>タグで囲まれている。ファイルの40行目まではサイトの情報などが入ったフィールドが入っている。<page>と<page>タグの中身は複数ページ存在する時は繰り返される。<page>タグには各ページの情報が記述される。サンプルでは<page>タグは1回出現するだけだが、それぞれのページ情報に合わせて2つ3つとタグが記述される。

<title>は、ページの名前。タイトルを変更すると、違うページ名で生成される。

<ns>は取り込みの方式:
0=追加、1=トーク、2=利用者、6=ファイル、10=テンプレート
この番号を変更すると、通常のページとは別の形式のトークやテンプレート、ファイルなどを生成することが出来る。
一度同じ日付でインポートが行われていると、取り込まれない。

<timestamp>2000-01-01T01:00:00Z</timestamp>
上書きするためには、タイムスタンプを1秒でも取り込んだデータより新しく設定すれば上書きされる。CSV等を元にデータを大量に上書きしたい時には、タイムスタンプを現在の時間などに設定してXMLファイルを生成すると良い。