Extension:Graph/ja

グラフ拡張機能は タグを用いてデータの画像化をJSONで記述しレンダリングします. 棒グラフ、円グラフ、タイムテーブル（年表）やヒストグラム（demo）をVega宣言型プログラミングで生成します.

全般的な情報
グラフ拡張機能は強力なVega宣言型プログラムのグラフをウィキページに加えます. グラフは静的と動的のどちらの形式も扱います.

もっとも簡便にグラフを追加するには、既存のなどのテンプレートを使います. これらのテンプレートはVegaの複雑さを見ずに済みます. 熟練のユーザーならグラフ用サンドボックスでグラフが作成できます. グラフのサンドボックスではJSONとウィキのテンプレート・シンタックスが使えます.

有用なリンク

 * - ウィキでグラフを使う方法の標準的な推奨.
 * - ゼロから複雑でインタラクティブなグラフ完成まで、段階的に解説する説明書.
 * - サンプルや使用法のトリックを解説.
 * TechTalk Video - ウィキメディア財団技術部門の議論. グラフ拡張機能を取上げ、Lyra エディタをわかりやすくデモしている. （on labsも合わせてインストールする）.
 * 興味があれば、Vegaの将来的な機能の動画も参照できる（Jeffrey Heerの基調講演）.
 * 開発者のためのVega解説 - Vegaのリソースを探すならこちらが最適.
 * インタラクティブなVegaの紹介ビデオ
 * インタラクティブなVegaの紹介ビデオ

表の例
サンプルや使用法の裏技はを参照してください.

外部データ
HTTP(S)を使ってグラフのデータを取得することはできません. 代わりに や 等、固有のウィキ・プロトコルを使用してください.

Graphoidサービスとグラフ拡張機能は 設定を用いてプロトコルの解決を設定します.

既知のバグと制限

 * グラフ拡張機能のバグ
 * Graphoidサービスのバグ
 * ISO 8601タイムスケールの実装に失敗. したがってタイムラインではグレゴリオ暦のみ使用可能.

