パスとは、XMLノードツリー中の特定のノードまたはノードの集合を指すための記述です。
パスは、XQuery式によって取り出すノードを特定し、絞り込む条件の対象となるノードを指定するために使用します。
パス ::= 絶対パス | 相対パス 絶対パス ::= ルート | パス演算子 相対パス 相対パス ::= パス要素 | パス要素 パス演算子 相対パス パス演算子 ::= '/' | '//' ルート ::= '/' パス要素 ::= ノード | ノード フィルタ ノード ::= '.' | '*' | '@*' | 要素名 | '@' 属性名 | 'text()'
パスは、ファイルシステム上のファイルをパス名によって特定するのと似た方法で、XMLノードツリー中のノードを特定します。
要素ノードまたは属性ノードの名前を、パス演算子“/”で順に連結することで、あるノードの子ノードを特定します。
ノードはそれぞれ以下の種別のノードを表します。
「'*'」、「要素名」の表すノード種別は要素ノードです。
「'@*'」、「'@'属性名」の表すノード種別は属性ノードです。
「'text()'」の表すノード種別はテキストノードです。
「'.'」の表すノード種別はカレントノードと同じノード種別です。
参考
ノードの'.'の指定は、パスの先頭、'.'のみ記述する場合、およびパスの最後の'//'の後に指定可能です。
パスの途中に'.'を指定する場合は、'.'を省略した表記方法で記述することで、同じ意味を持つ以下の表記方法となります。
/A/./B ↓同じ意味 /A/B
/./A/B ↓同じ意味 /A/B
パスの先頭が“/”で始まる場合は、XMLデータノードからのパス指定となります。“/”だけで示したパスはXMLデータノード、つまり、XMLデータ自身を指します。
たとえば、以下のパスは「ルート要素である“A要素”配下にある、“B要素”」を表しています。
/A/B
属性ノードの名前を指定する場合は、属性名の先頭に“@”を付加して指定します。
たとえば、以下のパスは「ルート要素である“A要素”の“属性C”」を表します。
/A/@C
パス演算子として“/”ではなく“//”を使用した場合は、演算子の左辺で示すノード配下の任意の階層にあるノードを示します。
たとえば、以下のパスは“/A/B/D”にも“/A/D”にも一致します。
/A//D
また、ある要素ノードとその配下の任意の要素ノードを指定するには、要素名の後に“//.”と指定します。たとえば“/A//.”は“/A”にも“/A/B”にも“/A/B/C”にも一致します。
パスが“//”で始まる場合は、XMLデータ中の任意の位置にあるノードを示します。
パスの先頭が“/”以外で始まる場合は、カレントノードからのパス指定となります。カレントノードはそのパスを解釈する文脈で決まります。
パス要素“.”はカレントノードを表します。
したがって、パスが“/”または“.”以外で始まるパスは、先頭に“./”を補ったものと等価になります。
たとえば以下の2つのパスは等価になります。
./A
A
パスの先頭が、“.”で始まる場合は、カレントノードは、そのパスを解釈する文脈で決まります。
rdbunlxコマンドでは、XQuery式指定時のカレントノードはXMLデータノードであるので、以下の2つのXQuery式は等価になります。
/
.
パスの先頭の“./”は省略可能です。“/”または“.”で始まらないパスは、先頭に“./”を補って解釈します。
たとえば、以下の2つのパスは等価になります。
./A
A
パス要素として“*”を使用した場合は、その階層のすべての要素ノードを示します。また、パス要素として“@*”を使用した場合は、その階層のすべての属性ノードを示します。
たとえば、以下のパスは「A要素配下の全属性」を表します。
A/@*
以下のパスは、「A要素配下の孫要素であるC要素」を表します。
A/*/C
XQuery式はデータベースに格納しているXMLデータの要素や属性の名前空間を認識しません。
データベースに格納しているXMLデータの要素名や属性名が接頭辞で修飾された名前の場合、検索式のパスに指定する要素名や属性名も接頭辞で修飾して指定します。
注意
ノード“*”の後にパス演算子“//”は指定できません。
パス演算子“//”のあとにノード“*”は指定できません。