気の向くままに辿るIT/ICT/IoT
XSLT

【Stylesheet Structure / スタイルシート構造】XSLT 2.0/XSL Transformations Version2.0/Extensible Stylesheet Language Transformations Version2.0

ホーム前へ次へ
XSLT 2.0スタイルシート構造とは?

【Stylesheet Structure / スタイルシート構造】XSLT 2.0/XSL Transformations Version2.0/Extensible Stylesheet Language Transformations Version2.0

XSLT 2.0スタイルシート構造

 W3C勧告XSLTバージョンXSLT 2.0の「3 Stylesheet Structure / スタイルシート構造」

 XSL Transformations (XSLT) Version 2.0 / W3C Recommendation 23 January 2007の目次に沿った日本語訳です。

 当サイト管理人が2009年03月、意訳したものですが、構文解釈の違いや翻訳の違いが含まれるかもしれません。正式文書はW3C 各種仕様書(英語版)である事を予めご了承ください。

<< 2.概念 / Concepts

3.XSLT 2.0スタイルシート構造目次


3 スタイルシート構造 / Stylesheet Structure
 3.1 XSLT名前空間
 3.2 予約済み名前空間
 3.3 拡張属性
 3.4 XSLTメディアタイプ
 3.5 標準属性
 3.6 スタイルシート要素
  3.6.1 既定照合属性 The default-collation attribute
  3.6.2 ユーザー定義データ要素
 3.7 簡易化されたスタイルシートモジュール
 3.8 後方互換処理
 3.9 前方互換処理
 3.10 スタイルシートモジュール結合
  3.10.1 位置決めスタイルシートモジュール Locating Stylesheet Modules
  3.10.2 内部スタイルシート Stylesheet Inclusion
  3.10.3 外部スタイルシートの取り込み Stylesheet Import
 3.11 埋め込みスタイルシートモジュール Embedded Stylesheet Modules
 3.12 要素に内包する条件 Conditional Element Inclusion
 3.13 組み込みタイプ Built-in Types
 3.14 スキーマコンポーネントの取り込み Importing Schema Components

3 スタイルシート構造

[定義:  それぞれがXML文書の全てまたは一部を形作る1つ以上のスタイルシートモジュールで構成するスタイルシート ]

注釈:

スタイルシートモジュールは、XDM要素ノード(参照先:[データモデル])によって表現されます。 標準スタイルシートモジュールのケースでは、これは、xsl:stylesheet、または、xsl:transform要素になるでしょう。 単純化されたスタイルシートモジュールでは、それは、xsl:version属性を持つ(XSLT名前空間にない)いくつかの要素にする事が可能です。

スタイルシート モジュールは、一般的には、XML 1.0または、XML 1.1と一致する文書の型の中で保持されますが、この仕様は、そのような表現を命じるものではありません。 ソースツリーを伴う際には、原文のXMLまたは、他方で、この仕様のスコープ外からスタイルシートモジュールが構築される中での方法です。

スタイルシートモジュールは、標準スタイルシートモジュール、または、単純化されたスタイルシートモジュールです。:

  • [定義:  標準スタイルシートモジュールは、1つのツリー、または、xsl:stylesheet、または、xsl:transform要素(参照先:3.6 スタイルシート要素)その子孫ノードと結び付けた属性と名前空間を伴い共に構成されるツリーの一部です。 ]

  • [定義:  単純化されたスタイルシートモジュールは、1つのツリー、または、その子孫ノードと結び付けられた属性と名前空間を伴い共にあるリテラル結果要素で構成されるツリーの一部です。 この要素は、XSLT名前空間の中にそれ自身あるわけではありませんが、それは、XSLT名前空間においてバインディングしている宣言である名前空間ノードを持たなければならないという意味でxsl:version属性を持たなければいけません。 より多くの詳細については、3.7 単純化スタイルシートモジュール参照。 ]

(標準と単純化された)スタイルシートモジュールの形式の双方は、XML文書全体、または、その他のXML文書の一部として組み込まれたものかのいずれかですが、概してスタイルシートを利用して処理されるソース文書を必要としません

[定義:  スタンドアローンスタイルシートモジュールは、XML文書全体を構成するスタイルシートモジュールです。 ]

[定義:  組み込みスタイルシートモジュールは、その他のXML文書内に組み込まれたスタイルシートモジュールで、典型的には、変換されているソース文書です。 ] (参照:3.11 組み込みスタイルシートモジュール)。

このようにスタイルシートモジュールの4つの種類があります。:

スタンドアローン標準スタイルシートモジュール
スタンドアローン単純化スタイルシートモジュール
組み込み標準スタイルシートモジュール
組み込み単純化スタイルシートモジュール

3.1 XSLT名前空間

[定義:  XSLT名前空間は、URI http://www.w3.org/1999/XSL/Transformを持ちます。 それは、この仕様で定義した特別な意味を持つ要素、属性、そして他の名称を識別する為に利用されます。 ]

注釈:

URI表示にある1999は、そのURIが、W3Cによって領域確保された年を示しています。 それは、属性によって記述される利用しているXSLTのバージョンは示しません。(参照先: 3.6 スタイルシート要素3.7 単純化スタイルシートモジュール)。

XSLTプロセッサは、この名前空間を形作る要素と属性を認識する為にXML名前空間メカニズム[XML1.0における名前空間]を利用しなければいけません。 XSLT名前空間から得られる要素は、スタイルシート内でのみ認識され、ソース文書では認識されません。 XSLT定義要素の完全なリストは、D 要素シンタックス要約で記述されます。 手法は、 付加的な要素、または、属性を伴うXSLT名前空間を拡張してはいけません。 その代わりに、いくつかの拡張は、分割する名前空間の中に存在しなければいけません(そのXSLT名前空間自体を拡張してはいけませんが、別のXSLT名前空間ではない名前空間を利用してその中に定義する事はできるのでXSLT名前空間にない利用したい付加的な要素、属性はそこに定義しなければいけません)。 付加的な命令要素において利用されたいくつかの名前空間は、18.2 拡張命令に記述した拡張命令メカニズムという意味合いによって識別されなければいけません

この仕様は、XSLT名前空間にある要素を参照するにあたってxsl:のプリフィックス(前置詞)を利用します。 しかしながら、XSLTスタイルシートは、それらがXSLT名前空間のURIにおける前置詞をバインドする名前空間宣言を提供されたいくつかの前置詞を利用する事は自由です。

注釈:

この仕様を通して要素または、属性のある名前空間が(存在し)ない、または、カラのシーケンスである名前空間部分拡張QNameである場合には、null 名前空間URIを持っているものとして参照されます。

注釈:

XSLT 要素の名称において利用した規約は、 属性名と関数名は全て小文字とし、語句を分割する為にハイフンを利用し、XMLまたは、HTMLのような関連した言語のシンタックスにそれらが既に現れる場合には、限定的に略記(略記法)を利用します。 XMLスキーマの中で定義した名称は、しかしながら、単独の語句とみなされ、XMLスキーマに存在するものとして正確に大文字で書かれます。 これは、時にcurrent-dateTimeFOのような各種の要素から成る関数名を導きます。

3.2 予約済み名前空間

[定義:  XSLTプロセッサによって認識される確実な他の名前空間を一緒に伴うXSLT名前空間は、予約済み名前空間として分類され、これと、そして関連する仕様を記述した場合に限って利用されなければいけません] 予約済み名前空間は、下記のようにそれらが列挙されます。

  • 3.1 XSLT名前空間に記述したXSLT名前空間は、予約されます。

  • [定義:  標準関数名前空間http://www.w3.org/2005/xpath-functionsは、[関数と演算子]で定義した関数ライブラリにある利用した関数とこの仕様で定義した標準関数です。 ]

  • [定義:  http://www.w3.org/XML/1998/namespaceのように[XML 1.0における名前空間]で定義されたXML名前空間は、xml:langxml:spacexml:idのような属性の為に利用されます。 ]

  • [定義:  スキーマ名前空間http://www.w3.org/2001/XMLSchemaは、[XMLスキーマ Part 1]で定義したように利用されます。 ]. スタイルシートでは、この名前空間は、ビルトイン(組み込み)スキーマ データ区分とそれらのデータ区分とを結びつけたコンストラクタ関数を参照する為に利用される場合があります。

  • [定義:  スキーマインスタンス名前空間http://www.w3.org/2001/XMLSchema-instanceは、[XML スキーマ Part 1]で定義したように利用されます。 ]. この名前空間にある属性は、もし、それらがスタイルシートに現れる場合には、XSLTプロセッサによって他の属性と同じ方法で扱われます。

予約済み名前空間は、ソース文書と結果文書の要素と属性の名称を参照する為の制限なく、利用される場合があります。 XSLTプロセッサは、リテラル結果要素ユーザー定義データ要素の名称の中で、リテラル結果要素の属性の名称の中で、または、XSLT要素として制限なしで利用される場合がある他のXSLT名前空間よりも、予約済み名前空間に影響されます。 : しかし、他のプロセッサは、制限を課したり、または、それらを特別に意味づける場合もあります。 予約済み名前空間は、利用されてはいけませんが、しかしながら、 変数スタイルシート関数のようなスタイルシート定義済みオブジェクトの名称の中で利用されています。

注釈:

XML名前空間の例外を伴う上記名前空間のいくつかは、明示的な名前空間宣言を伴って宣言されなければいけないスタイルシート内で利用されます。 この仕様にあるこれらの名前空間において利用される従来の前置詞とは言え、いくつかの前置詞は、ユーザースタイルシート内で利用される場合があります。

[ERR XTSE0080] 名前付きテンプレートの名前にある、モード属性セットキー十進フォーマット変数、または、パラメータスタイルシート関数、 名前付き出力定義、または、文字マップ予約済み名前空間を利用する事は、静的エラーです。

3.3 拡張属性

[定義:  XSLT名前空間から得られる要素は、XSLT名前空間からは得られないいくつかの属性を持ち、Nullでない名前空間URIを持つ属性の拡張QName(参照先: [XPath 2.0])を提供される場合があります。 これらの属性は、拡張属性として参照されます。 ] 拡張属性の存在は、順応するXSLT 2.0プロセッサが生成する可能性のある結果ツリーとは異ならせる為の変換による生成した最終結果ツリーに起因してはいけません。 それらは、エラーシグナル出力の為に失敗する事をプロセッサに起因してはならず、順応するプロセッサは、シグナル出力を要求されます。 これが意味するところは、拡張属性は、効果がimplementation-defined、または、implementation-dependentという拡張を除き、いくつかの指示命令の効果を変更してはいけないという事です。

もっといえば、もし、シリアライゼーションが20 シリアライゼーションに記述したシリアライゼーションメソッドxmlxhtmlhtml、または、textの内の1つを利用して実行された場合には、 拡張属性は、仕様が提供する命令と一致しない(矛盾する)方法が存在する場合、シリアライザーに起因して動作してはいけません。

注釈:

拡張属性は、拡張関数拡張命令の振る舞いを部分修正する為に利用される場合があります。 それらは、 implementation-defined、または、implementation-dependentの残りのふるまいの仕様というケースにある処理オプションを選択する為に利用される場合があります。 それらは、診断、または、文書化における最適化するヒントにおいて利用される場合もあります。

拡張属性はまた、implementation-defined、または、implementation-dependentであるシリアライゼーションメソッドの振る舞いという拡張においてxmlxhtmlhtml、または、textといったシリアライゼーションメソッドのふるまいに影響を及ぼす(作用する)ために利用される場合もあります。 例えば、拡張属性は、indent="yes"が記述される際に、利用されるにあたり、字下げ(インデント)の量を定義する為に利用されるかもしれません。 もし、これら4つの内の1つではなく、シリアライゼーションメソッドが、要求される場合(メソッドパラメータにある前置詞付きのQNameを利用すること)には、拡張属性は、任意の方法でその振る舞いに作用する場合があります。 拡張属性は、 一致しない方法でふるまいにおいて4つのシリアライゼーションメソッドに起因して利用されてはならず、例えば、シリアライゼーションエラーを報告するまでシリアライザーは、報告する事を要求されます。 このようなオプションを提供する事を願うある手法は、目的を果たす為に新しいシリアライゼーションメソッドを生成しなければいけません。

拡張属性、または、その値を認識しないある手法は、拡張属性が存在しないかのように実行しなければいけません。 通常通り、それは、警告メッセージを生成する事を許容します。

拡張属性において利用した名前空間は、もし、それがリテラル結果要素におけるスコープ内であれば、通常の方法で結果ツリーの為にコピーされるでしょう。 これは、[xsl:]exclude-result-prefixes属性を利用して存在させる事が可能です。

例:xsl:messageにおける拡張属性

次に続くコードは、変換を伴って継続する前に確認の為、ユーザーに尋ねる為にあるxsl:messageという固有の手法を示すために利用されるかもしれません。:

<xsl:message
	abc:pause="yes"
	xmlns:abc="http://vendor.example.com/xslt/extensions">フェーズ 1 完了</xsl:message>

名前空間http://vendor.example.com/xslt/extensionsを認識しない手法は、単純に外部属性を無視し、通常の方法でxsl:message命令を評価するでしょう。

[ERR XTSE0090] 「null」(前置詞のない名前を伴う属性)、または、この文書にある要素において定義した属性ではないXSLT名前空間のいずれかである名前空間の属性を持つ為にXSLT名前空間から要素を得る事は静的エラーです。

3.4 XSLTメディアタイプ

メディアタイプapplication/xslt+xmlは、XSLTスタイルシートモジュールの為に登録されるでしょう。

メディアタイプ推奨定義は、B XSLTメディアタイプにあります。

このメディアタイプは、そのトップレベルにある標準スタイルシートモジュールを含んでいるXML文書の為に利用されるべきです。 そして、それはまた、単純化スタイルシートモジュールにおいて利用される場合もあります。 それは、組み込みスタイルシートモジュールを含んでいるXML文書の為に利用されるべきではありません

3.5 標準属性

[定義:  標準属性の番号は、いくつかのXSLT 要素上に出現する場合があります。: 特にversionexclude-result-prefixesextension-element-prefixesxpath-default-namespacedefault-collationuse-when]

これらの属性は、リテラル結果要素上に出現する場合もありますが、このケースでは、XSLT名前空間にある属性の名前をユーザー定義属性からそれらとを識別するためです。 これらは、xsl:versionxsl:exclude-result-prefixesxsl:extension-element-prefixesxsl:xpath-default-namespacexsl:default-collation、または、xsl:use-whenのように典型的に書かれます。

それは、拡張命令上で許容されるべきこれら全ての属性を推奨しますが、これは、拡張命令ごとの手法の判断においてです。 それらは、XSLT宣言、または、XSLT命令のようにふるまうことを設計されるデータ要素のケース内での作用のいくつかの利用を持つ場合に限られますが、ユーザー定義データ要素上で、それらが、許容される場合もあります

次に続く説明では、これらの属性は、[xsl:]version等々として属を参照されます。

これらの属性全ては、先祖としての要素を持ついくつかの要素と属性を一緒に伴ってそれらが現れる場所で要素に作用します。 XSLT名前空間を伴う形式、XSLT名前空間を伴わない形式という2つの形式は、同じ効果を持ちます。; XSLT名前空間は、その親要素がXSLT名前空間にないと仮定して、そして、その場合に限定して属性において利用されます。

[xsl:]version[xsl:]xpath-default-namespace、そして[xsl:]default-collationのケースでは、その値は、子孫要素上に出現する同じ属性においての異なる値によって(状態を覆して)優先させる事が可能です。 固有のスタイルシート要素における属性の値の効果は、現れる属性上にある最も内側にあるancestor-or-self要素によって決められます。

組み込みスタイルシートモジュールでは、スタイルシートモジュールの最も外側の要素の先祖上に現れる標準属性は効果を持ちません。

[xsl:]exclude-result-prefixes[xsl:]extension-element-prefixesのケースでは、その値は、累積されます。 これらの属性については、名前空間のホワイトスペースで区切られたリストとして与えられる値は、前置詞と要素におけるこの属性に現れる前置詞によって設計される名前空間URIのセットを結合された要素における有効な値とその先祖要素のいくつかです。 再び、XSLT名前空間を伴う、XSLT名前空間伴わない2つの形式は、等価です(同じ効果を持ちます)。

[xsl:]use-when属性の効果は、3.12 条件付き要素含有で記述されます。

これらの属性は、いくつかのXSLT 要素上に出現する場合がありますので、個別の要素ごとのシンタックス要約の中では列挙されません。 代わりにそれらは、xsl:stylesheetxsl:transform要素に限って登録時に列挙され、記述されます。 これらの属性における実際の反映は、スタイルシートモジュール全体に適用するケースにおいてxsl:stylesheet要素上に限っては、しばしば利用されます。

これらの属性の効果における注釈としては、xsl:include、または、 xsl:import宣言によって参照されるスタイルシートモジュールを拡張しないという事です。

属性ごとの詳細の効果については、次に続くセクション参照:

[xsl:]version

参照先:3.8 後方互換性処理3.9 前方互換性処理

[xsl:]xpath-default-namespace

参照先:5.2 式とパターンにある前置詞のないQName

[xsl:]exclude-result-prefixes

参照先:11.1.3 リテラル結果要素の為の名前空間ノード

[xsl:]extension-element-prefixes

参照先:18.2 拡張命令

[xsl:]use-when

参照先:3.12 条件付き要素含有

[xsl:]default-collation

参照先:3.6.1 既定照合属性

3.6 スタイルシート要素

<xsl:stylesheet
  id? = id
  extension-element-prefixes? = tokens
  exclude-result-prefixes? = tokens
  version = number
  xpath-default-namespace? = uri
  default-validation? = "preserve" | "strip"
  default-collation? = uri-list
  input-type-annotations? = "preserve" | "strip" | "unspecified">
  <!-- Content: (xsl:import*, other-declarations) -->
</xsl:stylesheet>

<xsl:transform
  id? = id
  extension-element-prefixes? = tokens
  exclude-result-prefixes? = tokens
  version = number
  xpath-default-namespace? = uri
  default-validation? = "preserve" | "strip"
  default-collation? = uri-list
  input-type-annotations? = "preserve" | "strip" | "unspecified">
  <!-- Content: (xsl:import*, other-declarations) -->
</xsl:transform>

スタイルシートモジュールは、XML文書にあるxsl:stylesheet要素によって示されます。 xsl:transformは、xsl:stylesheetにおけるシノニムとして許容されます。; xsl:stylesheet要素について述べているこの仕様はどれもxsl:transformと同等に適用します。

xsl:stylesheet要素は、要求されるスタイルシートモジュールであるXSLTのバージョンを示すversion属性を持っていなければなりません

[ERR XTSE0110] version属性の値は、数値にしなければいけません。: 特にそれは、[XML スキーマ Part 2]で定義したものとしてのxs:decimalというタイプの妥当なインスタンスにしなければいけません。 XSLTのこのバージョンにおいては、値は、普通に2.0すべきです。 意図を伴って書かれたスタイルシートモジュールの1.0表示の値は、XSLT 1.0プロセッサを利用して処理されるべきです。

もし、主要なスタイルシートモジュールのもっとも外側の要素にある[xsl:]version="1.0"を記述するスタイルシート (それは、version="1.0"で、標準スタイルシートモジュールのケースにあるversion="1.0"、または、単純化スタイルシートモジュール)のケースにあるxsl:version="1.0"は、XSLT 2.0プロセッサに実行され、プロセッサは、他の方法でユーザーが要求するまでは、非互換性でも可能なユーザーへの警告表示を出力するべきです。 プロセッサは、後方互換性挙動における規則を利用してスタイルシートを処理しなければいけません。 もし、後方互換性挙動をサポートしないプロセッサによるこれらの規則要求がなされた場合には、エラーをシグナル出力しなければならず、変換を実行してはいけません

version属性の値が「2.0」よりも以降(「2.1」とか「3.0」。。。)である際には、前方互換性動作が利用可能となります。(参照先: 3.9 前方互換性処理)。

注釈:

XSLT 1.0は、もし、その値が「1.0」と等しくない場合には、スタイルシートが前方互換性で実行されるであろういくつかの数値を取る[xsl:]version属性を許容しました。 XSLT 2.0は、符号のない十進値を取る属性を継続して許容します。 XSLT 1.0プロセッサとXSLT 2.0プロセッサの両方(または、これらいずれかのように実行できるもの)を含むソフトウェア製品は、実行する為のプロセッサを決定する為に[xsl:]version属性を利用する場合があります。 XSLT 2.0プロセッサを伴って実行されるスタイルシートは、 その値1.0は、スタイルシートモジュールが、XSLT 1.0で書かれていたつもりである事を示すために取得されます。: もし、この値が、主要なスタイルシートモジュールの最も外側の要素上に現れる場合には、XSLT 2.0プロセッサは、スタイルシートを取り除くか、または、上に記述したように後方互換モードでそれを実行するでしょう。 version="2.0"という表示設定をしているスタイルシートは、ふるまいが利用可能な前方互換でも後方互換でもなく実行される為にあります。 いくつかの値が、前方互換挙動を可能にする2.0よりも大きい間、いくつかの他の値は、後方互換挙動を可能とする2.0よりも小さくなります。

開発時のスタイルシートは、 XSLT 1.0、または、XSLT 2.0いずれかの下で実行する為に設計され、 推奨される実行は、1つは、version="1.0"と記述していて、他方は、version="2.0"と記述している2つのスタイルシートモジュール代替手段を作成する事であり、 これらのモジュールは、一般的なコードを受け入れる為にxsl:include、または、xsl:importを利用する事が可能です。 XSLT 1.0プロセッサの下で実行している時、version="1.0"モジュールは、主要なスタイルシート モジュールとして選択される事が可能です。; XSLT 2.0プロセッサの下で実行している時、version="2.0"モジュールは、主要なスタイルシートモジュールとして選択される事が可能です。 含まれている、または、取り込まれるスタイルシートモジュールは、 もし、それらが、XSLT 2.0の利便性を利用させる場合には、version="1.0"ではなく、version="2.0"と記述すべきです。

input-type-annotations属性の効果は、4.3 ソースツリーからタイプ注釈を除去に記述されます。

default-validation属性は、すべてのxsl:documentxsl:elementxsl:attributexsl:copyxsl:copy-ofxsl:result-document命令のvalidation属性と全てのリテラル結果要素xsl:validation属性の既定値を定義します。 それはまた、xsl:result-document命令の不足の中で作成した暗黙の最終結果ツリーに適用する妥当性を決定します。 この既定は、スタイルシートモジュール内で適用します。: それは、含む為、または、取り込まれたスタイルシートモジュールの為に拡張しません。 もし、属性が省略された場合には、既定はstripです。 許容する値は、preservestripです。 この属性の詳細については、19.2 妥当性参照。

[ERR XTSE0120] xsl:stylesheet要素は、いくつかの子テキストノードを持ってはいけません。 (この規則は、4.2 スタイルシートからのホワイトスペース除去に記述したようにホワイトスペーステキストノードの除去後に適用します。)

[定義:  要素の内、xsl:stylesheetの子として生じる要素は、トップレベル要素と呼ばれます。 ]

[定義:  トップレベル要素は、宣言とユーザー定義データ要素という2つのカテゴリに振り分けられます。 XSLT名前空間に名前のあるトップレベル要素は、宣言します。 いくつかの他の名前空間にあるトップレベル要素は、ユーザー定義データ要素です。(参照:3.6.2 ユーザー定義データ要素) ]

xsl:stylesheet内で許容した要素を宣言します。要素は、:

xsl:import
xsl:include
xsl:attribute-set
xsl:character-map
xsl:decimal-format
xsl:function
xsl:import-schema
xsl:key
xsl:namespace-alias
xsl:output
xsl:param
xsl:preserve-space
xsl:strip-space
xsl:template
xsl:variable

xsl:variablexsl:param要素における注釈としては、 宣言として、または、命令としてのいずれかで動作する事が可能です。 グローバル変数、または、グローバルパラメータは、宣言を利用して定義されます。;ローカル変数、または、ローカルパラメータは、命令を利用して定義されます。

もし、xsl:import要素がある場合には、それらは、他のどの要素よりも前に来なければいけませんxsl:stylesheet要素の内部で指定した子要素が距離を隔てて出現する場合があります。 これらの要素を指定するという事は、干渉する宣言が存在する(例えば、同じ優先度を持つ2つのテンプレート規則が、同じノードと一致する)まで変換の影響を及ぼさないという事です。 一般的には、このような干渉する宣言を含む事は、スタイルシートにおいてはエラーですが、いくつかのケースでは、プロセッサは、スタイルシート内で最後に出現する宣言を選ぶことによってエラーから復旧する事が許容されます。

3.6.1 default-collation属性

default-collation属性は、標準属性であり、それはXSLT名前空間にあるいくつかの要素上に、または、 (xsl:default-collationとして)リテラル結果要素上に出現する場合があります。

属性は、インナー要素上のその他のdefault-collation属性によって(状況を覆して)優先されるまでは、この要素の属性、または、子孫要素の属性内に出現する全てのXPath式によって利用した既定照合を記述する為に利用されます。 それは、信頼できるXSLTがそのスコープ内で(xsl:keyxsl:for-each-groupのように)構築する事によって利用した照合の決定もします。

属性の値は、URIを照合するホワイトスペースで区切られたリストです。 もし、これらURIのいくつかが、URIに関連する場合には、属性の親要素のURIを基準として関連が解決されます。 もし、その手法が絶対値照合URI結果の1つ以上を認識する場合には、既定照合として認識された最初の1つとして利用します。

[ERR XTSE0125] もし、[xsl:]default-collation属性の値が、基準URIに対して解決後に照合URIとして手法が認識するURIがない場合には、静的エラーです。

注釈:

属性が、照合URIのリストを許容する理由は、照合URIは、しばしば、ある固有のXSLT手法に限って重要になるからです。 異なるいくつかの手法を伴って実行するように設計されたスタイルシートは、それゆえに、いくつかの異なる照合URIを記述する事ができ、それぞれに付随した利用において1つずつ記述できます。 上記エラー条件を回避する為に、それは、リスト内の最後に干渉するURIとして「Unicode Codepoint Collation」を記述する事を可能とします。

[xsl:]default-collation属性は、xsl:sortによって利用した照合に影響を及ぼしません。

3.6.2 ユーザー定義データ要素

[定義:  宣言について追記するとxsl:stylesheet要素は、Nullでない名前空間URIを持つ要素の拡張QNameを提供され、XSLT名前空間からは得られないいくつかの要素を含む場合があります。 このような要素は、ユーザー定義データ要素として参照されます。 ]

[ERR XTSE0130] もし、xsl:stylesheet要素が、名前がNullの名前空間URIの子要素を持つ場合、それは、静的エラーです。

ある手法は、固有の名前空間に出現するユーザー定義データ要素を意味するimplementation-definedを結びつける場合があります。 名前空間のセットは、このようにデータ要素がimplementation-definedにおいて認識されます。 ユーザー定義データ要素の存在は、XSLT 要素とこの文書で定義した関数のふるまいを変更してはいけません。; 例えば、それは、xsl:apply-templatesが干渉解決する為に異なる規則を利用すべきであるという記述をする事をユーザー定義データ要素においては許容されません。 どのようなユーザー定義データ要素上の制約も可能、不可能は、3.3 拡張属性で記述した拡張属性上の制約と同じ正確さです。 このようにある手法は、常にユーザー定義データ要素を無視する事は自由であり、そして、もし、名前空間URIを認識しない場合には、エラーを与える事なしでこのようなデータ要素を無視しなければいけません

ユーザー定義データ要素が提供可能な例、

ユーザー定義データ要素は、スタイルシートモジュールなしでxsl:import要素に優先してはいけません[参照:ERR XTSE0200]

3.7 単純化スタイルシートモジュール

単純化シンタックスは、文書ノードにおける単独のテンプレート規則に限り定義するスタイルシートモジュールにおいて許容されます。 スタイルシートモジュールは、まさにその内容を一緒に伴うリテラル結果要素で構成される場合があります。 (参照先: 11.1 リテラル結果要素)。 リテラル結果要素は、xsl:version属性を持たなければいけません。(そしてそれは、それゆえにXSLT名前空間もまた宣言しなければいけません)。 このようなスタイルシートモジュールは、そのxsl:version属性を減じたリテラル結果要素を含んでいるテンプレート規則を含むxsl:stylesheetという標準スタイルシートモジュールと同等です。;テンプレート規則は、/パターンと一致しています。

例:単純化スタイルシート

例えば、:

<html xsl:version="2.0"
			xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
			xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<title>Expense Report Summary</title>
	</head>
	<body>
		<p>Total Amount: <xsl:value-of select="expense-report/total"/></p>
	</body>
</html>

(上記は、以下と)同じ意味合いを持っています

<xsl:stylesheet version="2.0"
		xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
		xmlns="http://www.w3.org/1999/xhtml">
<xsl:template match="/">
<html>
	<head>
		<title>Expense Report Summary</title>
	</head>
	<body>
		<p>Total Amount: <xsl:value-of select="expense-report/total"/></p>
	</body>
</html>
</xsl:template>
</xsl:stylesheet>

注記は、DOCTYPE宣言を含むシリアライズした出力を要求する為に単純化スタイルシートを利用する事は可能とはなりません。 これは、標準スタイルシートモジュールとxsl:output要素を利用する事によって行われる場合に限り可能です。

より正式には、単純化スタイルシートモジュールは、次に続く単純化スタイルシートモジュールへの変換を適用する事によって生成されるであろう標準スタイルシートモジュールと同等です。 文脈ノードとしてのリテラル結果要素を伴って名前付きテンプレート拡張を呼ぶことによって変換を実行します。:

<xsl:stylesheet version="2.0"
		xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template name="expand">
	<xsl:element name="xsl:stylesheet">
		<xsl:attribute name="version" select="@xsl:version"/>
		<xsl:element name="xsl:template">
			<xsl:attribute name="match">/</xsl:attribute>
			<xsl:copy-of select="."/>
		</xsl:element>
	</xsl:element>
</xsl:template>	
</xsl:stylesheet>

[ERR XTSE0150] 単純化スタイルシートモジュールのもっとも外側の要素として利用されたリテラル結果要素は、xsl:version属性を持っていなければいけません。 これは、XSLTのバージョンを表示するスタイルシートが要求します。 このXSLTのバージョンにおいては、値は、通常2.0になるでしょう。;値は、[XML スキーマ Part 2]に定義したものとしてのxs:decimalというタイプの妥当なインスタンスしなければいけません

他のリテラル結果要素はまた、xsl:version属性を持つ場合があります。 xsl:version属性が2.0よりも小さい数値である時には、後方互換性のふるまいが利用可能にされるように処理します。(参照先:3.8 後方互換性処理)。 xsl:version属性が2.0よりも大きい数値である時には、前方互換性動作を利用可能にします(参照先:3.9 前方互換性処理)。

リテラル結果要素の許容した内容は、単純化スタイルシートとして利用した時には、シーケンスコンストラクタ内で生じるときと同じです。 このように単純化スタイルシートの要素を文書として利用したリテラル結果要素は、宣言を含む事ができません。 単純化スタイルシートは、それゆえに、グローバル変数スタイルシートパラメータスタイルシート関数キー属性セット、または、出力定義を利用できません。 更にこれは、変換を初期化する為の利用方法に限定するという意味では、初期文脈ノードとして文書ノードを提供する為にあり、既定モードを利用して暗黙の match="/" テンプレート規則によってマッチするようになっています。

3.8 後方互換性処理

[定義:  要素は、もし、値が2.0よりも小さい[xsl:]version属性 (参照先: 3.5 標準属性)を持っている場合には、それ自身における 後方互換性挙動、その属性、その子孫とそれらの属性を利用可能です。 ]

値が2.0よりも大きい、または、等しい[xsl:]version属性を持つ要素は、それ自身における後方互換性挙動、その属性、その子孫とそれらの属性は、利用できません。 ある要素によって確立された互換性挙動は、先祖要素によって確立されたいくつかの互換性挙動に優先します。

もし、XPathを含んでいる属性が後方互換挙動を伴って処理される場合には、 式は、XPath 1.0互換性モードtrueをセットして評価されます。 このモードの詳細については、セクション 2.1.1 静的な文脈XP参照。 もっといえば、このような式では、いくつかの関数が、呼びだす手法がない場合は、 (それが標準関数 名前空間を利用するまで) 評価が、動的エラーを出すことであると評価された時の作用をするエラー関数をフォールバックする義務があります。[参照:ERR XTDE1425]。 後方互換性挙動を伴って利用可能なその作用は、関数呼び出しが実際に評価されるまでエラーに起因しない固有の手法で利用しない拡張関数上で呼びます。 より多くの詳細については、18.1 拡張関数参照。

注釈:

これは、XPath2.0の仕様と矛盾して現れる場合があり、静的な文脈にある存在(一致している名称とアリティ([arity]:関数における引数の数))ではない関数呼び出しを含む式である時、静的なエラー[XPST0017]が出される状態です。 この見かけ上の矛盾は、提示される(標準関数 名前空間にある名前ではなく)利用可能な関数名とアリティごとにそこにある式において静的な文脈を構築するXSLTプロセッサを記述する事によって解決されます。; 関数の他の手法がない時は、その関数呼び出しは、ランタイム作用が動的エラーを出すエラー関数をフォールバックする義務があります。

確実なXSLT構築はまた、後方互換性挙動が利用可能となる時、異なる結果を生成します。これは、このような構築ごとに分割して記述されます。

これらの規則は、完全に異なる目的を持つversion属性のあるxsl:output要素には適用しません。:シリアライゼーションにおいてメソッドが利用される為の出力のバージョンを定義する為に利用されます。

注釈:

後方互換性挙動の利用をさせる事によって、それは、XSLT 1.0プロセッサを利用して同じスタイルシートの処理の作用において全く同一であるXSLT 2.0プロセッサを伴って処理した時のその結果を保証する方法の中でスタイルシートを書く為に利用可能にします。 その違いは、(非標準)J.1 非互換性 変更点に記述されます。 変遷を伴って役立つように、スタイルシートのいくつかの部分は、後方互換性挙動を利用可能にして処理され、そして、他の部分はこの挙動は利用不可です。 全てのデータは、XSLT 2.0プロセッサによって操作した値が、適切な式が後方互換性挙動を利用しているか否かについてXDMデータモデルによって定義されます。 両方のケースで利用される同じデータモデルなので式(について)は、完全に整います(完全な構成になります)。 命令、または、XSLT 2.0で完全に定義される後方互換性挙動を伴う式の評価の結果とXPath2.0仕様は、XSLT 1.0とXPath 1.0仕様の参照によって定義したものではありません。

固有のXSLT 2.0手法が後方互換性挙動をサポートするかどうかは、implementation-definedです。

[ERR XTDE0160] もし、ある手法が、後方互換性挙動をサポートしない場合には、もし、いくつかの要素が後方互換性挙動が利用可能として評価される場合は、回復されない動的エラーです。

注釈:

XSLT 1.0と2.0プロセッサ両方を伴う作業をするスタイルシートを書く為に、XSLT 2.0の利便性を利用する選択をさせる間、XSLT 2.0での後方互換性挙動における規則とXSLT 1.0での前方互換性動作における規則の両方を理解する必要があります。 もし、xsl:stylesheet要素が、version="2.0"を記述する場合には、 XSLT 1.0プロセッサは、XSLT 1.0内で定義していなかったXSLT 2.0宣言、例えば、 xsl:functionxsl:import-schemaを無視するでしょう。 もし、いくつかの新しいXSLT 2.0命令が、利用される場合(例えば、xsl:analyze-string、または、 xsl:namespace)、 または、もし、新しいXPath 2.0特性が、利用される場合(例えば、新しい関数、または、条件付きの式のようなシンタックス、または、xsl:functionを利用して定義した関数を呼ぶ)には、スタイルシートは、XSLT 1.0とXPath 1.0の利便性に関連性がある場合に限ってフォールバック挙動を提供しなければいけません。 フォールバック挙動は、xsl:fallback命令を利用する事によって、 または、 function-availableの結果をテストする事によって、 または、 element-available関数、 または、 system-property関数によって返されたプロパティxsl:versionの値をテストする事によって 行使できます。

3.9 前方互換性処理

前方互換性動作の意図は、妥当なフォールバック挙動を利用しているXSLT 2.0プロセッサを伴うスタイルシートを実行する為の能力がある間、XSLT 2.0までのXSLTのいくつかのバージョンで紹介された特性の優位性を持つスタイルシートを書く事を可能にさせる事です。

それは、3.12 条件付き要素含有で記述したuse-when特性を利用する事によって異なるXSLTバージョンの下で実行する為の条件付きコードを書く事を常に可能にしています。 前方互換性挙動における規則は、2つの方法でこのメカニズムを補足します。:

  • XSLT 2.0プロセッサにおいて何もない事を意味するスタイルシート内での確かな構築は、エラーとして扱われるのではなく、無視されます。

  • 明示的なフォールバック挙動は、xsl:fallback命令を利用してXSLTの将来版リリースの中で定義した命令において定義される事が可能です。

詳細な規則は、次に続きます。

[定義:  もし、値が2.0よりも大きい[xsl:]version属性を持つ場合には、ある要素は、それ自身、その属性、その子孫とそれらの属性において前方互換性動作を利用可能です。(参照先: 3.5 標準属性) ]

値が2.0よりも小さい、または、同等である[xsl:]version属性を持つある要素は、それ自身、その属性、その子孫とそれらの属性を利用できません。 ある要素によって確立した互換性挙動は、先祖要素によって確立したいくつかの互換性挙動を優先します。

これらの規則は、全く異なる目的を持つxsl:output要素のversion属性には、適用しません。:シリアライゼーションにおいてメソッドが利用される為の出力のバージョンを定義する為に利用されます。

スタイルシートのセクションはないけれども前方互換性挙動が利用可能となる場合。:

  • もし、XSLT名前空間にある、ある要素がxsl:stylesheet要素の子として現れ、 XSLT 2.0が、xsl:stylesheet要素の子として生じるこのような要素を許容しない場合には、 要素とそのコンテンツは、無視しなければいけません

  • もし、ある要素が、属性を持ち、XSLT 2.0が、(属性を)持つ事を要素に許容しない場合には、属性は、無視されなければいけません

  • もし、XSLT名前空間にある、ある要素が、シーケンスコンストラクタの一部として現れ、 XSLT 2.0が、シーケンスコンストラクタの一部として出現するこのような要素を許容しない場合には、:

    1. もし、要素が、1つ以上の子xsl:fallbackを持つ場合には、静的または動的のいずれかで報告されるエラーがなく、命令を評価する結果は、文書内で指定したその子xsl:fallback内でシーケンスコンストラクタを評価する事によって形作られるシーケンスの結合です。 xsl:fallback要素の氏族は、たとえ、もしそれが妥当なXSLT 2.0命令であったとしても無視されます。

    2. もし、ある要素が持つ子xsl:fallbackがない場合には、仮に前方互換性動作が利用不可であったような同じ方法で静的なエラーが報告されます。

例:前方互換性挙動

例えば、XSLT 2.0プロセッサは、たぶんエラーなしでスタイルシートを続ける処理をするでしょう、けれども、スタイルシートは、この仕様で定義していないXSLT名前空間から得られる要素を含みます。:

<xsl:stylesheet version="17.0"
		xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:template match="/">
		<xsl:exciting-new-17.0-feature>
			<xsl:fly-to-the-moon/>
			<xsl:fallback>
	<html>
		<head>
			<title>XSLT 17.0 required</title>
		</head>
		<body>
			<p>このスタイルシートは、「XSLT 17.0」を要求しています。</p>
		</body>
	</html>
			</xsl:fallback>
		</xsl:exciting-new-17.0-feature>
	</xsl:template>
</xsl:stylesheet>

注釈:

もし、スタイルシートが、なんと2.0以降のXSLTのバージョンによって紹介した宣言に依存する場合には、 スタイルシートは、宣言を静かに無視しないXSLTの初期のバージョンに順応する手法を保証する為にterminate="yes"を伴うxsl:message要素(参照先: 17 Messages)を利用する事が可能です。

例:XSLTバージョンをテストする

例えば、

<xsl:stylesheet version="18.0"
		xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:important-new-17.0-declaration/>
	<xsl:template match="/">
		<xsl:choose>
			<xsl:when test="number(system-property('xsl:version')) lt 17.0">
	<xsl:message terminate="yes">
		<xsl:text>このスタイルシートは、「XSLT 17.0」を要求しています。</xsl:text>
	</xsl:message>
			</xsl:when>
			<xsl:otherwise>
	...
			</xsl:otherwise>
		</xsl:choose>
	</xsl:template>
	...
</xsl:stylesheet>

3.10 スタイルシートモジュールを連結する

XSLTは、複数のスタイルシートモジュールからスタイルシートを構築する2つのメカニズム(含有メカニズムと取り込みメカニズム)を提供します。:

  • 含有メカニズムは、連結されているモジュールのセマンティクスを変更することなく、連結する為にスタイルシートモジュールを許容し、そして

  • 取り込みメカニズムは、他のスタイルシートモジュールを優先する為に他のスタイルシートモジュールを許容します。

3.10.1 スタイルシートモジュールを設置する

含有と組み込みメカニズムは、次に続くセクションで定義される2つの宣言xsl:includexsl:importを利用します。

これらの宣言は、含有される、または、取り込まれるスタイルシートモジュールを識別する為に、値がURI 参照であるhref属性を利用します。 もし、この属性の値が、相対URIであれば、それは、5.8 URI 参照で記述したように解決されます。

基準URIに対して解決後、URI参照は、スタイルシートモジュールの説明にある方法で、かつ、 スタイルシートモジュールがimplementation-definedにある説明から構築され、位置決めする為に利用されます。 個別には、それが、URIスキーマがサポートされる[implementation-defined]か、フラグメント識別子がサポートされるかどうか、そしてどのようなメディアタイプがサポートされるのかです。 通常、ソースXML文書としてのスタイルシートモジュールを含んでいるリソースへの参照、 または、ソースXML文書内にある組み込みスタイルシートモジュールを選択するフラグメント識別子を含む場合があります。; しかし、その手法が、URI参照によって識別したスタイルシートモジュールを配置する他のメカニズムを利用する事は自由です。

参照したスタイルシートモジュールは、スタイルシートモジュールの4種類のいずれかである場合があります。: それは、standalone、または、 embeddedにする場合もあり、そして、 standard、または、 simplifiedにする場合もあるという事です。 もし、それが単純化スタイルシートモジュールである場合には、 3.7 単純化スタイルシートモジュールに記述した変換を適用する事によって標準スタイルシートモジュールと同等に変換します。

手法は、XPointer仕様(参照: [XPointer Framework])を参照する事によって定義したフラグメント識別子を含んでいるURI参照を許容する事を選ぶ場合があります。 注記として、もし、その手法が、URI参照にあるフラグメント識別子の利用をサポートしない場合には、組み込みスタイルシートモジュールを含む事を可能にしません。

[ERR XTSE0165] もし、プロセッサがURI参照によって識別したリソースを取得できない場合、または、 もし、取得されるリソースがこの仕様に一致するスタイルシートモジュールを含まない場合、それは、静的エラーです。

3.10.2 スタイルシート含有

<!-- カテゴリ:宣言 -->
<xsl:include
  href = uri-reference />

スタイルシートモジュールは、xsl:include宣言を利用しているその他のスタイルシートモジュールを含む場合があります。

xsl:include宣言は、含まれるためにスタイルシートモジュールを識別するURI参照である値のhref属性が要求されています(必須となっています)。 この属性は、3.10.1 スタイルシートモジュールを設置するに記述したように利用されます。

[ERR XTSE0170] xsl:include要素は、トップレベル要素にしなければいけません

[定義:  スタイルシートレベルは、xsl:include宣言を利用して接続したスタイルシートモジュールのコレクションです。 :具体的に言うと、2つのスタイルシートモジュールABは、もし、それらの1つが、xsl:include宣言という意味合いで他を含む場合、 または、もし、3番目のスタイルシートモジュールCが、AB両方と同じスタイルシートレベルにある場合には、同一のスタイルシートレベルの部品です。 ]

[定義:  スタイルシートレベルにある宣言は、全て、または、宣言指定として知っている命令を持ちます。 あるレベルにあるスタイルシートにある宣言の命令は、もし、それぞれのスタイルシートモジュールが、それを参照するxsl:include要素の位置にテキストを挿入される場合には、結果としては、文書指定と同じです。 ] 他の点では、しかしながら、xsl:includeの作用は、テキスト含有によって含まれるであろう作用と同等ではありません。

[ERR XTSE0180] もし、スタイルシートモジュールが直接、または、間接的にそれ自身を含む場合には、静的エラーです。

注釈:

一回以上同じモジュールを含む事はスタイルシートにとって本質的なエラーではありません。 しかしながら、そうなっている場合には、全く同じ宣言の為にエラーとする事が可能です。 このような複数の含有が間接的である時は、わかりにくいものです。 例えば、もし、スタイルシートBが、スタイルシートAを含み、 スタイルシートCが、スタイルシートAを含み、 スタイルシートDが、スタイルシートBとスタイルシートCの両方を含む場合には、 Aは、Dによって間接的に2回含まれるでしょう。 もし、Bの全てが、CDが独立したスタイルシートとして利用される場合には、 エラーは、分割するスタイルシートB'にあるAを含み、B'Aを含んでいるように含む為にBを変更し、Cも似たようにして、その時、AB'C'を含む為にDを変更するのではなく、Bにある全てを分割する事によって回避される事が可能です。

3.10.3 スタイルシート取り込み

<!-- カテゴリ:宣言 -->
<xsl:import
  href = uri-reference />

スタイルシートモジュールは、xsl:import宣言を利用してその他のスタイルシートモジュールを取り込む場合があります。 取り込むスタイルシートモジュールは、テンプレート規則とテンプレート規則を超えて優先される取り込んでいるモジュールにある他の宣言と取り込んだモジュールにある宣言(参照:3.10.2 スタイルシート含有)を除き、それを含んでいるのと同じです。; より多くの詳細については、以下に記述されます。

xsl:import宣言は、値が、含まれるためにスタイルシートモジュールを識別するURI参照であるhref属性を要求されています。 この属性は、3.10.1 スタイルシートモジュールを設置するに記述したように利用されます。

[ERR XTSE0190] xsl:import要素は、トップレベル要素にしなければいけません

[ERR XTSE0200] xsl:import要素は、いくつかの子xsl:include要素を含んでいるxsl:stylesheet要素の子といくつかのユーザー定義データ要素など他の全ての要素に先行しなければいけません

例:xsl:import利用

例えば、

<xsl:stylesheet version="2.0"
		xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:import href="article.xsl"/>
	<xsl:import href="bigfont.xsl"/>
	<xsl:attribute-set name="note-style">
		<xsl:attribute name="font-style">italic</xsl:attribute>
	</xsl:attribute-set>
</xsl:stylesheet>

[定義:  スタイルシートを作り上げるスタイルシートレベルは、取り込みツリーを成形するように扱われます。 取り込みツリーでは、各スタイルシートレベルは、それが含むxsl:import宣言ごとに子を1つ持ちます。 ] 子の命令は、それらのスタイルシートレベルの中にあるxsl:import宣言の宣言指定です。

[定義:  スタイルシートにある宣言Dは、 もし、Dを含んでいるスタイルシートレベルが、取り込みツリーの横断的なポスト命令にあるEを含んでいるスタイルシートレベルになるであろう場合には、 その他の宣言Eよりも低い取り込み優先度を持つ事を定義されます(それは、スタイルシートレベル内において取り込みツリーの横断は、スタイルシートレベルがその子の後に来るという事です)。 同じスタイルシートレベルにある2つの宣言は、同じ取り込み優先度を持ちます。 ]

例えば、仮定すると

  • スタイルシートモジュールAが、その指定の中でスタイルシートモジュールBCを取り込み;

  • スタイルシートモジュールBが、スタイルシートモジュールDを取り込み;

  • スタイルシートモジュール Cが、スタイルシートモジュールEを取り込む。

その時、取り込みツリーは、次に続く構造を持ちます:

	 A
	 |
     +---+---+
     |	     |
     B	     C
     |	     |
     D	     E

(最初が最も低い・優先度が低い順の)取り込み優先度の指定は、DBECAです。

一般的には、最も高い優先度を持つ宣言は、最も低い取り込み優先度を持つ宣言を超えて優先されます。 宣言の種類のそれぞれについては、この詳細の中で定義されています。

[ERR XTSE0210] もし、スタイルシートモジュールが間接的にそれ自身に取り込まれる場合には、静的エラーです。

注釈:

固有のURIを持つスタイルシートモジュールのケースでは、いくつかの時点では特別に扱われずに取り込まれます。 もし、異なるURIを持つものの取り込まれる内容が全く同一であるいくつかのスタイルシートモジュールである場合には、その作用は、まさに全く同じです。 これは、エラーの原因になる場合もならない場合もあり、スタイルシートモジュールの内容に依存します。

3.11 組み込みスタイルシートモジュール

組み込みスタイルシートモジュールは、含んでいるXML文書のもっとも外側の要素ではない要素を含んでいるスタイルシートモジュールです。 標準スタイルシートモジュール単純化スタイルシートモジュールは共に、この方法で組み込まれる場合があります。

組み込みスタイルシートを利用する場合の2つのシチュエーションは、:

  • スタイルシートは、変換される為のソース文書に組み込まれる場合があります。

  • スタイルシートは、XSLTがまるで1つの部品であるかのように形式を変換する処理のシーケンスを記述するXML文書に組み込まれる場合があります。

xsl:stylesheet要素は、含んでいる文書内でスタイルシートモジュールを参照する利便性の為にid属性を持つ場合があります

注釈:

このような属性の為に、URIにあるフラグメント識別子のように値が利用される為にXDM 属性ノードは、一般には、is-idプロパティを持たなければいけません。:参照:セクション 5.5 is-id AccessorDM. このプロパティは、もし、属性がIDというタイプとなるようにDTD内で定義される、または、もし、xs:IDというタイプになるようにスキーマの中で定義されている場合には、固有の設定をするでしょう。 それはまた、含んでいる文書のメディアタイプが、フラグメント識別子としてID値の利用をサポートすべき事も必要です。 このようなサポートは、存在する製品において広範囲に及び、[RFC3023]の次期改訂によってapplication/xmlというメディアタイプの関連で推奨される事が期待されます。

もし、手法がそれをサポートする場合には、選ぶべきものは、xml:id属性を利用する事です。 XSLTは、いくつかのXSLT要素上に出現する(他の名前空間属性のような)この属性を許容します。

例:xml-stylesheet処理命令

次に続く例は、スタイルシートそれ自身を含む為にソース文書を許容する事においてxml-stylesheet処理命令(参照:[XML スタイルシート])が、どのように利用されるのかを示します。 URI参照は、xsl:stylesheet要素を設置する為にフラグメント識別子を伴う関連URIを利用します。:

<?xml-stylesheet type="application/xslt+xml" href="#style1"?>
<!DOCTYPE doc SYSTEM "doc.dtd">
<doc>
<head>
<xsl:stylesheet id="style1"
		version="2.0"
		xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
		xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:import href="doc.xsl"/>
<xsl:template match="id('foo')">
	<fo:block font-weight="bold"><xsl:apply-templates/></fo:block>
</xsl:template>
<xsl:template match="xsl:stylesheet">
	<!-- ignore -->
</xsl:template>
</xsl:stylesheet>
</head>
<body>
<para id="foo">
...
</para>
</body>
</doc>

注釈:

スタイルシート モジュールは、xsl:stylesheet要素が無視されると記述するテンプレート規則を含む事を一般的に必要とする事が適用される文書の中に組み込まれます。

注釈:

上記の例は、XSLTスタイルシートを示す為の処理命令xml-stylesheetにある疑似属性type="application/xslt+xml"を利用します。 この利用方法は、確認(立証・承認・裏づけ)という項目です。:参照:3.4 XSLTメディアタイプ. XSLTスタイルシートにおいて登録したメディアタイプの欠如においては、いくつかのベンダーの製品は、異なる規約を採用した、特にtype="text/xsl"を持ちます。

注釈:

xml-stylesheet処理命令におけるサポートは、この勧告との一致の要求はされません。 手法は、そのメカニズムの中では制約されず、変換が開始される際にスタイルシートを識別する為に利用されます。:参照:2.3 変換を開始する

3.12 条件付き要素含有

XSLT名前空間内のいくつかの要素は、値が、静的に評価される事が可能なXPath式であるuse-when属性を持つ場合があります。 もし、その属性が、提示され、式が「false」となるような有効なboolean値XPである場合には、 先祖としての要素を持っている全てのノードを伴う要素は、スタイルシートモジュールから効果的に排除されます。 スタイルシートモジュールをスタイルシートモジュールから効果的に排除する際には、ノードが、そこになかったかのような場合と同じ作用を持ちます。 他の事柄において、この意味するところは、静的または、動的エラーは、use-when属性それ自身にあるエラーではなく、要素とその内容の関係の中で報告されるでしょう。

注釈:

これは、XML解析、または、妥当性エラーには適用せず、それは通常の方法で報告されるでしょう。 それは、xml:space[xsl:]xpath-default-namespaceにある例のように[xsl:]use-when以前に処理される必要のある属性には適用しません。

リテラル結果要素または、XSLT名前空間にないスタイルシートモジュールにあるいくつかの他の要素は、xsl:use-when属性の搬送にとてもよく似ている場合があります。

もし、xsl:stylesheet、または、xsl:transform要素それ自身が効果的に実行され、その効果は、xsl:stylesheet、または、xsl:transform要素である一方でxsl:stylesheet、または、xsl:transform要素、または、その属性でない(要素の)子全てを排除する事です。

注釈:

これは、それらの含有において、または、モジュールのレベルにおける単独のuse-when属性によって操作される事を排除する1つのスタイルシートモジュールに含まれるための同じ条件に依存する全ての宣言を許容します。

条件付き要素除外は、4.2 スタイルシートからホワイトスペースを取り除くに記述したようにスタイルシートからホワイトスペーステキストノードを取り除いた後に起こります。

use-when属性の値として利用される事が可能なXPath式上にある静的な制約はありません。 しかしながら、その文脈を評価する中で提供した情報にある厳格な制約があります。 これらの制約は、スタイルシートそれ自身、または、いくつかのソース文書に含まれた情報においていかなる依存もなくスタイルシート処理が可能な最も早い段階で評価される事が可能な式を保証する為に設計されます。

特に、静的文脈と動的文脈のコンポーネントは、次に続く2つのテーブルによって定義されます。:

use-when式における静的文脈コンポーネント
コンポーネント
XPath 1.0 互換性モード false
スコープ内名前空間 スタイルシートに含んでいる要素におけるスコープ内名前空間による決定
既定要素/既定タイプ 名前空間 もし、存在する場合には、xpath-default-namespace属性(参照先: 5.2 式とパターンにある前置詞のないQName)によって決定される。;他方、Null名前空間
既定関数 名前空間 標準関数 名前空間
スコープ内タイプ定義 xsl:import-schema宣言のいくつかの欠如において利用可能となるタイプ定義
スコープ内要素宣言 なし
スコープ内属性宣言 なし
スコープ内変数 なし
スコープ内関数 この仕様の中で定義した関数element-availablefunction-availabletype-availablesystem-propertyを伴う [関数と演算子]で定義した主要な関数、 加えてuse-when属性の親である要素の内容の中で(use-when式ではなく)XPath式ごとの静的な文脈に提示される拡張関数のセット 注記すると、文脈に含まれていないスタイルシート関数は、このような関数に関連してfalseを返すであろう関数function-availableという意味です。 この規則の効果は、use-when属性のスコープ内で呼ばれる事が可能な関数に関連して「true」を返すfunction-availableを保証する事にあります。 それはまた、これらの拡張関数が、use-when属性自身の中で認識され、しかしながら、この意図が与える成功するであろう関数を呼ぶという保証はない中で関数が利用可能になるという事実です。
スコープ内照合 Implementation-defined
既定照合 Unicode Codepoint Collation
基準URI スタイルシート内に含んでいる要素の基準URI
静的知覚文書 なし
静的知覚コレクション なし

 

use-when式における動的文脈コンポーネント
コンポーネント
文脈アイテム、 位置、サイズ 未定義
動的変数 なし
現在日付と現在時刻 Implementation-defined
暗黙のタイムゾーン Implementation-defined
利用可能文書 なし
利用可能コレクション なし

スタイルシートモジュール内では、 式[xsl:]use-when [xsl:]use-when属性内の含んだ式全ては、単独の実行スコープFOの中で評価されます。 これは、他のスタイルシートモジュールにある[xsl]:use-when式において利用したものとして、または、スタイルシートモジュール内のどこかで出現しているXPath式を評価している際に利用したものとして同じ実行スコープになる必要はありません。 これが意味するところは、current-dateFOのような関数は、同じスタイルシートモジュール内で異なる[xsl:]use-when式の中で呼んだ際に同じ結果を返すでしょうが、しかし、異なるスタイルシートモジュールにある[xsl:]use-when式の中で呼ぶのと同様に、または、状況に適した変換中に実行した同じ関数を呼ぶものとして同じ結果を返す必要はありません。

[xsl:]use-whenの利用は、次に続く例で表現されています。

例:可搬性獲得の為の条件付き実行の利用

この例は、スキーマ用プロセッサと非スキーマ用プロセッサが重なるスタイルシートの可搬性を獲得する為のuse-when属性の利用を明示します。

<xsl:import-schema schema-location="http://example.com/schema"
	use-when="system-property('xsl:is-schema-aware')='yes'"/>
<xsl:template match="/" 
	use-when="system-property('xsl:is-schema-aware')='yes'" 
				priority="2">
	<xsl:result-document validation="strict">
		<xsl:apply-templates/>
	</xsl:result-document>
</xsl:template>
<xsl:template match="/">
	<xsl:apply-templates/>
</xsl:template>

これらの宣言の効果は、非スキーマ用プロセッサは、xsl:import-schema宣言と最初のテンプレート規則を無視し、そして、それゆえに、これらの宣言の中でスキーマ関連構築に関連して生成するエラーはないという事です。

 

例:変数を含んでいるスタイルシートモジュール

この例は、XSLTプロセッサが利用する中で依存する異なるスタイルシートモジュールを含みます。

<xsl:include href="module-A.xsl" 
		 use-when="system-property('xsl:vendor')='vendor-A'"/>
<xsl:include href="module-B.xsl" 
		 use-when="system-property('xsl:vendor')='vendor-B'"/>

3.13 ビルトイン(組み込み)タイプ

各XSLT 2.0プロセッサは、次に続くスコープ内スキーマコンポーネントに定義する名前付きタイプを含みます。:

  • xs:NOTATIONを除くすべての根本の原子化されたタイプは、[XML スキーマ Part 2]で定義します。 それは、: xs:stringxs:booleanxs:decimalxs:doublexs:floatxs:datexs:timexs:dateTimexs:durationxs:QNamexs:anyURIxs:gDayxs:gMonthDayxs:gMonthxs:gYearMonthxs:gYearxs:base64Binaryxs:hexBinaryです。

  • 搬送される原子化されたタイプxs:integerは、[XML スキーマ Part 2]で定義しました。

  • タイプxs:anyTypexs:anySimpleType

  • 次に続くタイプは、[XPath 2.0]で定義しました。: xs:yearMonthDurationxs:dayTimeDurationxs:anyAtomicTypexs:untyped、 and xs:untypedAtomic

(以下は)スキーマ用XSLTプロセッサが付加的にサポートします:

注釈:

名前は、スキーマにおけるスキーマ、または、データタイプにおけるスキーマのいずれかで定義したトップレベルタイプの全ての名前を含まないXMLスキーマ名前空間から取り込まれます。 データタイプにおけるスキーマは、xs:integerxs:doubleのようなビルトイン(組み込み)タイプを定義することと同様で、 また、 定義するタイプは、xs:derivationControlのようなデータタイプにおけるスキーマ内での利用に限り、意図されます。 スタイルシートは、その入力としてXMLスキーマ文書を処理する為に、または、出力がスキーマにおけるスキーマを取り込む場合がある為に設計されます。

ある手法は、スタイルシートにおけるスコープ内スキーマコンポーネントに追加される為に付加的なスキーマコンポーネントを許容するメカニズムを定義する場合があります。 例えば、拡張関数(参照:18.1 拡張関数)を定義する為に利用したメカニズムは、このような関数の為のインタフェース内で利用したタイプを取り込む為に利用される場合もあります。

これらのスキーマコンポーネントは、スタイルシートにあるXPath式の中で、または、許容するこれらの属性であるこれらの要素の[xsl:]typeas属性の中で参照される場合のそれに限定します。

基本XSLTプロセッサについては、 スキーマ ビルトイン(組み込み)タイプは、セクション 2.5.4 シーケンスタイプマッチングXPの観念にある「知られていないタイプ」である静的な文脈の中には、含まれません。 そのセクションの言語では、基本XSLTプロセッサは、これらの知られていないタイプがxs:stringのような知られているスキーマタイプから搬送されるかどうかを決定する事が可能でなければいけません。 この規則の目的は、正しいふるまいをするxs:NCNameを返すために定義されるlocal-name-from-QNameFOのようなシステム関数を保証する事にあります。 スタイルシートは、xs:NCNameという値を返すかどうかテストする事は可能ではないけれども、 しかし、xs:stringだったかのようにそれを利用する事が可能であろう基本XSLTプロセッサを利用します。

3.14 スキーマコンポーネントを取り込む

注釈:

このセクションで記述した利便性は、基本XSLTプロセッサを伴った利用は可能ではありません。 それらは、21 一致で記述したようにスキーマ用XSLTプロセッサを要求します。

<!-- カテゴリ:宣言 -->
<xsl:import-schema
  namespace? = uri-reference
  schema-location? = uri-reference>
  <!-- Content: xs:schema? -->
</xsl:import-schema>

xsl:import-schema宣言は、(トップレベルタイプ定義とトップレベル要素と属性宣言という)スキーマコンポーネントを識別する為に利用されます。 それは、いくつかのソース文書が利用可能となる前に静的に利用可能にする事が必要です。 このようなコンポーネントの名前は、3.13 ビルトイン(組み込み)タイプで定義したように組み込みタイプにするか、または、xsl:import-schema宣言を利用して取り込まれなければならないかいずれかにしなければならないという意味でスコープ内スキーマコンポーネントを参照しなければならないスタイルシート内で静的に利用しました。

xsl:import-schema宣言は、取り込まれる為にコンポーネントの名前を含んでいる名前空間を識別します (または、取り込まれる為にある名前空間がない名前のコンポーネントを示します)。 その効果は、 XSLT要素type属性とas属性のように構築する他のスタイルシート内で、 また、スタイルシートにあるXPath式内で利用する為に利用可能となるこの名前空間(または、非名前空間)からのトップレベル要素と属性宣言とタイプ定義の名前であるという事です。

同じスキーマコンポーネントは、全てのスタイルシートモジュールの中で利用可能になります; スタイルシートを通してそれらを利用可能にさせるスタイルシートモジュールの中にコンポーネントを取り込む事。

namespaceschema-location属性は、共にオプションです。

もし、xsl:import-schema要素が、xs:schema要素をを含む場合には、 schema-location属性は、カラでなければならず、namespace属性は、その有効な値のケースでは、もし、存在する場合にはxs:schema要素のtargetNamespace属性から成る、または、他方がゼロの長さの文字列にある(もし、存在する場合)xs:schema要素のtargetNamespace属性と同じ値を持つか、または、 カラでなければならないかのいずれかでなければいけません。

[ERR XTSE0215] もし、xsl:import-schema要素が、xs:schema要素がschema-location属性を持つものを含む、 または、もし、それが、含んだスキーマの目標名前空間を伴って干渉するnamespace属性を含む場合には、それは、静的エラーです。

もし、2つのxsl:import-schema宣言が、同じ名前空間を記述するか、または、 もし、双方ともに存在しない名前空間を記述する場合には、 利用される最も高い取り込み優先度を伴う場合に限ります。 もし、これが1つ以上残っている場合には、最も高い取り込み優先度にある全ての宣言が利用されます(以下に記述したように干渉に起因する場合があります)。

上記ルール下で、いくつかのxsl:import-schema宣言を破棄した後、残っているxsl:import-schema宣言のその効果は、統合的なスキーマ文書を呼んだ仮定的な文書の用語の中で定義され、それは、次に続くように構築されます。 統合的なスキーマ文書は、アプリケーションで実際に利用したいくつかの名前空間とは異なる任意の目標名前空間を定義し、 そして、それは、スタイルシートにあるxsl:import-schema宣言を伴う1対1で一致するxs:import要素を含み、次に続く一致を伴います。:

  • xs:import要素のnamespace属性は、もし、それが、不足していれば、暗に存在し、または、含んだxs:schema要素のtargetNamespace属性によって含まれ、且つ不足し、xsl:import-schema宣言のnamespace属性からコピーされます。

  • xs:import要素のschemaLocation属性は、もし、存在する場合には、xsl:import-schema宣言のschema-location属性からコピーされ、もし、存在しない場合には、欠如します。 もし、それらが、xs:schema要素を含んでいる場合には、schemaLocation属性の有効な値は、xs:schema要素のコピーを含んでいる文書を参照しているURIです。

  • xs:import要素の基準URIは、xsl:import-schema宣言の基準URIと同じです。

スコープ内スキーマコンポーネントに含んだ(スタイルシート内で利用する事を可能にする名前を持つコンポーネントである)スキーマコンポーネントは、 トップレベル要素と属性宣言とタイプ定義が、統合的なスキーマ文書内で参照する事を可能とします。 参照:[XML スキーマ Part 1] (セクション 4.2.3、 名前空間をまたぐスキーマコンポーネントを参照する)。

[ERR XTSE0220] もし、統合的なスキーマ文書が、[XML スキーマ Part 1] (セクション 5.1 スキーマ構築と構造におけるエラー)で記述した制約を満たさない場合には、 それは、静的エラーです。 これは、同じ名前の複数の定義のように一般原理を損なうことなく、干渉する事なく、含みます。

注釈:

統合的なスキーマ文書は、現実の手法によって構築される事を必要としません。 それは、XMLスキーマ仕様内に既に存在する規則の用語xsl:import-schemaのセマンティクスを定義する事における純粋なメカニズムです。 特に、それは、xsl:import-schema宣言のセットが、相互に首尾一貫しているかどうかを決める規則を暗黙のうちに定義します。

これらの規則は、推移的に取り込まれる事において名前に起因しません。 実際には、名前が、スキーマ文書Aの目標名前空間を取り込むスタイルシート内でそれ自身が参照する事を可能にする名前にさせるというのではなく、スキーマ文書Aの中で参照する事を可能にします。 (参照先: [XML スキーマ Part 1] セクション 3.15.3 スキーマのXML表現上の制約) スタイルシートは、それが実際に参照する名前を含んでいる名前空間を全て取り込まなければいけません。

与えられる名前空間におけるスキーマを表示するnamespace属性は、スタイルシートによって要求されます。 この情報は、要求したスキーマコンポーネントに位置する手法を利用可能にする為にそれ自身において充分になる場合があります。 namespace属性は、取り込まれている存在しない名前空間にある名前におけるスキーマを示すために省略される場合があります。 ゼロの長さの文字列は、妥当な名前空間URIではありません、それゆえに、namespace属性における妥当な値ではありません。

schema-location属性は、要求した定義を含んでいるスキーマ文書やその他のリソースがが発見される場合がある場合を示しているヒントを与えるURI参照です。 それは、スキーマ用XSLTプロセッサが、この場所で見つけるスキーマ文書を処理する事ができるようなものです。

XMLスキーマ仕様は、同じ名前空間において複数の取り込みをどのように操作するかという中において柔軟な手法を与えます。 複数の取り込みは、もし、定義が干渉しない場合には、エラーの原因ではありません。

これらの規則の結果は、もし、xsl:import-schema宣言内で識別した名前空間において位置決めされる事ができるスキーマ 文書がない場合には、本質的なエラーではありません。 これは、もし、取り込まれていない名前への参照を含んでいるスタイルシートでの結果である場合に限っては、エラーの原因になるでしょう。

あるインライン(行中の・行内の)スキーマ文書(xsl:import-schema要素の子としてxs:schema要素を利用中)は、 外部スキーマ文書と同じ位置づけを持ち、観念としては、相関する名前空間にあるスキーマコンポーネントのソースにおけるヒントとして動作します。 インラインスキーマ文書が、常に利用される事を保証する為には、このスキーマ文書において一意である目標名前空間を利用する事を可能にする事です。

xsl:import-schema宣言にある名前空間の利用は、それ自身が、名前空間を伴う前置詞をいくつかの名前空間と結び付ける事によるものではありません。 もし、名前空間から得られた名前が、スタイルシートモジュール内で利用される場合には、名前空間宣言は、通常の方法でスタイルシートモジュールに含まれなければいけません。

例:行内にあるスキーマ文書

次に続く例は、行内にあるスキーマ文書を示します。 これは、単純なタイプlocal:yes-noを宣言し、スタイルシートは、その際に変数の宣言の中で利用します。

例は、名前空間宣言xmlns:local="http://localhost/ns/yes-no"を用います。

<xsl:import-schema>
	<xs:schema targetNamespace="http://localhost/ns/yes-no"
			 xmlns:xs="http://www.w3.org/2001/XMLSchema">
		<xs:simpleType name="local:yes-no">
			<xs:restriction base="xs:string">
				<xs:enumeration value="yes"/>
				<xs:enumeration value="no"/>
			</xs:restriction>
		</xs:simpleType>
	</xs:schema>
</xsl:import-schema>
<xs:variable name="condition" select="'yes'" as="local:yes-no"/>

4. データモデル / Data Model >>


ホーム前へ次へ