ソート式には、テキスト式、属性式または単一行関数指定が指定できます。それぞれに対して取出し順序(昇順または降順)を指定できます。“,”で区切って複数指定することができます。
ソート式の定義を以下の図に示します。
図B.17 ソート式の定義
注意
ソート式には、キー指定を8個まで指定できます。
以下にソート式で定義する項目について説明します。
テキスト式は、ソートを行うキーとなるテキストノードを指定します。
テキスト式の詳細については、“B.2.2 テキスト式”を参照してください。
テキスト式中にパス演算子“//”は指定できません。
テキスト式中にパス要素“*”は指定できません。
/company/employee/dept/text()
単一行関数指定は、単一行関数の結果でソートを行いたい場合に指定します。
単一行関数指定の詳細については、“B.2.4 単一行関数指定”を参照してください。
rlen(/company/name/text(),16)
rlen(/company/employee/@position,16)
属性式は、ソートを行うキーとなる属性ノードを指定します。
属性式の詳細については、“B.2.3 属性式”を参照してください。
属性式中にパス演算子“//”は指定できません。
属性式中にパス要素“*”は指定できません。
属性式で指定する属性名に“*”は指定できません。
/company/employee/@position
テキスト式を指定すると、テキスト式が示すテキストノードが持つ文字列でソートを行います。
テキスト式で指定したテキストノードが持つ文字列は、左端から20バイトが有効です。有効長を変更したい場合はrlen関数を利用して文字数を変更します。指定できる文字数は1~128です。
テキスト式で指定したテキストノードが持つ文字列に含まれる空白、全角空白、改行コードおよびタブは有効な値として区別します。
テキスト式で指定したテキストノードが同一文書中に複数存在する場合は、先頭のテキストノードを利用します。
テキスト式で指定したテキストノードが文書中にない場合は、取出し順序の指定にかかわらず、最後に返却します。
数値としてソートしたい場合は、val関数を指定します。val関数を指定すると数値としてデータを扱うため、桁合わせの必要がありません。
属性式を指定すると、属性式が示す属性ノードが持つ文字列でソートを行います。
属性式で指定した属性ノードが持つ文字列は、左端から20バイトが有効です。有効長を変更したい場合はrlen関数を利用して文字数を変更します。指定できる文字数は1~128です。
属性式で指定した属性ノードが持つ文字列に含まれる空白、全角空白、改行コードおよびタブは有効な値として区別します。
属性式で指定した属性ノードが同一文書中に複数存在する場合は、先頭の属性ノードを利用します。
属性式で指定した属性ノードが文書中にない場合は、取出し順序の指定にかかわらず、最後に返却します。
数値としてソートしたい場合は、val関数を指定します。val関数を指定すると数値としてデータを扱うため、桁合わせの必要がありません。
以下に示す2つの文書を文字列としてソートすると“100”よりも“20”の方が大きくなります。ソート式にval(/value/text())と指定すると、100および20といった数値でソートするため、20よりも100の方が大きくなります。
<value>100</value>
<value>20</value>
テキスト式を指定すると、テキスト式が示すテキストノードが持つ文字列が同じ文書を、1つのグループとして扱います。
テキスト式で指定したテキストノードが持つ文字列は、左端から20バイトが有効です。有効長を変更したい場合は、rlen関数を利用して文字数を変更します。指定できる文字数は1~128です。
テキスト式で指定したテキストノードが持つ文字列に含まれる空白、全角空白、改行コードおよびタブは有効な値として区別します。
テキスト式で指定したテキストノードが同一文書中に複数存在する場合は、先頭のテキストノードを利用します。
テキスト式で指定したテキストノードが文書中にない場合は、値のないグループキーを持つ1つのグループとして扱います。
数値をキーとして集計したい場合は、val関数を指定します。val関数を指定すると数値としてデータを扱うため、文字列に数値以外を含む場合や、小数点以下の位取りが異なる場合でも、数値が同じものは同じグループとして扱うことができます。
属性式を指定すると、属性式が示す属性ノードが持つ文字列が同じ文書を、1つのグループとして扱います。
属性式で指定した属性ノードが持つ文字列は、左端から20バイトが有効です。有効長を変更したい場合は、rlen関数を利用して文字数を変更します。指定できる文字数は1~128です。
属性式で指定した属性ノードが持つ文字列に含まれる空白、全角空白、改行コードおよびタブは有効な値として区別します。
属性式で指定した属性ノードが同一文書中に複数存在する場合は、先頭の属性ノードを利用します。
属性式で指定した属性ノードが文書中にない場合は、値のないグループキーを持つ1つのグループとして扱います。
数値をキーとして集計したい場合は、val関数を指定します。val関数を指定すると数値としてデータを扱うため、文字列に数値以外を含む場合や、小数点以下の位取りが異なる場合でも、数値が同じものは同じグループとして扱うことができます。
以下に示す2つの文書を/doc/key/text()をキーとして集計すると、それぞれ別グループになります。ソート式にval(/doc/key/text())と指定すると、どちらも1000という数値として扱うため同じグループとして集計します。
<doc> <key>net1000.00g</key> <ship>2000個</ship> </doc> |
<doc> <key>1,000g</key> <ship>1000個</ship> </doc> |