SQL Anywhere は、次のルールを使用して、XML 名として有効ではない名前 (たとえば、スペースを含むカラム名) をエンコードします。
XML には、SQL 名のルールとは異なる名前のルールがあります。たとえば XML 名にはスペースを使用できません。カラム名などの SQL 名が XML 名に変換されると、XML 名で有効でない文字はエンコードされるかエスケープされます。
エンコードされた各文字について、エンコーディングは文字のユニコードのコードポイント値が基になり、16 進数で表されます。
ほとんどの文字のコードポイント値は、16 ビット、または 4 桁の 16 進数で表すことができ、_xHHHH_ というエンコーディングが使用されます。このような文字に対応するユニコード文字の UTF-16 値は、16 ビット・ワード 1 つです。
コードポイント値が 16 ビットよりも多く必要な文字では、8 桁の 16 進数が使用され、エンコーディングは _xHHHHHHHH_ になります。このような文字に対応するユニコード文字の UTF-16 値は、16 ビット・ワード 2 つです。ただし、エンコーディングには UTF-16 値ではなく、ユニコードのコードポイント値 (通常は 16 進数で 5 または 6 桁) が使用されます。
たとえば、次のクエリには、スペースを持つカラム名が含まれています。
SELECT EmployeeID AS "Employee ID" FROM Employees FOR XML RAW; |
そのため、次の結果が返されます。
<row Employee_x0020_ID="102"/> <row Employee_x0020_ID="105"/> <row Employee_x0020_ID="129"/> <row Employee_x0020_ID="148"/> ... |
アンダースコア (_) は、次に文字 x が続く場合、エスケープされます。たとえば、名前 Linu_x は Linu_x005F_x のようにエンコーディングされます。
コロン (:) は、エスケープされません。そのため、FOR XML クエリを使用して、名前空間宣言と修飾された要素名、属性名を生成できます。
FOR XML 句の構文については、SELECT 文を参照してください。
Interactive SQL で FOR XML 句を含むクエリを実行する場合は、truncation_length オプションを設定するとカラム長を増やせます。
トランケーション長の設定については、truncation_length オプション [Interactive SQL]を参照してください。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |