XPath 関数の定義

www.altova.com このトピックを印刷 前のページ 1つ上のレベル 次のページ

ホーム >  SPS ファイル: 追加機能 > ユーザー定義 XPath 関数 >

XPath 関数の定義

ユーザー定義 XPath 関数には、(i) 名前(テキスト文字列)と、(ii) 定義(XPath 条件式)の両方が必要になります。

 

更に、関数に対して1つ以上の引数(パラメータ)を指定することができます。ユーザー定義 XPath 関数には戻り値の型を(戻り値の型コンボボックスのドロップダウンリストから型を選択することにより)オプションとして指定することもできます。データ型を指定することにより、戻り値の値が選択されたデータ型に従ったものなのかをチェックすることができます。選択されたデータ型に戻り値が変換される訳ではない点に注意してください。型のミスマッチが発生した場合、エラーが返されます。戻り値のデータ型が指定されなかった場合、データ型のチェックが行われることはありません。

 

ユーザー定義 XPath 関数が作成されると、デザイン内の任意の場所で使用することができるようになります。XSLT スタイルシートでは、(以下に示されるように)xsl:stylesheet 要素の子要素である xsl:function 要素として作成されます。

 

<xsl:stylesheet>

   ...

   <xsl:function name="sps:Stock">

 <xsl:sequence select="$XML/Trades/Stock[@name=$XML/Trades/Selection/Stock]"/>

   </xsl:function>

   <xsl:function name="sps:Average" as="xs:decimal">

 <xsl:param name="a" as="xs:integer"/>

 <xsl:param name="b" as="xs:integer"/>

 <xsl:param name="c" as="xs:integer"/>

 <xsl:sequence select="avg( ($a, $b, $c) )"/>

  </xsl:function>

</xsl:stylesheet>

 

以下のスクリーンショットに示される sps:Stock 関数からは、/Trades/Selection/Stock 要素のコンテンツにマッチする name 属性の値を持った /Trades/Stock 要素が返されます。上に示される sps:Average 関数からは、3つの入力パラメーター値の平均が返されます。関数の定義では、avg() という XPath 2.0 の関数が使用されます。戻り値のデータ型には avg() 関数において入力値の xs:integer データ型の値が評価された際に返される xs:decimal が指定されています。戻り値のデータ型を指定することで、値がそのデータ型に従ったものであるかのチェックが行われ、そうでない場合はエラーが返されます。

 

XPFxDlg01

 

関数の定義

関数の定義を行うには、スキーマツリーまたはデザインツリーにある XPath 関数アイテムのPlusアイコンをクリックします(上のスクリーンショットを参照)。既に作成された関数を編集するには、サイドバーに表示されている XPath 関数をダブルクリックしてください。関数の名前を入力して、その定義を関数のボディーペインに入力します。必要な場合は、引数の定義も行うことができます(詳細については、 パラメーターとシーケンスパラメーターとノード のセクションを参照ください)。関数の戻り値に対してデータ型を指定することもできます。

 

XPath 関数を構成する XPath 条件式を記述する際に最も注意すべき点は、XPath 条件式に対してコンテキストノードが与えられていないということです。XPath 条件式によりノードの位置を特定する必要がある場合、以下の方法のどれかによりコンテキストノードを得ることができます:

 

1.XPath 条件式をドキュメントのルートから開始します。ドキュメントルートは、$XML という XPath 条件式により与えられます。例えば、$XML/Trades/Stock[1] という XPath 条件式により、/Trades 要素以下にある最初の Stock 子要素が選択されます。メインスキーマのドキュメントルートを表す $XML という変数は、StyleVision にある全ての SPS デザインにてグローバルに定義されています。
2.引数にコンテキストノードを与えることができます。詳細については、パラメーターとノード を参照してください。

 

以下のような状況で、エラーが返されます:

 

引数が定義されているが、関数のボディーで使用されていない場合。
関数により返される値のデータ型が、関数にて定義された戻り値の型にマッチしない場合。
SPS 内にある関数のどれかにエラーが含まれる場合、(エラーを含む関数が呼び出されない場合でも)デザイン全体に対して XSLT エラーが生成されます。この場合、ユーザー定義 XPath 関数のリストにあるチェックボックスのチェックを外すことで、関数を無効化することができます。デザインにて無効化された関数は、デザインから生成された XSLT ドキュメントに含まれません。これにより、エラーを含む XPath 条件式を XSLT に含めず、XSLT エラーを回避することができます。

 


(C) 2019 Altova GmbH