•XPath 1.0 関数は名前空間プレフィックス無しで入力する必要があります。
•4つのノードテストがサポートされています: node(), text(), comment(), と processing-instruction()。
•字列(例: 'Hello')や数値リテラル(例: 256)がサポートされます。XML スキーマ型をベースにしたその他のリテラルを作成するには、名前空間プレフィックスによるコンストラクター(例: xs:date('2004-09-02'))を使用します。XML スキーマ型に使用する名前空間プレフィックスは、XML 名前空間 http://www.w3.org/2001/XMLSchema に関連付けられている必要があり、その名前空間も XML ファイル内で宣言されている必要があります。
•XPath の評価で使用される XPath 2.0 および XPath 3.1 関数は、名前空間 http://www.w3.org/2005/xpath-functions に所属しています。に所属しています。プレフィックス fn: は、慣習的にこの名前空間に関連付けられています。この名前空間は XPath の評価で使用されるデフォルトの関数名前空間で、関数にプレフィックスを与える必要はありません。プレフィックスを使用する場合は、そのプレフィックスが XML ドキュメント内で宣言されている XPath 関数の名前空間に関連付けられていることを確認してください。 関数使用の例: current-date() (関数の名前空間は XML ドキュメント内で宣言されていない)、fn:current-date() (関数名前空間が XML ドキュメント内で宣言されていないか、XML ドキュメント内で宣言されており、プレフィックス fn: に関連付けられています)。XML ドキュメント内で 関数名前空間が宣言されている場合でも、名前空間プレフィックスを省略することができます。この場合、その XPath 条件式で使用される関数は、関数のデフォルト名前空間のものとなります。
•Altova XPath 拡張子は名前空間 http://www.altova.com/xslt-extensions 内にあります。
| メモ: | 名前空間に関する点を要約すると、XML スキーマ名前空間からコンストラクターを使用する場合、XML ドキュメント内で XML スキーマ名前空間を宣言し、XPath 条件式では正しい名前空間プレフィックスを使用する必要がある、ということになります。XPath 関数に対してプレフィックスを使用する必要はありません。 |
XML スキーマを参照している XML ドキュメントに対して、XPath 2.0 および 3.1 条件式を評価しており、その XML ドキュメントが(スキーマに対して)妥当である場合、オペレーションにより暗黙的に目的のデータ型に変換されないデータ型に対して、コンストラクターまたはキャストを明示的に使用する必要があります。内蔵の XPath エンジンにより使用される XPath データモデルでは、XML ドキュメントから細分化されたノード値には全て、xs:untypedAtomic データ型が割り当てられています。xs:untypedAtomic 型は暗黙の型変換で通常上手く機能します。例えば、xs:untypedAtomic("1") + 1 という条件式の結果は、xs:untypedAtomic 値が加算演算子により、暗黙的に xs:double に変換されるため、 2 となります。算術演算子は、オペランドを暗黙的に xs:double に変換します。比較演算子は、比較の前に、オペランドを xs:string に変換します。
目的のデータ型への明示的な変換を行う必要がある場合もあります。例えば、2つの要素 startDate と endDate があり、XML スキーマにて両者とも xs:date 型で定義されている場合、endDate - startDate という XPath 2.0 条件式ではエラーが発生します。この場合、xs:date(endDate) - xs:date(startDate) または (endDate cast as xs:date) - (startDate cast as xs:date) とすることで、xs:dayTimeDuration 型のシングルトンシーケンスが正しく評価されます。
| メモ: | XPath の評価で使用される XPath エンジンは、Altova XSLT エンジンで使用されるものと同一のもので、XSLT スタイルシート内で目的のデータ型に暗示的に変換されない XPath 2.0 および 3.1 |
文字ならびにエンティティ参照が、string-length() 関数の入力文字列として使用される場合、参照を解決することはできず、解決されていないテキスト文字列の長さが返されます。しかし XSLT 環境において、これら参照は意味を持つことになり、解決された文字列の長さが返されます。
付録を参照ください。