Manual:Code/ja

このページは主要なMediaWikiのコードの主要なソースファイル(クラス)/オブジェクトを解説します.

index.php
(メインディレクトリ)

メインスクリプトです. 何をするのか決定するために必要なグローバルオブジェクトを作成しURLを解析します. 一般的には他のファイルにあるスクリプトにoffを渡します(取得するアクションによります).

インクルージョンをWebStart.phpに適用します. 入れ替わりでインクルージョンをLocalSettings.phpに適用します.

次にWiki.phpのインクルージョンを通してMediaWikiのクラスを定義しクラスのインスタンスである、$mediaWikiオブジェクトを作成します.

Wiki.phpでcheckInitialQueries関数を呼び出し、URLからタイトルとアクションを抽出するためにTitle.phpでnewFromURL関数(下記を参照)を呼び出します

多くの関数は内容を$wgOutオブジェクトに送ることで仕事をします. Wiki.phpの(下記を参照)initialize関数($outputが使用される場所)によって作成され、finalCleanup関数で一掃されます. ページ表示の後までデータベースへの変更を延期する必要がある場合、それらは最後に行われます.

それらのインクルードの順番は扱いが難しいことに注意して下さい: 言語はいくちかのグローバル関数を使用します. グローバス変数の作成も同様です. 幾分かの深慮無しにそれらをあちらこちらに移動させないで下さい.

Wiki.php
("includes"ディレクトリ)

このファイルはMediaWikiのクラス の定義で構成されています. 他のことの中でこのクラスは以下のことを含みます:
 * performAction関数 HTMLの作成を含む、大抵のアクションを実行します. 例えば、ページ閲覧の場合、Article.phpで"view"機能が呼びされます.
 * finalCleanup関数 (index.phpによって呼び出されます)Output.phpで出力機能を呼び出し、すべてのHTMLを一掃します.

Setup.php
このファイルは以下の内容を含みます:

Stubobject.phpでStubObject関数を使用するもしくは使用しないに関わらず、これはOutputPage.phpでOutputpageクラス$wgOutインスタンスを作成します.

User.php
("includes"ディレクトリ)

ユーザのサイト閲覧/使用をカプセル化します. ユーザの設定、名前などのためにクエリされます. データベースのuser tableの取得と保存の詳細およびセッションとクッキーを取り扱います.

OutputPage.php
("includes"ディレクトリ)

このファイルはaddPrimaryWikiText関数を含みます:


 * parse関数をParser.phpをwikiテキストの$textに適応し、HTMLテキストを$textに結果を返します.
 * addParserOutput関数をHTMLテキスト $textに適応します:
 * addHTML関数を$textに適応します、$textを$mBodytextに追加します.

以下の内容を含みます:
 * function output Wiki.phpにあるfinalCleanup関数から呼びされます. Skin.phpでoutputPage関数を呼び出します.
 * function out Skin.phpにあるoutputPage関数から呼び出されます. HTMLをユーザに送ります: それの前後で$mBodytextとHTMLです.

Parser.php
("includes"ディレクトリ)

このファイルは文字列$textをwikiテキストからHTMLに変換するために使用されるパーサオブジェクトを定義します. いくつかの段階で解析を実行するparse関数を含みます:
 * 1) nowiki、pre、mathとhieroをストリップしてレンダーするfunction関数を呼び出します. この関数はParserBeforeStripフックに先先行されParserAfterStripフックに追跡されます.
 * 2) これはinternalParse関数を呼び出します. 文字列$textをwikiテキストからHTMLに変換します. これは変数とテンプレートを拡張し、wikiマークアップをヘッダーコードと二重引用符と三重引用符の記号をHTMLの同等なものに置き換え、二重括弧句をA HREFリンクへの内部wikiページに変換し、単独の括弧のURLを外部ページへのA HREFリンクに変換します.
 * 3) これはHTMLクリーンナップをするtidy関数を呼び出します. この関数はParserBeforeTidyフックによって先行されParserAfterTidyフックによって追跡されます.

Title.php
("includes"ディレクトリ) 記事のタイトルを表し、plain text、URL、データベースキーといった様々な形式の間ですべての変換作業をします. 利便のためにと、歴史的な利用のため、アクセス権限といったテキストを含まないいくつかの記事の機能も表示します.

MediaWikiソフトウェアの"Title"クラスは多くの目的のために使用される記事のタイトルを表します: 人間が読むことが出来る記事のテキストタイトル、記事にアクセスするために使用されるURLにて、記事へのwikiテキストリンク、記事のデータベースへのキーなどです. それらの形態の一つからインスタンス化されたクラスは他のものとタイトルの他の属性のためにクエリが行われ、これは不変の"value"クラスとなることを目的としているので　ミューテータ(mutator オブジェクトの内部状態を変更する)機能は存在しません.

新しいインスタンスを取得するためには、静的なファクトリーメソッドの一つ、Title::newFromURL、Title::newFromDBKey、もしくはTitle::newFromTextといったものを呼び出します. 一旦インスタンス化されると、他の静的ではないアクセサメソッド、getText、getDBKey、getNamespace、といったものを使用することが出来ます.

