XSLT
XSLT(eXtensible Stylesheet Language Transformations)は、XML文書を変換するための言語で、XML文書の部分的な変換、集約、フィルタリング、およびフォーマットの変更に使用されます。
XSLTの機能
編集- テンプレートマッチング:XML文書の特定の要素に対する変換ルールを定義します。
- XPath:XML文書内の特定の要素や属性を選択するための言語です。
- 変数とパラメータ:変換の一部としてデータを保持したり、値を渡したりするための方法です。
- XSLT関数:XML文書内のデータを変換するためのビルトイン関数が提供されています。
- 制御フロー構造:条件分岐やループなどの制御フロー構造が使用できます。
XSLTの構文
編集- xsl:stylesheet:XSLTドキュメントの開始要素で、XSLTのバージョンを指定し、XSLT変換のルート要素を識別します。
- xsl:template:XSLT変換のルールを定義します。テンプレートマッチングにより、どの要素にルールを適用するかを決定します。
- xsl:value-of:要素の値を出力します。選択したXPath式の結果を出力することもできます。
- xsl:apply-templates:XML文書の要素に対してテンプレートを適用します。テンプレートマッチングにより、適切なテンプレートを選択します。
- xsl:for-each:XPath式によって選択されたすべての要素に対して、指定されたテンプレートを適用します。
- xsl:if:条件がtrueである場合に、指定されたテンプレートを適用します。
- xsl:choose、xsl:when、xsl:otherwise:複数の条件に基づいて、異なるテンプレートを適用します。
これらは、XSLTの基本的な機能と構文の一部です。XSLTには他にも多くの機能がありますが、これらの要素を理解することで、XSLTを使用してXML文書を変換するための基本的なスキルを身につけることができます
XSLT ( Extensible Stylesheet Language Transformations ) は、XML文書を他のXML文書(同じXMLスキーマあるいはそれ以外)や、ウェブページのHTML、他の用途のプレーンテキスト、他の多くのtxtベースのフォーマット(例:RTFやあらゆるSGML文書)などのオブジェクトに変換する言語である。
XSLTかXSLか? XSLTファイルの拡張子は通常3文字で.xslなので、古いMicrosoft Excelファイルの拡張子である.xlsと混同されることがあります。 |
XSLTとXSL-FOの違いは? XSLTは、XMLをXSL-FO(XSL Formatting Objects)に変換し、PDF、PostScript、PNGに変換するために使用されます。XSLTとXSL-FOは別物です。 XMLからXMLへ」変換する場合は、さらに変換の連鎖が可能ですが、「XMLからオブジェクトへ」変換する場合は、連鎖を止めなければなりません(オブジェクトは末端)。 |
「XMLからXMLへ」の変換では、さらに変換の連鎖が可能であるが、「XMLからオブジェクトへ」の変換では、chaining を止めなければならない(オブジェクトは終端である)。
XSLTの標準グループは主に2つある。
- XSLT-v1 (旧): 1999年11月にW3C勧告として発表されました。ただし、2014年現在、2.0や3.0はウェブブラウザーやLAMPなどの環境ではネイティブサポートされていないため、XSLT v1.0が広く使用されています。
- XSLT-v2 と XSLT-v3 (newers): "Java world" と Oracle や Altova の製品のような少数の独自フレームワークでのみ動作する。
この wikibook 自身もXSLT-v1 パーサーを使っています。このように、広くのユーザーがいます。
XSLT-v1 パーサーは、libXml2 のように、高速で安定しています。XSLT-v1 の主な用途は MVC の文脈で、MVC-modelerが生成した XML を最小限の処理コストでフィルターしたりレンダリングするための MVC-Viewer として使用することです。XSLT-v2 や XSLT-v3 への移行を避けるために、「チューリング完全」な処理を行うには、register-functions機能を使って埋め込み言語から処理を行うのが一般的な回避策である。例を挙げます。例:この wikibook(en) では、PHP 環境で XSLT を使用する際に register-functions を使用する方法を紹介しています。。
登録された関数
編集XPath-v1とXSLT-v1は、ほとんど全てのXMLアプリケーション、そして多くのオープンプラットフォームのブラウザ(Firefox、Chromeなど)、携帯システム(ANDROIDなど)、デスクトップシステム(UBUNTUやWindowsなど)、データベース(PostgreSQL、MySQLなど)などに存在する、必要不可欠な標準規格です。
しかし、XPath-v1やXSLT-v1は処理能力に限界がある。そこで、XPathやXSLTのパーサーに登録できる外部関数を利用するのが良い方法です。この機能は、登録された関数( registered Functions )として知られています。
登録された関数は、優れた XPath-v1 や XSLT-v1 アプリケーションを書くために不可欠なものですが、ほとんど説明されていません。
XSLTやXPathパーサーを使用するプログラミング言語(例:PHP)やエージェント(例:Webブラウザ)は、その内部関数(例:ブラウザのJavascript関数やPHPの関数)を提供するためにコールバックされることがあります。
登録された関数は、あまり文書化されていない。W3Cの標準では、すべての詳細は定義されていませんし、「登録された関数のチュートリアル」も提供されていません。
PHP/Python/Javascript/その他のマニュアル自体も、本質を捉えたシンプルな説明になっていませんし、ウェブ上で書かれているほとんどの投稿も、同様に何らかの詳細が欠けているように思われます。
このWikibookはそのギャップを埋めようとするもので、関連するトピックを幅広く取り上げています。ここでは、外部関数の利用方法として、主に2つの方法を提案しています。
自由な使用: 組み込み関数、ユーザー定義関数を問わず、PHPなら "php"、Pythonなら "py" といった特定の名前空間を使用することがベストプラクティスであるとき。 制御された使用:言語に依存しない、ローカルスタンダードのライブラリを使用する慣習。fn "のような汎用的な名前空間を使用するのがベストプラクティスである。そうすれば、例えばプロジェクトがPHPからPythomに変わっても、XSLT(またはXPath)は同じコードと名前空間を維持することができます。
関連書籍
編集自由に使える登録関数について。
- PHP: en:PHP Programming/XSL/registerPHPFunctions
- ...: .. ?? ..
制御された登録関数(FN名前空間を使用するための規則)。
- Standard-register Functions: 提案中です。