照合による処理
XSLT スタイルシートや、XQuery および XPath の式は、照合 URI を使用したさまざまな照合を参照できます。 照合とは、国/地域別環境に応じたルールの組み合わせです。ここには、テキストのソート方法や、2 つのテキスト部分の差異で重要と見なされるものとそうでないものが定義されています。
始める前に
この項目では、java.util.Locale クラスと java.text.Collator クラスに関する基礎知識があることが前提となります。
このタスクについて
プロセッサーが照合 URI を解釈することはまずありません。プロセッサーは、照合 URI を、単にその URI に関連する Java™ Collator クラスのインスタンスを示す一種の名前として扱います。 XML API は、作成時にデフォルトの照合 URI となるものを指定し、実行時に Java Collator クラスのインスタンスを照合 URI に関連付けるメカニズムを提供します。
XML API を通じて指定されたすべての照合 URI は、絶対 URI 参照でなければなりません。 XSLT スタイルシートや、XQuery または XPath 式では、照合 URI が必要なコンテキスト内で使用される相対 URI 参照は、その式の静的コンテキストからの基本 URI に対して解決されます。このことから、スタイルシートまたは式の相対 URI 参照でも、XML API を通じて指定された絶対 URI 参照と一致させることができます。
- 照合 URI が java.text.RuleBasedCollator のインスタンスでない Java Collator クラスのインスタンスでバインドされている場合、特定の操作はその照合 URI では許可されません。 特に、fn:starts-with、fn:ends-with、fn:contains、fn:substring-before、および fn:substring-after 関数は、その照合 URI ではサポートされません。
- Java ランタイム環境に現在組み込まれている Collator のすべてのインスタンスは java.text.RuleBasedCollator のインスタンスでもあるため、ほとんどの目的で単なる理論的な制限となります。 ただし、あるアプリケーションが Java Collator クラスの独自のインスタンスを定義しているか、または java.text.RuleBasedCollator のインスタンスでもない Collator クラスのサブクラスを定義しているかどうかは認識しています。
手順
- デフォルトの照合 URI を宣言します。
XStaticContext インターフェースで setDefaultCollation メソッドを使用して、 ストリング比較演算のデフォルトとして使用する照合 URI を指定できます。 XStaticContext インターフェースからのデフォルトの照合 URI は、照合 URI を明示的に指定しないストリング比較演算で照合 URI として使用されます。
XQuery 式は、デフォルトの照合宣言を示す XStaticContext インターフェースで指定されたデフォルトの照合 URI をオーバーライドできます。 同様に、XSLT スタイルシートは、[xsl:]default-collation 属性をもつデフォルトの照合 URI をオーバーライドできます。 XPath には、デフォルトの照合 URI をオーバーライドする手段はありません。 ただし、ストリング比較演算を実行する XPath 式や XQuery 式、または XSLT スタイルシートでは、デフォルトの照合 URI をオーバーライドする明示的な照合 URI を指定できます。
XSLT スタイルシートや、XQuery または XPath 式の作成時に指定する XStaticContext インターフェースのインスタンス上でデフォルトの照合を明示的に指定しない場合、そのスタイルシートや式のデフォルト照合 URI は、Unicode コード・ポイント照合 URI (http://www.w3.org/2005/xpath-functions/collation/codepoint/) となります。
Unicode コード・ポイント照合は、文字が、同等と見なされる同一の Unicode 文字である場合に使用できます。 この照合で定義された辞書式順序付けは、文字の Unicode コード・ポイント、つまり Unicode コード表の位置によって決定されます。 そのため、Unicode コード・ポイント照合を使用すると、国/地域別環境に特定した方法でストリング比較を実行する照合よりも最適なパフォーマンスを生み出しますが、ソート操作で最適な結果をもたらす可能性は低くなります。
以下は、XStaticContext インターフェースのインスタンス上でデフォルトの照合 URI を指定する方法を簡単な例で示したものです。// Setting of default collation URI is not changed - default remains // the Unicode code point collation URI XFactory factory = XFactory.newInstance(); XPathExecutable maxPath1 = factory.prepareXPath("max($var)"); // A new default collation URI is specified in the static context // That URI is used in any string comparison for which no other // explicit collation URI is specified XStaticContext sc = factory.newStaticContext(); sc.setDefaultCollation("http://example.org/my-collation"); XPathExecutable maxPath2 = factory.prepareXPath("max($var)", sc);
- 照合 URI をバインドします。
XML API は、実行する Java Collator クラスのインスタンスを使用して照合 URI をバインドするために、2 つのメソッドを提供します。XDynamicContext メソッドの bindCollation メソッドには 2 つの引数があります。1 番目の引数は照合 URI、2 番目は java.text.Collator クラスのインスタンスまたは java.util.Locale クラスのインスタンスです。 ロケール・クラスのインスタンスを指定すると、プロセッサーはそのロケールに適した Collator クラスのインスタンスを使用します。
XSLT、XPath、および XQuery は「静的既知照合」の概念を定義します。XSLT スタイルシートや、XPath または XQuery 式に照合 URI への参照が表示され、 かつ、その照合 URI が「静的既知照合」のものでない場合は、一部の環境で静的エラーが報告されるようになっています。 ただし、プロセッサーは、すべての照合 URI が「静的既知照合」のセットに属するかのようにこれらの照合 URI を扱います。 これは、Java Collator クラスのインスタンスの実行時までこのインスタンスが実際に照合 URI に関連付けられないことによるものです。そのため、プロセッサーは既知のものとなっていない照合 URI を静的に判別することができません。 代わりに、プロセッサーは、Collator クラスのインスタンスにバインドされていない照合 URI がスタイルシートまたは式に使用された場合は、動的エラーを報告します。
Java Collator クラスのインスタンスに Unicode コード・ポイント照合 URI をバインドすることはできません。この照合 URI は、 常に Unicode コード・ポイント照合で暗黙的にバインドされています。
以下の例では、XDynamicContext インターフェースのインスタンス上で、特定の Java Collator クラスのインスタンスを使用して照合 URI をバインドする方法を示します。XFactory factory = XFactory.newInstance(); XStaticContext sc = factory.newStaticContext(); // Set up a default collation URI sc.setDefaultCollation("http://example.org/my-collation"); // Prepare an XPath expression that computes fn:max() using the // collator associated with the default collation URI and again using // the Unicode code point collation String expr = "max($var)," + "max($var,'http://www.w3.org/2005/xpath-functions/collation/codepoint')"; XPathExecutable maxPath = factory.prepareXPath(expr, sc); XDynamicContext dc = factory.newDynamicContext(); // Set the value of the variable $var dc.bind(new QName("var"), new String[] {"encyclopaedia", // U+00E6 is lower case latin ae ligature "encyclop¥u00E6dia", "encyclopedia"}); // Set up a Collator for English that does not distinguish between // capitals, lower-case letters and certain character variants Collator english = (Collator) Collator.getInstance(Locale.ENGLISH).clone(); english.setStrength(Collator.SECONDARY); // Evaluate the expression with that English collator associated with // the default collation URI dc.bindCollation("http://example.org/my-collation", english); XSequenceCursor maxValues = maxPath.execute(dc); // Print maximum values - expected results are // encyclopedia for English collation and // encyclop¥u00E6dia for Unicode code point collation if (maxValues != null) { do { System.out.println(maxValues.getStringValue()); } while (maxValues.toNext()); }


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=txml_collations
ファイル名:txml_collations.html