接頭辞のルール: タイトルはオプションの名前空間とタイトルのリマインダーに従うインターウィキの接頭辞(例えば、"m:"はmeta、"de:"はドイツ語)で構成されます. 両方のインターウィキの接頭辞と名前空間の接頭辞は同じルールを持ちます: それらは文字、数字、スペースとアンダースコアだけを含み、文字で始めなければ鳴らず、大文字と小文字を区別し. スペースとアンダースコアは互いに交換することが出来ます. 接頭辞は":"で終わります. 接頭辞はソフトウェアによって明確に許可されたものの一つである場合のみに認識されます. 例えば、"de"は許可されているインターウィキの一つとして認識されるので"de:name"はドイツ語版のWikipediaの"name"記事へのリンクです. "talk:name"は現在のwikiの"talk"名前空間にある"name"記事へのリンクです. 両方とも存在し、そうであるならば、インターウィキが最初に来なければなりません. 例えば、"m:talk:name"です. タイトルの最初の文字がコロンで始まる場合、接頭辞はスキャンされず、コロンは除去されるだけです. これらのルールのため、名前にコロンがある記事も可能です. "E. Coli 0157"と"2001"は妥当なインターウィキもしくは名前空間ではないので、"E. Coli 0157:H7"は妥当なタイトルで、"2001: A Space Odyssey"も同じです.

キャラクタマッピングルール: 一旦接頭辞がストリップされると、タイトルの残りは以下の方法で処理されます: スペースとアンダースコアは同等に取り扱われそれぞれは適切なコンテキストで他のものに変換されます(URLでのアンダースコアとデータベースキー、プレーンテキストでのスペース). 0x80から0xFFの範囲で"拡張された"文字はすべての場所で許可され、妥当な文字です. それらはURLでエンコードされます. 他の文字はASCII文字、桁数、ハイフン、カンマ、ピリオド、アポストロフィ、丸括弧とコロンなどです. ASCII文字ではないものは許可されず、見つかった場合削除されます(それはおそらくブラウザがURLを誤解する原因になります). 拡張された文字はテキストもしくはデータベースキーとして使用される時はURLエンコードされません.

正統なフォーム: タイトルの正統なフォームは常にオブジェクトによって返されます. このフォームにおいて、名前空間とタイトルの最初の(最初だけ)文字は大文字になります; タイトルがそのままである一方で名前空間の残りは小文字です. テキストフォームはスペースを使用し、URLとDBキーフォームはアンダースコアを使用します. インターウィキ接頭辞はすべて小文字です. 名前空間は単独で返されたときにアンダースコアを使用します; テキストタイトルに追加されたときはスペースのみ使用します.

getArticleIDは多少の説明が必要です: "内部の"記事には、記事が存在する場合、"cur_id"フォールドを、層ではない場合は0を返します. すべての外部記事には0を返します. リクエストの間に作成されたTitleのインスタンスのためにすべてのIDはキャッシュされ、それらは多くの内部リンクを持つwikiテキストをレンダリングする間に素早く調べることが出来ます.

Article.php
("includes"ディレクトリ)

Parser.phpにあるParserクラスのインスタンスであるwgParseでparse関数を呼び出します.

データベースのrevision tableなどへのアクセスをカプセル化します. オブジェクトは記事を表し、テキスト(wikiテキストフォーマット)、フラグなどの状態を維持します.

Skin.php
("includes"ディレクトリ)

wikiのための"ルックアンドフィール"をカプセル化します. HTMLをレンダーしてどのようにそれをレンダーするのかを選択するすべての関数はここに存在していて、必要な時に様々な場所から呼び出されます.

OutputPage.phpでoutput関数から呼び出されるoutputPage関数を含みます. outputPage関数はHTMLをユーザに送るためにOutputPage.phpにあるout関数、回数を呼び出します:$mBodytextとHTMLの前とそれの後です.

StandardSkinオブジェクトは完全な実装で、いくつかの機能をオーバーライドすることもある他のスキンでサブクラス化します. Userオブジェクトはスキンへの参照(ユーザのプリファレンスに従います)を含み、グローバルなskinオブジェクトを持つよりも、グローバルなUserに依存し、$wgUser->getSkinでスキンを取得します.

Language.php
("languages"ディレクトリ)

二次的なテキストのために使用される言語で文字エンコーディング機能とローカルな事柄を持ちます. グローバルなものは$wgLangに割り当てられます.

internationalisationもご覧下さい.

LinkCache.php
("includes"ディレクトリ)

記事の存在に関する情報を保持します. LINKCACHE.TXTをご覧下さい.

API
apiコードは外部のアクセスポイント/api.phpを持ちますが、他のコードによって内部的にも使用することが出来ます. 詳細な説明についてはapiページをご覧下さい.

関連項目

 * How to become a MediaWiki hacker/ja
 * Manual:Coding conventions/ja