XSLT の概要

« Transforming XML with XSLT

eXtensible Stylesheet Language/Transform は非常に強力な言語であり、この記事の全体的な議論はこの記事の範囲をはるかに超えていますが、基本的な概念の簡単な説明は Netscape の機能の説明の理解に役立ちます。

XSLT スタイルシートは XML ドキュメントです。

独自の特殊な構文を持つ CSS と異なり、XSLT スタイルシートは XML 文書であり、整形式を含むすべての XML 規則に準拠しなければなりません。したがって、変換のモデルは 1 つの XML 文書を使用して別の XML 文書を変換することです。

XSLT スタイルシートには、標準の XSLT 見出しが含まれています。

XSLT スタイルシートの最も外側の要素は <xsl:stylesheet> 要素でなければなりません (受け入れ可能な代替要素は <xsl:transform> 要素です)。この要素には少なくとも 1 つの名前空間宣言と必須のバージョン属性が含まれます。他の名前空間と 3 つのオプションの属性も含めることができます。

XSLT の必須名前空間は "http://www.w3.org/1999/XSL/Transform" です。

名前空間は XML のかなりの混乱の対象です。多くの場合、名前空間は URI であるように見えますが、実際にはそのアドレスにあるリソースを参照していません。代わりに既知の要素セットの一意の識別子を指定する単なる方法です。文字列 "http://www.w3.org/1999/XSL/Transform" は、1999 年に XSLT 勧告で W3C によって指定されたタグのセットに属するとマークされた要素を指定する定数です。スタイルシートで時折見られる別の文字列 "http://www.w3.org/TR/WD-xsl" は、W3C 文書の以前の作業草案 (したがって WD) に準拠していることを示します。後者のネームスペースは W3C が最終的に採用したものと互換性がなく、Netscape でサポートされていません。

繰り返し "http://www.w3.org/1999/XSL/Transform" と入力するのは面倒で、マークアップを読みにくくするため、スタイルシートの見出しの名前空間に省略名を割り当てるための標準的なメカニズムがあります。したがって、opening stylesheet 要素の完全な例は、このようになります。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

xmlns 擬似属性は、後続の文書全体で使用するために短縮名 xsl を完全な名前空間にマップします。したがって、上記の stylesheet 要素の前に xsl: が付いています。xsl は従来使用されていた短縮名 (接頭辞と呼ばれます) ですが必須ではなく、別の名前を選択することも可能です。この記事の例はすべて xsl 接頭辞の使用を前提としています。

すべての XSLT 変換は、ドキュメントではなくツリーで実行されます。

プロセッサと呼ばれる XSLT 変換エンジンは、ドキュメントでは直接動作しません。変換が行われる前に、プライマリ XML ドキュメントとスタイルシートドキュメントは、メモリ内のドキュメント構造の抽象的な表現を作成するパーサを介して実行する必要があります。ツリーと呼ばれるこの表現は、プロセッサによって実際に操作されるものです。ツリーは抽象データ型であり、パーサーとプロセッサに応じてさまざまな方法で実装できる概念モデルです。Netscape ではツリー構造として W3C DOM に似た構造を使用していますが、他のものも可能です。唯一の要件はツリー内のオブジェクトの配置、そのプロパティ、およびそれらの関係に関係します。

ツリーはノードの階層的なフレームワークで構成されています。単一のルートノード、要素ノード、テキストノード、属性ノード、コメントノード、処理命令ノード、および名前空間ノードの 7 つの異なるタイプのノードで構成できます。

ツリーの最上部にルートノードがあります。ルートノードは XML 文書の個々の部分に対応していません。文書全体を表します。ルートノードの下には要素、コメント、処理命令などの子要素があります。これらの子要素の中にはさらに子要素がいるものもあります。そして、これはいくつかのレベルのために続けることができます。たとえば、テキストノードには子を持たないなど、ノードの種類が発生する特定の制約があります。

プロセッサのアクションの結果もツリーです。Netscape はこのツリーを使用してブラウザウィンドウにコンテンツを表示します。

XSLT は、高水準の宣言型言語です。

本質的に、XSLT スタイルシートはテンプレートと呼ばれる一連のルールであり、この特定のパターンに一致するノードはこの特定の方法で操作され、結果ツリーのこの特定の位置で終了することを宣言します。これがどのように達成されるかについての詳細は、プロセッサに委ねられています。スタイルシートの実行順序は保証できないため、XSLT は副作用を発生させる機能をサポートしていません。これは Lisp や Scheme のようなものです。

ツリー上の場所は、別の W3C 勧告である XPath を使用して指定されます。

変換はプロセッサがツリー上の個々のノードを特定できるかどうかに依存します。これを容易にするために、W3C は別の言語である XPath を使用することに決め、Xpath は XSLT コンテキスト外でも使用されています。その名前が示すように、XPath はプロセッサがツリーを通過して目的のノードに到達する「パス」を定義します。このパスは評価される XPath 特有の表現、一致される条件の数、ノードを関連付ける方法、および/またはツリー内の方向性の指示を含む式からなります。XSLT で最も一般的に使用される XPath の部分の詳細な説明は、参考セクションで説明します。

テンプレートマッチングの潜在的な競合は、一連のカスケード優先ルールを使用して解決されます。

一般的に、より具体的なテンプレートルールはあまり具体的でないテンプレートルールよりも優先され、他のものは同等であるため、ドキュメントの後に表示されるテンプレートルールが先に表示されたものよりも優先されます。

スタイルシートは、処理命令を介して XML 文書に添付することができます。

特定の XML 文書を処理するためにどの XSLT スタイルシートを使用すべきかを示す最も簡単な方法は、XML 文書自体に処理命令を含めることです。 たとえば、スタイルシートが inventory.xsl と呼ばれ、xml ドキュメントと同じディレクトリにある場合、xml ドキュメントの処理命令は次のようになります。

<?xml-stylesheet type="text/xml" href="inventory.xsl"?>

これは xml ドキュメントのプロローグセクションに配置する必要があります。

XSLT と XPath の詳細については、この記事の最後にある参考文献を参照してください。