Help:書き出し
注意: このページを編集すると、編集内容が CC0 のもとで公開されることに同意したと見なされます。詳細はパブリック・ドメインのヘルプ ページを参照してください。 このページの古い版の一部は、CC BY-SA ライセンスのもとで取り込まれました。 新しい編集のみがパブリックドメインと見なされます。 |
ウィキページは、別に設置した MediaWiki に取り込むために、あるいはコンテンツを分析するといった別のことに利用するために、特別な XML 形式で書き出すことができます。 ページ以外をエクスポートするにはSyndication feedsを、ページのインポートには Help:Import をご参照ください。(訳注:フィードも参照。)
書き出しの方法
ページを書き出す方法が少なくとも 4 つあります:
- 記事の名前を Special:Export 内の枠に貼り付けるか、 //www.mediawiki.org/wiki/Special:Export/FULLPAGENAME を使用します。
- バックアップスクリプト
dumpBackup.php
は、すべてのウィキページを XML ファイルにダンプします。dumpBackup.php
は MediaWiki 1.5 以降でのみ動作します。 このスクリプトを実行するには、サーバに直接アクセスする必要があります。 https://dumps.wikimedia.org/ でウィキメディアのプロジェクト群のダンプを定期的に提供します。 - OAI-PMH というインターフェースでは、特定の時点以降に改変された複数ページを定期的に取り込みます。 ただしウィキメディアのプロジェクト群で、このインターフェースを公的に採用していないものもあります。Wikimedia update feed service をご参照ください (訳注:[:m:Wikimedia_update_feed_service 転送先])。 OAI-PMH には書き出した記事の実体を包むラッパー書式があります。
- ここでは説明しませんが、Pywikibot フレームワークを使用します。
既定では特定のページの最新の特定版のみ含みます。 オプションとして、日付、時刻、利用者名や編集要約欄の記述とともに全ての版を入手できます。 オプションとして全テンプレートの最新版 (直接もしくは間接的に呼ぶ) も、書き出します。 テンプレートを含まないダンプをインポートする時、ダンプ内のページが使用しているテンプレートがインポート先のウィキにないと、ページはただしく表示されないかもしれません。
さらに SQL データベースの複写も可能です。 これは、MediaWiki 1.5 以前でデータベースのダンプを利用できるようにした方法であり、ここではこれ以上説明しません。
'Special:Export' の使用
以下の例のように特定の名前空間の全ページを書き出す場合。
書き出すページの名前を取得する
以下の説明が非常に不明瞭であるため、例の方がわかりやすいと思います。
- Special:Allpages に行き、希望する記事/ファイルを選びます。
- ページ名の一覧をテキストエディタにコピーします。
- すべてのページ名を別々の行に配置します。
- 特定の名前を含む部分のレンダリングされたページをコピーして、それを Microsoft Word などに貼り付ける (貼り付けの際は、特殊貼り付けとして書式なしテキストを使用する) と、比較的短時間でそれを実現できます。その後、置換機能 (Ctrl+H) を開き、「検索する文字列」に
^t
を入力し、「置換後の文字列」に^p
を入力し、最後に「すべて置換」ボタンを押します。 (この方法は、ページ名の間にタブがあることを前提としています。通常、これはページ名が HTML ソース内の td タグ内にあるためです。) - テキスト エディター Vim では、改行を修正するための簡単な方法もあります。リスト全体を貼り付けた後、コマンド :1,$s/\t/\r/g を実行してすべてのタブ文字を改行に置き換え、次にコマンド :1,$s/^\n//g を実行して改行文字のみを含むすべての行を除去します。
- 別の方法は、書式設定されたテキストを HTML を表示するエディターにコピーすることです。
<tr>
および</tr>
のタグをすべて除去し、<td>
タグを<tr><td>
に、<td>
タグを</td></tr>
に置換すると、HTML が必要な書式に構文解析されます。 - サーバーにシェルと MySQL へのアクセス権がある場合、以下のスクリプトを使用できます:
- 特定の名前を含む部分のレンダリングされたページをコピーして、それを Microsoft Word などに貼り付ける (貼り付けの際は、特殊貼り付けとして書式なしテキストを使用する) と、比較的短時間でそれを実現できます。その後、置換機能 (Ctrl+H) を開き、「検索する文字列」に
mysql -umike -pmikespassword -hlocalhost wikidbname
select page_title from wiki_page where page_namespace=0
EOF
注: mike と mikespassword を自分のものに置き換えてください。また、この例ではテーブルの接頭辞として wiki_ を使用しています。
- 選択した名前空間が標準名前空間以外の場合は、ページ名に名前空間を前置します (例: 'Help:Contents')。
- 他の名前空間について、上記の手順を繰り返します(例:Category:、Template: その他)
PostgreSQL データベース向けの同様のスクリプト:
psql -At -U wikiuser -h localhost wikidb -c "select page_title from mediawiki.page"
注記:「wikiuser」をあなた自身のものに変更すると、データベースはあなたにパスワードの確認をします。 このサンプルは接頭辞 wiki_ を省略して表にまとめ、名前空間名は、表の名称に組み込んであります。
エクスポートの実行
- Special:Export を開きテキストボックスに全てのページ名を貼り付け、空行がないことを確認してください。
- 「書き出し」をクリック
- 出力されたXMLファイルをブラウザの保存機能を使用して保存します。
そして最後に…
- テキストエディターでXMLファイルを開きます。 一番下までスクロールしエラーメッセージを確認します。
この XML ファイルを利用してインポート処理が実行できるようになりました。
完全な履歴の書き出し
履歴もエクスポートすることで編集者情報と帰属をはっきりさせることができるため、この方法が理想的かもしれません。 Special:Exportの画面にあるチェックボックスで、ページの全版を含む履歴をエクスポートするか最新の版のみをエクスポートするか選べます。 改版100件を上限として返します。その他の改版は Parameters to Special:Export に説明した手順で申請してください。
書き出しの形式
XML ファイルとして入手する形式はあらゆる点で統一がされいます。
https://www.mediawiki.org/xml/export-0.11.xsd に XML スキーマで記述されています。
この形式は、ウェブブラウザで表示することを前提にしていません。
ブラウザの中には、 +
や -
のリンクを用意し、きちんと整った体裁で XML を表示するものがあります。
あるいはまた XML-ソースの内容を閲覧する代替の方法として、ウェブブラウザの「ソースを見る」機能を使うか、あるいはプログラムを選んでローカルに XML ファイルを保存して以降、表示させます。
XML ソースを直接読めば、実際のウィキテキストを探し出すのは難しくありません。
特別な XML エディターを使用しない場合、XML タグとの競合を避けるために <
と >
はそれぞれ <
と >
に変換されます。また、曖昧さを避けるために &
は &
に符号化されます。
現在のバージョンでは、ウィキマークアップ言語のXML置換をするエクスポート書式がありません(古い提案はWikipedia DTDを参照)。 記事を編集するときと同じようにウィキテキストを取得します。
例
<mediawiki xml:lang="en">
<page>
<title>Page title</title>
<restrictions>edit=sysop:move=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 [[Special:MyLanguage/text|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 [[Special:MyLanguage/revision|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
非公式ではありますが、書式を短くまとめたDocument Type Definition (文書型定義、DTD) をご紹介します。 もし DTD が何かわからなくても読み飛ばしてください。
<!ELEMENT mediawiki (siteinfo,page*)>
<!-- バージョンにはフォーマットのバージョン番号が含まれます(現在は0.3) -->
<!ATTLIST mediawiki
version CDATA #REQUIRED
xmlns CDATA #FIXED "https://www.mediawiki.org/xml/export-0.3/"
xmlns:xsi CDATA #FIXED "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation CDATA #FIXED
"https://www.mediawiki.org/xml/export-0.3/ https://www.mediawiki.org/xml/export-0.3.xsd"
xml:lang CDATA #IMPLIED
>
<!ELEMENT siteinfo (sitename,base,generator,case,namespaces)>
<!ELEMENT sitename (#PCDATA)> <!-- ウィキの名前 -->
<!ELEMENT base (#PCDATA)> <!-- メインページの URL -->
<!ELEMENT generator (#PCDATA)> <!-- MediaWiki バージョンの文字列 -->
<!ELEMENT case (#PCDATA)> <!-- ページ名前空間でどのように事案を処理するか -->
<!-- 取りうる値: 'first-letter' | 'case-sensitive'
'Case-insensitive' オプションは将来のために予約されています -->
<!ELEMENT namespaces (namespace+)> <!-- 名前空間と接頭辞の一覧 -->
<!ELEMENT namespace (#PCDATA)> <!-- 名前空間の接頭辞付き -->
<!ATTLIST namespace key CDATA #REQUIRED> <!-- 内部名前空間番号 -->
<!ELEMENT page (title,id?,restrictions?,(revision|upload)*)>
<!ELEMENT title (#PCDATA)> <!-- 名前空間の接頭辞がついた記事題名 -->
<!ELEMENT id (#PCDATA)>
<!ELEMENT restrictions (#PCDATA)> <!-- 任意のページ制限 -->
<!ELEMENT revision (id?,timestamp,contributor,minor?,comment?,text)>
<!ELEMENT timestamp (#PCDATA)> <!-- ISO8601による表記 -->
<!ELEMENT minor EMPTY> <!-- 細部の編集フラグ -->
<!ELEMENT comment (#PCDATA)>
<!ELEMENT text (#PCDATA)> <!-- ウィキ構文 -->
<!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 出力の手順
XML 出力を扱えるツールは多いです。 大量のページ(例えばダンプ全体)を処理する場合、おそらくメインメモリに文書を取得できないので、 SAX または他のイベント駆動型手法ベースのパーサを使う必要があるでしょう。
正規表現で直接、XML コードの当該部分を処理することもできます。 他の方法より時間は節約できても、管理が困難で非推奨です。
ここに XML 書き出しに使える方法とツールを追記してください。
- Parse MediaWiki Dump (crates.io) は XML ダンプを構文解析する Rust のクレートです。
詳細と実用のヒント
- ページの名前空間名を決定するために、
/mediawiki/siteinfo/namespaces/namespace
で定義されている前置詞にタイトルを合致させる必要があります - 次の制限がかかる可能性があります。
sysop
- 保護されたページ
書き出しをする理由
単純に動的データベースのダウンロードを使えば済むのでは?
ある時点でのウィキペディアからの情報を表示するソフトウェアを構築しているとします。 自分のプログラムにライブバージョンで見られるのとは異なる方法で情報を表示させたい場合、おそらく完成したHTMLではなく、入力に使用されるウィキコードが必要になります。
また、すべてのデータを取得したい場合は、可能な限り最も効率的な方法でデータを移す必要があります。 ウィキメディアサーバーは、ウィキコードをHTMLに変換するためにかなりの作業を行う必要があります。 これはあなたにとってもウィキメディアサーバーにとっても時間がかかるので、単にすべてのページをスパイダーするだけではうまくいきません。
XML 形式で任意の記事に、1回に1記事ずつアクセスするには、 Special:Export/Title_of_the_article に移動します。