エックス‐エス‐エル‐ティー【XSLT】
XSLT 関数
導入
このPHP拡張モジュールは、APIに独立なXSLT変換を提供します。現在、 この拡張モジュールは、Ginger AllianceによるSablotronライブラリの みをサポートします。Xalanライブラリまたはlibxsltライブラリのよう な他のライブラリのサポートも計画されています。XSLT (Extensible Stylesheet Language (XSL) Transformations) は、XMLドキュメントを他のXMLドキュメントに変換 する言語です。XSLTは、World Wide Web コンソーシアム (W3C) により 標準化されています。XSLTに関する情報と関連技術については、 » http://www.w3.org/TR/xslt から得ることができま す。
注意: この拡張は、PHP 4.1より前のバージョンPHPで配布されていた sablotron拡張モジュールとは異なっており、現在、PHP 4.1の新しい XSLT拡張モジュールのみがサポートされています。古い拡張モジュー ルのサポートが必要な場合は、PHPのメーリングリストに質問してください。
注意: この拡張モジュールは » PECL レポジトリに移動 されており、以下のバージョン以降 PHP にバンドルされなくなっています。 PHP 5.0.0.
注意: PHP5でxsltサポートを必要とする場合、 XSLエクステンションを使用することができます。
要件
このエクステンションは、Sabloton™および expat™ を使用します。これらは、共に » http://www.gingerall.org/sablotron.htmlから得ること が可能です。 実行バイナリがソースコードと同様に配布されています。インストール手順
UNIXでは、オプション --enable-xslt --with-xslt-sablotを指定 してconfigure を実行します。ライブラリ Sablotron™ をコンパイラが見付けられる 場所にインストールする必要があります。Sablotron™にリンクされているのと 同じライブラリとPHPがリンクされていることを確認してください。 設定オプション --with-expat-dir=DIR --with-iconv-dir=DIR は、これらの指定を行う際に有用です。 サポートに質問する際に、常にこれらのディレクティブや、他のバージョン のライブラリが使用するシステムのどこかにインストールされて いるかどうかについて述べるようにしてください。 普通は、全てのバージョン番号を知らせてください。
注意 |
Sablot ライブラリは -lstdc++ にリンクしていることに
注意してください。そうでないとコンフィギュアに失敗したり、
PHP が起動しない、あるいはロードされません。
|
JavaScript E-XSLTサポート: Sablotron™をJavaScriptサポートを付けてコ ンパイルした場合、オプション --with-sablot-js=DIRを指定する必 要があります。
Win32ユーザへの注意: このモジュールを Windows 環境で使用するには、 sablot.dll を PHP/Win32 バイナリパッケージの DLL フォルダから使用する Windows マシンの SYSTEM32 フォルダ (例: C:\WINNT\SYSTEM32 または C:\WINDOWS\SYSTEM32) へコピーする必要があります。 PHP <= 4.2.0 の場合、sablot.dll とexpat.dllを SYSTEM32フォルダにコピーしてください。 PHP >= 4.2.1 の場合、sablot.dll, expat.dll, iconv.dll を SYSTEM32 フォルダにコピーしてください。
実行時設定
設定ディレクティブは定義されていません。リソース型
リソース型は定義されていません。定義済み定数
以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。- XSLT_OPT_SILENT (integer)
- ログ出力とエラー報告を全てドロップします。 将来追加される全てのバックエンドについて共通のオプションです。
- XSLT_SABOPT_PARSE_PUBLIC_ENTITIES (integer)
-
Sablotron™がpublicエンティティを
パースするようにします。デフォルトではオフになっています。
- XSLT_SABOPT_DISABLE_ADDING_META (integer)
-
HTML出力のときに "Content-Type" メタタグを追加しません。
Sablotron™のコンパイル時にデフォルト値が
セットされます。
- XSLT_SABOPT_DISABLE_STRIPPING (integer)
- 空白の除去を抑制します。(データファイルに対してのみ)
- XSLT_SABOPT_IGNORE_DOC_NOT_FOUND (integer)
- 解決できない文章 (document() 関数) をリテラルでないものと見なします。
- XSLT_SABOPT_FILES_TO_HANDLER (integer)
- XSLT_ERR_UNSUPPORTED_SCHEME (integer)
- スキームハンドラ のエラーをコードで返します。
目次
- xslt_backend_info — バックエンドのコンパイル設定についての情報を返す
- xslt_backend_name — バックエンドの名前を返す
- xslt_backend_version — Sablotron のバージョン番号を返す
- xslt_create — 新規のXSLTプロセッサを作成する
- xslt_errno — カレントエラー番号を返す
- xslt_error — カレントのエラー文字列を返す
- xslt_free — XSLT プロセッサを開放する
- xslt_getopt — XSL プロセッサのオプションを取得する
- xslt_process — XSLデータを有する文字列によりXMLデータを変換する
- xslt_set_base — 全てのXSLT変換用の基準URIを設定する
- xslt_set_encoding — XMLドキュメントをパースするエンコーディングを設定する
- xslt_set_error_handler — XSLTプロセッサ用のエラーハンドラを設定する
- xslt_set_log — ログメッセージを書き込むためのログファイルを設定する
- xslt_set_object — コールバック関数を解決するためのオブジェクトを設定する
- xslt_set_sax_handler — XSLTプロセッサに SAX ハンドラを設定する
- xslt_set_sax_handlers — XMLドキュメントを処理する際にコールされる SAX ハンドラを設定する
- xslt_set_scheme_handler — XSLTプロセッサ用にスキーマハンドラを設定する
- xslt_set_scheme_handlers — XSLTプロセッサに関するスキーマハンドラを設定する
- xslt_setopt — 与えられた XSL プロセッサにオプションを設定する
XSL Transformations
拡張子 | .xsl, .xslt |
---|---|
MIMEタイプ | application/xslt+xml[注釈 1][1] |
開発者 | World Wide Web Consortium (W3C) |
種別 | XML変換言語、関数型言語 |
派生元 | XML |
国際標準 | 1.0 (Recommendation), 3.0 (Recommendation) |
XSL変換[2](英: XSL Transformations、XSLT)は、W3Cにより標準化されたXML文書の変換用言語である。3つの仕様から成るXSLのうちの、ひとつの仕様である。XSLT の仕様はジェームズ・クラークを中心とした人々が設計した。XSLT と XSL-FO はDSSSLをもとにして設計された。
XSLT 1.0 は1999年11月23日にW3C勧告となり、2007年には JIS X 4169 としてJIS規格へ翻訳された。XSLT 2.0 は2007年1月23日に、3.0は2017年6月8日にW3C勧告となった。
XSLTはXML形式の文書を変換する。XPath による選択と検索にもとづき、XML文書全体または文書の一部に対して変換を行い、XML として出力する他、XML(整形式)ではないその他任意のテキスト形式としても出力できる。
例としては次のような応用がある。
- 一定フォーマットのHTML用の、文書型宣言・ヘッダ情報の追加
- テキストの移動
- テキストのソート
変換の指定は関数型言語として見ることもでき、実のところチューリング完全であるため、コンピュータ・プログラムを書くようにしてどんな応用も可能である。裏返せば、その機能を十分に発揮させるためには利用者に通常のプログラミングと同様の能力と作業が必要であり、しばしばXMLに対して持たれている「プログラミングが不要」という期待を裏切るものではある。
変換の対象となるXML文書は木構造であり、XSLTによる変換は宣言的に指定される。つまり、XSLTプログラムは、変換をどう行うべきか指定する規則をいくつか集めたものからなり、この規則を再帰的に適用することによって変換を行う。
XSLT処理系はまずどの規則が適用できるかチェックし、優先順にもとづいて該当する変換を行う。
XSLTプログラムは、以下のようにXML文書の形式をとる。
<?xml version="1.0" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
...
</xsl:stylesheet>
データ変換
XML 形式のデータを様々な形式のデータに変換できる。ここではその例を示す。
変換前のXML
<?xml version="1.0" ?>
<persons>
<person username="JS1">
<name>John</name>
<family-name>Smith</family-name>
</person>
<person username="MI1">
<name>Morka</name>
<family-name>Ismincius</family-name>
</person>
</persons>
変換後の形式 | XSLTコード | 変換結果 |
---|---|---|
XML | <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/persons">
<root>
<xsl:apply-templates select="person"/>
</root>
</xsl:template>
<xsl:template match="person">
<name username="{@username}">
<xsl:value-of select="name" />
</name>
</xsl:template>
</xsl:stylesheet>
|
<?xml version="1.0" encoding="UTF-8"?>
<root>
<name username="JS1">John</name>
<name username="MI1">Morka</name>
</root>
|
XHTML | <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml">
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:template match="/persons">
<html>
<head> <title>Testing XML Example</title> </head>
<body>
<h1>Persons</h1>
<ul>
<xsl:apply-templates select="person">
<xsl:sort select="family-name" />
</xsl:apply-templates>
</ul>
</body>
</html>
</xsl:template>
<xsl:template match="person">
<li>
<xsl:value-of select="family-name"/><xsl:text>, </xsl:text><xsl:value-of select="name"/>
</li>
</xsl:template>
</xsl:stylesheet>
|
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head> <title>Testing XML Example</title> </head>
<body>
<h1>Persons</h1>
<ul>
<li>Ismincius, Morka</li>
<li>Smith, John</li>
</ul>
</body>
</html>
|
CSV | <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:template match="/persons">
<xsl:apply-templates select="person" />
</xsl:template>
<xsl:template match="person">
<xsl:value-of select="@username" />
<xsl:text>,</xsl:text>
<xsl:apply-templates select="*" />
</xsl:template>
<xsl:template match="name">
<xsl:value-of select="." />
<xsl:text>,</xsl:text>
</xsl:template>
<xsl:template match="family-name">
<xsl:value-of select="." />
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>
|
JS1,John,Smith MI1,Morka,Ismincius |
テンプレート関数
XSLT はテンプレートの関数を再帰的な形で定義ができる純粋関数型言語でもある。
下記のものはテンプレート関数 String_replaceAll
である。これは、パラメーター this
で指定した文字列中にある、パラメーター substring
で指定した部分文字列をすべて、パラメーター replacement
で指定する文字列に置換した文字列を返す関数。これの例から以下の点が分かる。
- テンプレート関数の定義の仕方(
xsl:template
、xsl:param
) - 引数の値の参照の仕方(
$引数名
) - 条件分けの仕方(
xsl:if
、xsl:choose
) - XSLT関数(
not
、contains
、substring-before
、substring-after
) - XSLT関数の使い方(
<xsl:value-of select="XSLT関数 (引数...)" />
) - 定義されたテンプレート関数の呼び出し方(
xsl:call-template
、xsl:with-param
:再帰呼び出しの箇所)
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template name="String_replaceAll">
<!-- 引数 -->
<xsl:param name="this" select="''" />
<xsl:param name="substring" />
<xsl:param name="replacement" />
<xsl:if test="not ($this='')">
<xsl:choose>
<!-- this に substring が含まれる場合の値 -->
<xsl:when test="contains ($this, $substring)">
<xsl:value-of select="substring-before ($this, $substring)" />
<xsl:copy-of select="$replacement" />
<xsl:call-template name="String_replaceAll"> <!-- 再帰呼び出し -->
<xsl:with-param name="this" select="substring-after ($this, $substring)" />
<xsl:with-param name="substring" select="$substring" />
<xsl:with-param name="replacement" select="$replacement" />
</xsl:call-template>
</xsl:when>
<!-- そうでない場合の値 -->
<xsl:otherwise>
<xsl:value-of select="$this" />
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
メディア型
XSLTのメディア型は、「application/xslt+xml
」としてIANAに登録されており[3]、「application/xslt+xml
」または「application/xml
」が望ましいMIMEタイプである[注釈 2]。しかし、Internet Explorerなど一部のユーザーエージェントには、これらのMIMEではXSLTを認識しないものや、「text/xsl
」などの独自に定めたMIMEのみを認識するものも多い[4]。
脚注
注釈
出典
関連項目
外部リンク
- 実装
- Xalan-Java
- Xalan-C++
- libxslt the XSLT C library for Gnome
- Sablotron
- SAXON by Michael Kay
- XT by James Clark
- XSLT for MSXML | Microsoft Docs
- [MS-XSLT: Microsoft XSLTransformations (XSLT) Standards Support Document]
- MozillaはXSLTにネイティブ対応
- X-SmilesはXSLTにネイティブ対応している
- <oXygen/> XSLT editor and debugger
- 仕様書
- XSLT 1.0 W3C 勧告
- JIS X 4169:2007「XSL変換 (XSLT) 1.0」(日本産業標準調査会、経済産業省)
- XSLT 2.0 W3C 勧告
- XSLT 3.0 W3C 勧告
- XSLTチュートリアル (ドイツ語)
- XSLT 2.0参照 (ドイツ語)
- XSLTとXPathリファレンス (ドイツ語)
- XSLT 1.0 W3C 勧告
XSLT
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2017/12/30 02:54 UTC 版)
最も有名なXML変換言語。XSLT 1.0 のW3C勧告は1999年、XPath 1.0 と共に公開され、それ以降広く実装されている。XSLT 2.0 は2007年1月にW3C勧告となり、Saxon XSLT のように既にそれを実装したソフトウェアも出回っている。
※この「XSLT」の解説は、「XML変換言語」の解説の一部です。
「XSLT」を含む「XML変換言語」の記事については、「XML変換言語」の概要を参照ください。
- XSLTのページへのリンク