XPath/XQuery 関数: シーケンス

www.altova.com すべてを展開/折りたたむ このトピックを印刷 前のページ 1つ上のレベル 次のページ

ホーム >  付録 > XSLT と XPath/XQuery 関数 > Altova 拡張関数
 >

XPath/XQuery 関数: シーケンス

Altova のシーケンス拡張関数は XPath と XQuery 式で使用することができ、XML スキーマの異なる日付および時刻データ型で保存されているデータを処理するための追加機能を提供します。 このセクションの関数は、Altova の XPath 3.0 および XQuery 3.0 エンジンで使用することができます。これらの関数は、XPath/XQuery コンテキストで使用することができます。

 

関数の名前指定と言語の適用性

Altova 拡張関数はXPath/XQuery 式で使用することができ、 XPath、 XQuery、および XSLT 関数の標準ライブラリで使用可能な機能に更なる機能性を与えます。 Altova 拡張関数はAltova 拡張関数名前空間、 http://www.altova.com/xslt-extensions に収められており、 altova:プレフィックスが、このセクションでは使用されます。製品の今後のバージョンが拡張機能への継続的サポート、または個別の関数の振る舞いは変更する可能性があることに注意してください。 Altova 拡張機能へのサポートに関しては、今後のリリースのドキュメントを参照してください。

 

XPath 関数 (XSLT 内の XPath 式で使用 ):

XP1 XP2 XP3.1

XSLT 関数 (XSLT 内の XPath 式で使用):

Xslt1 XSLT2 XSLT3

XQuery 関数 (XQuery 内の XQuery 式で使用):

XQ1 XQ3.1

 

 

Click to expand/collapseattributes [altova:]

altova:attributes(AttributeName as xs:string) を attribute()* とする         XP3.1 XQ3.1

入力引数 AttributeName 内で与えられた名前と同じローカル名を持つすべての属性を返します。検索は大文字と小文字を区別し、 attribute:: 軸に対して行われます。これは、コンテキストノードが親要素ノードである必要があることを意味します。

altova:attributes("MyAttribute")MyAttribute()* を返します。

 

altova:attributes(AttributeName as xs:string, SearchOptions as xs:string) as attribute()*         XP3.1 XQ3.1

入力引数 AttributeName 内で与えられた名前と同じローカル名を持つすべての属性を返します。検索は大文字と小文字を区別し、 attribute:: 軸に対して行われます。コンテキストノードが親要素ノードである必要があります。第 2 引数はオプションのフラッグを含みます。使用することのできるフラッグは以下の通りです:
r = 正規表現検索を切り替えます; AttributeName は正規表現検索文字列である必要があります;
f = このオプションが指定されている場合、 AttributeName は完全一致を提供します。それ以外の場合は、 AttributeName は属性名に部分的に一致するとその属性を返します。例えば: f が指定されていない場合、 MyAttMyAttribute を返します。
i = 大文字と小文字を一致させる検索に切り替えます。

p = 検索に名前空間プレフィックスを含みます。 AttributeName は、名前空間プレフィックスを含みます。例えば: altova:MyAttribute
フラッグは順序に関わりなく書き込むことができます。無効なフラッグはエラーを生成します。1つまたは複数のフラッグを省略することができます。空の文字列は許可されていますが、引数を1つしか持たない関数と同じ効果を持ちます(前の署名)、ですが、空のシーケンスは第 2 の引数としては許可されていません。

altova:attributes("MyAttribute", "rfip")MyAttribute()* を返します。
altova:attributes("MyAttribute", "pri")MyAttribute()* を返します。
altova:attributes("MyAtt", "rip")MyAttribute()* を返します。
altova:attributes("MyAttributes", "rfip") は不一致を返します。
altova:attributes("MyAttribute", "")MyAttribute()* を返します。
altova:attributes("MyAttribute", "Rip") 認識されないフラッグエラーを返します。
altova:attributes("MyAttribute", ) 見つからない第 2 引数を返します。

 

 

Click to expand/collapseelements [altova:]

altova:elements(ElementName as xs:string) を element()* とする         XP3.1 XQ3.1

入力引数 ElementName で与えられた名前と同じローカル名を持つすべての要素を返します。検索は大文字と小文字を区別して child:: 軸に対して実行されます。コンテキストノードは、検索される要素の親ノードである必要があります。

altova:elements("MyElement")MyElement()* を返します。

 

altova:elements(ElementName as xs:string, SearchOptions as xs:string) as element()*         XP3.1 XQ3.1

入力引数 ElementName 内で与えられた名前と同じローカル名を持つすべての属性を返します。検索は大文字と小文字を区別し、 child:: 軸に対して行われます。コンテキストノードが親要素ノードである必要があります。第 2 引数はオプションのフラッグを含みます。使用することのできるフラッグは以下の通りです:
r = 正規表現検索を切り替えます; ElementName は正規表現検索文字列である必要があります;
f = このオプションが指定されている場合、 ElementName は完全一致を提供します。それ以外の場合は、 ElementName は属性名に部分的に一致するとその属性を返します。例えば: f が指定されていない場合、 MyElemMyElement を返します。
i = 大文字と小文字を一致させる検索に切り替えます。

p = 検索に名前空間プレフィックスを含みます。 ElementName は、名前空間プレフィックスを含みます。例えば: altova:MyElement
フラッグは順序に関わりなく書き込むことができます。無効なフラッグはエラーを生成します。1つまたは複数のフラッグを省略することができます。空の文字列は許可されていますが、引数を1つしか持たない関数と同じ効果を持ちます(前の署名)、ですが、空のシーケンスは第 2 の引数としては許可されていません。

altova:elements("MyElement", "rip")MyElement()* を返します。
altova:elements("MyElement", "pri")MyElement()* を返します。
altova:elements("MyElement", "")MyElement()* を返します。
altova:attributes("MyElem", "rip")MyElement()* を返します。
altova:attributes("MyElements", "rfip") 不一致を課wします。
altova:elements("MyElement", "Rip") 認識されないフラッグエラーを返します。
altova:elements("MyElement", ) 見つからない第 2 引数を返します。

 

 

Click to expand/collapsefind-first [altova:]

altova:find-first((Sequence as item()*)(Condition( Sequence-Item as xs:boolean)) を item()? とする         XP3.1 XQ3.1

この関数は 2 つの引数を必要とします。最初の引数は 1 つ、または 1 つ以上のデータ型のアイテムのシーケンスです。第 2 の引数Condition は、( 1 のアリティを持つ) 1 つの引数 を必要とし、boolean を返す XPath 関数に対する参照です。 Condition で参照された関数の代わりに、 Sequence の各アイテムが提出されます。(注意: この関数は 1 つの引数のみを必要とします。) Condition 内の関数に true()と評価させる最初の Sequence アイテムは、altova:find-first、 反復の終了の結果として返されます。

altova:find-first(5 to 10, function($a) {$a mod 2 = 0})xs:integer 6 を返します。

Condition 引数は、 $a という名のインライン関数を宣言し、定義します。 XPath 3.0 インライン関数 function()を参照します。altova: Sequence  引数内の各アイテムでは、 find-first がパスされ、 代わりに、 $a を入力値とします。入力値は関数定義($a mod 2 = 0)内の条件に対してテストされます。この条件を満たす最初の入力値が altova:find-first (この場合は 6) の結果として返されます。

 

altova:find-first((1 to 10), (function($a) {$a+3=7}))xs:integer 4 を返します。

 

 

更なるサンプル

ファイル C:\Temp\Customers.xml が存在する場合:

 

altova:find-first( ("C:\Temp\Customers.xml", "http://www.altova.com/index.html"), (doc-available#1) )xs:string C:\Temp\Customers.xml を返します。

 

ファイル C:\Temp\Customers.xml が存在せず、 http://www.altova.com/index.html が存在する場合:

 

altova:find-first( ("C:\Temp\Customers.xml", "http://www.altova.com/index.html"), (doc-available#1) )xs:string http://www.altova.com/index.html を返します。

 

ファイル C:\Temp\Customers.xml が存在せず、 http://www.altova.com/index.html も存在しない場合:

 

altova:find-first( ("C:\Temp\Customers.xml", "http://www.altova.com/index.html"), (doc-available#1) ) 結果無しを返します。

 

上のサンプルについての注意点

XPath 3.0 関数 doc-available は URI として使用され、ドキュメントノードが提出された URI で検出される場合 true を返する単一の引数を必要とします。 (ですから、提出された URI でのドキュメントは XML ドキュメントである必要があります。)
doc-available 関数は、altova:find-first の第 2 引数である、Condition で使用することができます。これは、 1 つの引数  (アリティ=1) のみを必要とするからであり、item()を入力( URI として使用される文字列) として、 boolean の値を返すからです。
doc-available 関数は、参照されているだけで、呼び出されていない点に注意してください。アタッチされている #1 サフィックスは関数が 1 つのアリティであることを表示するためです。 doc-available#1 の意味は以下のとおりです: アリティ=1 を持つ doc-availabe() 関数を使用し、最初のシーケンスの各アイテムの代わりに,単一引数としてパスします。  この結果、 2 つの文字列の各自つは、文字列をURIとして使用し、URIにドキュメントノードが存在するかテストする doc-available()にパスされます。1 つが各当する場合、 doc-available() 関数は true() を評価し、シーケンス内のその文字列のインデックス ポジションは、 altova:find-first 関数の結果として返されます。 doc-available() 関数に関しての注意点: 相対パスは、デフォルトで関数がロードされる XML ドキュメントの現在のベース URI に対して相対的に解決されます。

 

 

 

Click to expand/collapsefind-first-combination [altova:]

altova:find-first-combination((Seq-01 as item()*)(Seq-02 as item()*), (Condition( Seq-01-Item, Seq-02-Item as xs:boolean)) を item()* とする         XP3.1 XQ3.1

この関数は 3 つの引数を必要とします:

 

最初の 2 つの引数 Seq-01Seq-02, は、1 つまたは1 つ以上のデータ型のアイテムです。
第 3 の引数 Condition は、(2 のアリティを持つ) 2 つの引数を必要とし、 boolean を返す XPath 関数に対しての参照です。

 

Seq-01Seq-02 のアイテムは指定された組み合わせ(各シーケンスからの1つずつにアイテムで構成されるペア)で、 Condition 内の関数の引数としてパスされました。組み合わせは以下のように指定されています。

If   Seq-01 = X1, X2, X3 ... Xn

And  Seq-02 = Y1, Y2, Y3 ... Yn

Then (X1 Y1), (X1 Y2), (X1 Y3) ... (X1 Yn), (X2 Y1), (X2 Y2) ... (Xn Yn)

 

Condition 関数に true() と評価するように指示する最初のペアはaltova:find-first-combination の結果として返されます。以下の点に注意してください: (i) Condition 関数が提出された引数ペア内で繰り返され、 true()を評価しない場合、 altova:find-first-combination は、結果を返しません; (ii) altova:find-first-combination の結果が常に(データ型の)アイテムのペアである場合またはアイテムでない場合。

 

altova:find-first-combination(11 to 20, 21 to 30, function($a, $b) {$a+$b = 32})xs:integers (11, 21) のシーケンスを返します。
altova:find-first-combination(11 to 20, 21 to 30, function($a, $b) {$a+$b = 33})xs:integers (11, 22) のシーケンを返します。
altova:find-first-combination(11 to 20, 21 to 30, function($a, $b) {$a+$b = 34})xs:integers (11, 23) のシーケンを返します。

 

 

Click to expand/collapsefind-first-pair [altova:]

altova:find-first-pair((Seq-01 as item()*)(Seq-02 as item()*), (Condition( Seq-01-Item, Seq-02-Item as xs:boolean)) を item()* とする         XP3.1 XQ3.1

この関数は 3 つの引数を必要とします:

 

最初の 2 つの引数 Seq-01Seq-02, は、1 つまたは1 つ以上のデータ型のアイテムです。
第 3 の引数 Condition は、(2 のアリティを持つ) 2 つの引数を必要とし、 boolean を返す XPath 関数に対しての参照です。

 

Seq-01Seq-02 のアイテムは指定された組み合わせで、 Condition 内の関数の引数としてパスされました。組み合わせは以下のように指定されています。

If   Seq-01 = X1, X2, X3 ... Xn

And  Seq-02 = Y1, Y2, Y3 ... Yn

Then (X1 Y1), (X2 Y2), (X3 Y3) ... (Xn Yn)

 

Condition 関数に true() と評価するように指示する最初のペアはaltova:find-first-pair の結果として返されます。以下の点に注意してください: (i) Condition 関数が提出された引数ペア内で繰り返され、 true()を評価しない場合、 altova:find-first-pair は、結果を返しません; (ii) altova:find-first-combination の結果が常に (データ型の) アイテムのペアである場合またはアイテムでない場合。

 

altova:find-first-pair(11 to 20, 21 to 30, function($a, $b) {$a+$b = 32})xs:integers (11, 21) のシーケンスを返します。
altova:find-first-pair(11 to 20, 21 to 30, function($a, $b) {$a+$b = 33})結果無しを返します。

 

上の 2 つのサンプルに表示される通り、ペアの順序は以下の通りです: (11, 21) (12, 22) (13, 23)...(20, 30) 。( 33 を返す指示されたペアがないため) この理由で第 2 のサンプルは 結果無しを返します。

 

 

Click to expand/collapsefind-first-pair-pos [altova:]

altova:find-first-pair-pos((Seq-01 as item()*)(Seq-02 as item()*), (Condition( Seq-01-Item, Seq-02-Item as xs:boolean)) を xs:integer とする         XP3.1 XQ3.1

この関数は 3 つの引数を必要とします:

 

最初の 2 つの引数 Seq-01Seq-02, は、1 つまたは1 つ以上のデータ型のアイテムです。
第 3 の引数 Condition は、(2 のアリティを持つ) 2 つの引数を必要とし、 boolean を返す XPath 関数に対しての参照です。

 

Seq-01Seq-02 のアイテムは指定された組み合わせで、 Condition 内の関数の引数としてパスされました。組み合わせは以下のように指定されています。

If   Seq-01 = X1, X2, X3 ... Xn

And  Seq-02 = Y1, Y2, Y3 ... Yn

Then (X1 Y1), (X2 Y2), (X3 Y3) ... (Xn Yn)

 

Condition 関数に true()を評価させる、最初に指示されたペアのインデックス ポジションは、は altova:find-first-pair-pos の結果として返されます。関数が提出された引数ペア内で繰り返され、 true()を一度も評価しない場合、 altova:find-first-pair-pos 結果無しが返します。

 

altova:find-first-pair-pos(11 to 20, 21 to 30, function($a, $b) {$a+$b = 32})1 を返します
altova:find-first-pair-pos(11 to 20, 21 to 30, function($a, $b) {$a+$b = 33})  は結果無しを返します。

 

上の 2 つのサンプルに表示される通り、ペアの順序は以下の通りです: (11, 21) (12, 22) (13, 23)...(20, 30)。最初のサンプルでは、最初のペアは Condition 関数に true()を評価させ、シーケンス内のインデックス ポジションには 1 が返されます。第 2 のサンプルでは、 33 を返すペアがないため、結果無しが返します。

 

 

Click to expand/collapsefind-first-pos [altova:]

altova:find-first-pos((Sequence as item()*)(Condition( Sequence-Item as xs:boolean)) を xs:integer とする         XP3.1 XQ3.1

この関数は 2 つの引数を必要とします。最初の引数は 1 つ、または 1 つ以上のデータ型のアイテムのシーケンスです。第 2 の引数 Condition は、( 1 のアリティを持つ) 1 つの引数 を必要とし、boolean を返す XPath 関数に対する参照です。 Condition で参照された関数の代わりに、 Sequence の各アイテムが提出されます。(注意: この関数は 1 つの引数のみを必要とします。) Condition 内の関数に true()と評価させる最初の Sequence アイテムは、 altova:find-first-pos の結果として返された Sequence 内インデックス ポジションを持ちます。

altova:find-first-pos(5 to 10, function($a) {$a mod 2 = 0})xs:integer 2 を返します。

Condition 引数は、 $a という名のインライン関数を宣言し、定義します。 XPath 3.0 インライン関数 function()を参照します。 Sequence  引数内の各アイテムでは、 find-first-pos がパスされ、 代わりに、 $a を入力値とします。入力値は関数定義($a mod 2 = 0)内の条件に対してテストされます。この条件を満たす最初の入力値が altova:find-first-pos ( (シーケンス内で)条件を満たす最初の値である 6 がシーケンスのインでクス位置 2 にあるためこの場合は 2、) の結果として返されます。

 

altova:find-first-pos((2 to 10), (function($a) {$a+3=7}))xs:integer 3 を返します。

 

 

更なるサンプル

ファイル C:\Temp\Customers.xml が存在する場合:

 

altova:find-first-pos( ("C:\Temp\Customers.xml", "http://www.altova.com/index.html"), (doc-available#1) )1  を返します。

 

ファイル C:\Temp\Customers.xml が存在せず、 http://www.altova.com/index.html が存在する場合:

 

altova:find-first-pos( ("C:\Temp\Customers.xml", "http://www.altova.com/index.html"), (doc-available#1) )2 を返します。

 

ファイル C:\Temp\Customers.xml が存在せず、 http://www.altova.com/index.html も存在しない場合:

 

altova:find-first-pos( ("C:\Temp\Customers.xml", "http://www.altova.com/index.html"), (doc-available#1) ) 結果無しを返します。

 

上のサンプルについての注意点

XPath 3.0 関数 doc-available は URI として使用され、ドキュメントノードが提出された URI で検出される場合 true を返する単一の引数を必要とします。 (ですから、提出された URI でのドキュメントは XML ドキュメントである必要があります。)
doc-available 関数は、altova:find-first-pos の第 2 引数である、Condition で使用することができます。これは、 1 つの引数  (アリティ=1) のみを必要とするからであり、item()を入力( URI として使用される文字列) として、 boolean の値を返すからです。
doc-available 関数は、参照されているだけで、呼び出されていない点に注意してください。アタッチされている #1 サフィックスは関数が 1 つのアリティであることを表示するためです。 doc-available#1 の意味は以下のとおりです: アリティ=1 を持つ doc-availabe() 関数を使用し、最初のシーケンスの各アイテムの代わりに,単一引数としてパスします。  この結果、 2 つの文字列の各自つは、文字列をURIとして使用し、URIにドキュメントノードが存在するかテストする doc-available()にパスされます。1 つが各当する場合、 doc-available() 関数は true() を評価し、シーケンス内のその文字列のインデックス ポジションは、 altova:find-first-pos 関数の結果として返されます。 doc-available() 関数に関しての注意点: 相対パスは、デフォルトで関数がロードされる XML ドキュメントの現在のベース URI に対して相対的に解決されます。

 

 

Click to expand/collapsefor-each-attribute-pair [altova:]

altova:for-each-attribute-pair(Seq1 as element()?Seq2 as element()?, Function as function()) as item()*         XP3.1 XQ3.1

ペアの一つの属性が最初の要素を取得し、もう一つの属性が2番目の要素から取得された箇所で、最初の2つの引数は、2つの要素、および、属性ペアを作成するために使用された属性を識別します。要素ペアは同じ名前を持つことをベースに選択され、ペアは(名前別に) アルファベット順にセットに並べ替えられます。 属性のために他の要素上に対応する属性が存在しない場合、ペアのジョイントは解除されます。これは、一つのメンバーにより飲み構成されることを意味します。関数アイテム (3番目の引数 Function) はアイテムのシーケンスである出力であるペアのシーケンス内のペア (ジョイント、ジョイントの解除) に個別に適用されます。

altova:for-each-attribute-pair(/Example/Test-A, /Example/Test-B, function($a, $b){$a+b}) は以下 を返します。 ...

 

  (2, 4, 6) if

   <Test-A att1="1" att2="2" att3="3" />

   <Test-B att1="1" att2="2" att3="3" />

 

  (2, 4, 6) if

   <Test-A att2="2" att1="1" att3="3" />

   <Test-B att3="3" att2="2" att1="1" />

 

  (2, 6) if

   <Test-A att4="4" att1="1" att3="3" />

   <Test-B att3="3" att2="2" att1="1" />

 

    メモ: 結果 (2, 6) は次のアクションにより取得されます: (1+1, ()+2, 3+3, 4+()) 。演算子の一つが空のシーケンスの場合、アイテム 2 と 4 の場合同様、結果は空のシーケンスになります。

 

altova:for-each-attribute-pair(/Example/Test-A, /Example/Test-B, concat#2) は以下を返します。

 

  (11, 22, 33) if

   <Test-A att1="1" att2="2" att3="3" />

   <Test-B att1="1" att2="2" att3="3" />

 

  (11, 2, 33, 4) if

   <Test-A att4="4" att1="1" att3="3" />

   <Test-B att3="3" att2="2" att1="1" />

 

 

Click to expand/collapsefor-each-combination [altova:]

altova:for-each-combination(FirstSequence as item()*SecondSequence as item()*function($i,$j){$i || $j} ) を item()* とする         XP3.1 XQ3.1

第 3 の引数として与えられた、インライン関数を返します。FirstSequence 内の各 $iSecondSequence内の各 $j と結合します。出力はこれらのアイテムのシーケンスです。

altova:for-each-combination( ('a', 'b', 'c'), ('1', '2', '3'), function($i, $j){$i || $j} )('a1', 'a2', 'a3', 'b1', 'b2', 'b3', 'c1', 'c2', 'c3') を返します。

 

 

Click to expand/collapsefor-each-combination [altova:]

altova:for-each-combination(FirstSequence as item()*SecondSequence as item()*Function($i,$j){$i || $j} ) as item()*         XP3.1 XQ3.1

最初の2つの引数内の2つのシーケンスのアイテムは最初のシーケンスの各アイテムが2番目のシーケンスになるように結合されるように結合されます。3番目の引数として与えられる関数は結果のシーケンス内の組み合わせに適用され、アイテムのシーケンスである出力内で出力されます  (サンプル参照)。

altova:for-each-combination( ('a', 'b', 'c'), ('1', '2', '3'), function($i, $j){$i || $j} )('a1', 'a2', 'a3', 'b1', 'b2', 'b3', 'c1', 'c2', 'c3') を返します。

 

 

Click to expand/collapsesubstitute-empty [altova:]

altova:substitute-empty(FirstSequence as item()*SecondSequence as item()) を item()* とする         XP3.1 XQ3.1

FirstSequence が空の場合、 SecondSequence を返します。FirstSequence が空でない場合、 FirstSequence を返します。

altova:substitute-empty( (1,2,3), (4,5,6) )(1,2,3) を返します。
altova:substitute-empty( (), (4,5,6) )(4,5,6) を返します。

 

 

 


(C) 2019 Altova GmbH