内部リンク
解析をすると、グラフ拡張機能はテンプレートのパラメータやexpressionsをすべて開き、グラフのハッシュを識別子に使うと完全なグラフ定義を ページのプロパティとして保存. このことから、ウィキのグラフを検索するときSpecial:PageWithPropsか[//www.mediawiki.org/w/api.php?action=query&list=pageswithprop&continue=&formatversion=2&pwppropname=graph_specs the action API]を用いると簡単に見つけることができます.

グラフ拡張機能はページ上のどこにグラフを配置するか、HTML形式で、タグを含むを出力. サンプル:

タグの 属性は[//www.mediawiki.org/api/rest_v1/page/graph/png/Extension%3AGraph%2FDemo/1686336/d243aa924db2f82926e0f317217fcce591fe8cd4.png 静的なグラフの画像]を提供する#Graphoidサービスを示す.

グラフ拡張機能の設定がインタラクティブであり、クライアントのブラウザでJavaScriptが有効かつResourceLoaderがJavaScriptを積まない旧来のブラウザではないなら、クライアントのブラウザはグラフを読み込みと同時に解析します. グラフ拡張機能はResourceLoaderのJavaScriptモジュールとしてVegaライブラリを含むページに を呼び込み、グラフ定義のJSONを通称 と呼ばれるJavaScript 変数に組み込む. このモジュールがクライアントのブラウザに読み込まれると、Vega JavaScriptライブラリはを個別のHTMLキャンバスに取り込み、その中にグラフを描画すると静止画像と置き換えます. 2015年11月時点では、ウィキメディアのウィキでは編集のプリビュー以外で、このインタラクティブなレンダラを有効にしていません.

ユーザーはグラフ拡張機能を設定し、常時タグのみ使用するがVegaライブラリやグラフ定義のJSONを参照しないようにできます. このモジュールは が保存後まで更新されないため、編集作業中には作動しません. 一旦保存すると、GraphoidサービスはアクションAPI経由で新しいグラフ定義にアクセスできます.

セキュリティ機能
信用できないデータソース参照を許可しないように、 を設定できます（例: ウィキメディアではウィキメディアのサイト内のデータのみ許可）. また外部データにアクセスするたびに追加の見出しを送ることができ、例えば 見出しにより、MediaWikiはCSRF攻撃を予防します.

ライセンス
VegaライブラリはBSDライセンスの修正版容認の範囲で使用できるものとして配布されます.

BSDライセンスの複写に（容認できる範囲の）微調整を加えたようにも見えます. 使用に際して問題はありませんが、このような変更をライセンスに加えないと理想的です. ライセンスがオープンソースの使用について安全かどうかという（このような）混乱を防ぐためにも、ライセンス条件にこのような改変を行うことは好ましくありません.

wgGraphIsTrusted
もし （既定）なら、Treat-as-Untrustedを返す. つまりヘッダ1件にあらゆるグラフデータのリクエストが対応

wgGraphImgServiceUrl
&lt;img>タグのためにバックエンドサービス要求URLを作るフォーマットストリング. 例えば:

このURLを出力:

//graphoid.wikimedia.org/mediawiki.org/v1/png/Extension:Graph/0/be66c7016b9de3188ef6a585950f10dc83239837.png /{domain}/v1/png/{title}/{revid}/{hash}.png

パラメータの出力順: 1=サーバ、2=題名、3=revid、4=graph-hash-id. どのパラメータもrawurlencodeを用いて回避できる. 値が の場合（既定） urlはまったく生成されない

wgGraphUrlBlacklist変数を787d64a11から削除（2015年12月7日）、wgGraphDataDomainsはe0813f85aから削除（2016年1月28日）. wgGraphAllowedDomainsを用いること.

wgGraphUserServiceAlways変数はb735f63ff4bから削除（2015年9月30日）.

グラフ名前空間の有効化
JsonConfigを設定すると、グラフの設定を単独ページとしてそれぞれの名前空間に保管できます.

Graphoid サービス
Graphoid（）とはnode.js サービスであり、先進的なブラウザで使用されるのと等しいVegaライブラリ・コードを採用し、グラフの定義から静的なPNG形式の画像に変換します. このサービスはウィキメディアのクラスタ上のgraphoid.wikimedia.orgによって提供されます.

ユーザー自身によるインストールが可能です.

各サービスURLにはページのドメイン名（例＝mediawiki.org）とサービスのバージョン（v1）、グラフが載ったページの題名（PageTitle）とページの更新ID（12345等だが現状は0もあり）、さらにグラフ自体の隠しIDが書かれています（グラフ定義を認識するためHTMLでも使用）. 例を挙げるとすると:

http://localhost:6927/mediawiki.org/v1/PageTitle/12345/a64b022a8fa5b7fc5e40a2c95cd0a114b2ae1174.png http://graphoid.wikimedia.org/mediawiki.org/v1/png/Extension:Graph/0/be66c7016b9de3188ef6a585950f10dc83239837.png グラフ拡張機能を定義、LocalSettings.phpにおいてGraphoidサービスを線と同時に用いる例

Configure graphoid services


このサービスはconfigファイルを使ってさらに設定ができます.

ビジュアルエディターのモジュール
2015年の夏以降、グラフ拡張機能にはVisualEditorを使ってグラフを編集するモジュール（ext.graph.VisualEditor）が付与されました.

このモジュールは「Google Summer of Code 2015」プロジェクトの成果です. 詳細は T89287 を参照してください.

ユーザーはこのモジュールを使い、外部の拡張機能ノードに頼らずとも、VisualEditor内でグラフを見ることができます. ユーザーはさらに、グラフの形式、データやパディングを編集するダイアログを開くことができます. ユーザーインタフェース（UI）ではさらに、ウィキテキスト・エディターに切り替えなくてもビジュアルエディター上でグラフの生JSON定義を直接、編集できます. 熟練したユーザーなら、これを使ってUIのサポートしない設定の微調整も可能です.

この第1ステップは、ビジュアルエディター内でどのようなグラフ編集ができるかという試金石になり、またモジュールとして改善したり伸展する方法が十分にあります.

関連項目

 * Extension:GraphViz — エッジ（枝）で結ばれた複数のノード（頂点）のグラフを表示（このページで解説した拡張機能の表形式ではない）
 * Plotly — オープンソースのJavaScriptグラフ作成ライブラリ（3D作表も可能）
 * D3 — データ駆動型ドキュメント