XMLELEMENT
Synopsis
XMLELEMENT([NAME] tag,expression[,expression]) XMLELEMENT([NAME] tag,XMLATTRIBUTES(expression [AS alias]),expression[,expression])
引数
NAME tag |
XML マークアップ・タグの名前。NAME キーワードはオプションです。この引数には、NAME "tag"、"tag"、および NAME という 3 つの構文形式があります。最初の 2 つは機能的に同じです。指定する場合は、tag を二重引用符で囲む必要があります。tag の大文字/小文字の区別は保持されます。 XMLELEMENT は tag の値の検証を実行しません。ただし、XML 規格では、有効な tag 名には文字 !"#$%&'()*+,/;<=>?@[\]^`{|}~ やスペース文字を含めないこと、および最初の文字に "-"、"."、または数字を使用しないことが定められています。 NAME キーワードを tag の値なしで指定すると、既定のタグの値、<Name> ... </Name> となります。 |
expression | 任意の有効な式。普通は、タグ付けの対象となるデータ値を含む列の名前を指定します。列またはその他の式のコンマ区切りリストを指定できます。これらすべては同じ tag で囲まれます。最初のコンマ区切り要素を、XMLATTRIBUTES 関数にすることができます。XMLATTRIBUTES 要素は、1 つのみ指定できます。 |
概要
XMLELEMENT 関数は、tag で指定された XML (または HTML) マークアップ開始タグと終了タグを付けた expression の値を返します。例えば、XMLELEMENT(NAME "Para",Home_City) は、<Para>Chicago</Para> のような値を返します。XMLELEMENT を使用して空要素タグを生成することはできません。
XMLELEMENT は、テーブルまたはビューを参照する SELECT クエリまたは SELECT サブクエリで使用できます。XMLELEMENT は、一般のフィールド値と共に SELECT リストで使用できます。
tag 引数では、二重引用符を使用してリテラル文字列を囲みます。その他ほぼすべてのコンテキストにおいて、Caché SQL では一重引用符を使用してリテラル文字列を囲みます。二重引用符は 区切り識別子の指定に使用します。したがって、この機能を使用するには、区切り識別子を使用可能にする必要があります。
ダイナミック SQL の %Prepare() メソッドのように、SQL コードを二重引用符で区切った文字列として指定する場合は、以下のように二重引用符を 2 つ指定して tag の二重引用符をエスケープする必要があります。
SET myquery = "SELECT XMLELEMENT(""Para"",Name) FROM Sample.Person"
SET tStatement = ##class(%SQL.Statement).%New()
SET qStatus = tStatement.%Prepare(myquery)
一般的に expression は、クエリで返される複数行の中のフィールド名 (または、フィールド名を 1 つ以上含む式) です。expression は、データ・ストリーム・フィールドを含む任意のタイプのフィールドにすることができます。指定された expression の値は、次の形式のように、開始タグと終了タグで囲んで返します。
<tag>value</tag>
タグを付ける値が空文字列 ('') または NULL の場合、次のように返します。
<tag></tag>
expression に複数のコンマ区切り要素が含まれる場合、次の形式のように、結果が連結されます。
<tag>value1value2</tag>
XMLELEMENT 関数は入れ子にして使用できます。XMLELEMENT と XMLFOREST 関数は任意に組み合わせて入れ子にして使用できます。XMLELEMENT 関数は、XMLCONCAT を使用して連結できます。ただし、XMLELEMENT は、式全体の XML タイプの解析を実行しません。例えば、XMLELEMENT は CASE 文の節内の文字変換を実行できません (以下の例を参照)。
XMLATTRIBUTES 関数
XMLATTRIBUTES 関数は、XMLELEMENT 関数内でのみ使用できます。expression の要素が XMLATTRIBUTES 関数の場合、次の形式で示すように、指定された式はタグの属性になります。
<tag ID='63' >value</tag>
XMLATTRIBUTES 関数は、XMLELEMENT 関数内で 1 つのみ指定できます。これは expression で任意の要素にできますが、慣例では最初の expression の要素とします。属性値は一重引用符で囲まれ、属性値とタグの閉じ山括弧 (>) との間に空白が挿入されます。
XMLELEMENT と XMLFOREST の比較
-
XMLELEMENT は、単一のタグ内に expression リストの値を連結します。XMLFOREST は、各 expression アイテムに個別のタグを割り当てます。
-
XMLELEMENT は、タグの値を指定する必要があります。XMLFOREST は、既定のタグの値を使用することも、個々のタグの値を指定することもできます。XMLELEMENT は、空の (名前のない) タグ : <>value</> を指定できませんが、XMLFOREST はできます。
-
XMLELEMENT は、XMLATTRIBUTES を使用してタグの属性を指定できます。XMLFOREST は、タグの属性を指定できません。
-
XMLELEMENT は、NULL のタグ文字列を返します。XMLFOREST は、NULL のタグ文字列を返しません。
句読点文字値
XML/HTML によってタグまたはその他のコーディングとして解釈される句読点文字がデータ値に含まれる場合、XMLELEMENT と XMLFOREST はこの文字を対応するエンコード形式に変換します。
アンド記号 (&) は & となります。
アポストロフィ (') は ' となります。
引用符 (") は " となります。
左山括弧 (<) は < となります。
右山括弧 (>) は > となります。
入力文字列でアポストロフィを表すには、'can"t' のように、2 つのアポストロフィを指定します。列のデータには、アポストロフィを 2 つ付ける必要はありません。
例
次の例は、通常のデータおよび XML タグが付けられたデータとして、Sample.Person の各個人の Name フィールドの値を返します。
SELECT Name,
XMLELEMENT("Para",Name) AS ExportName
FROM Sample.Person
返されるデータ行は、次のようになります。
Name ExportName Emerson,Molly N. <Para>Emerson,Molly N.</Para>
次の例では、Sample.Person 内の重複していない Home_City 値と Home_State 値の組み合わせごとに、データに XML のタグ <Address> ... </Address> を付けて返します。市区町村名と都道府県名が連結されないようにするには、空白の expression を指定します。
SELECT DISTINCT
XMLELEMENT(NAME "Address",Home_City,' ',Home_State) AS CityState
FROM Sample.Person
ORDER BY Home_City
上の例では、オプションの NAME キーワードが使用されています。以下の例は、NAME キーワードを tag 値なしで使用します。
SELECT DISTINCT
XMLELEMENT(NAME,Home_City,' ',Home_State) AS CityState
FROM Sample.Person
ORDER BY Home_City
この場合、同じデータを返しますが、既定のタグ <Name> ... </Name> が付けられます。
以下の例では、文字ストリーム・フィールドを XML タグが付けられたデータとして返します。
SELECT Name,Notes,
XMLELEMENT("Para",Notes)
FROM Sample.Employee WHERE Notes IS NOT NULL
返されるデータ行は、次のようになります。
Emerson,Molly N. 5%Stream.GlobalCharacter^Sample.PersonS <Para>5%Stream.GlobalCharacter^Sample.PersonS</Para>
以下の例は、XMLELEMENT 関数を入れ子にして使用できることを示します。
SELECT XMLELEMENT("Para",Home_State,
XMLELEMENT("Emphasis",Name),Age)
FROM Sample.Person
返されるデータ行は、次のようになります。
<Para>CA<Emphasis>Emerson,Molly N.</Emphasis>24</Para>
以下の例は、XMLELEMENT が CASE 文の節内に値をタグ付けできないことを示します。
SELECT XMLELEMENT("Para",Home_State,
XMLELEMENT("Para",Name),
CASE WHEN Age < 21 THEN NULL
ELSE XMLELEMENT("Para",Age) END )
FROM Sample.Person
返されるデータ行は、次のようになります。
<Para>CA<Para>Emerson,Molly N.</Para><Para>24</Para></Para>
以下のクエリは、Sample.Person の Name フィールドの値を返します。これはデータに XML のタグ付けをし、このタグ内で ID フィールドをタグ属性として使用したものです。
SELECT XMLELEMENT("Para",XMLATTRIBUTES(ID),Name) AS ExportName
FROM Sample.Person
返されるデータ行は、次のようになります。
ExportName <Para ID='101' >Emerson,Molly N.</Para>
属性のエイリアスの指定方法を、以下の例に示します。
SELECT XMLELEMENT("Para",XMLATTRIBUTES(ID AS ItemKey),Name)
FROM Sample.Person
返されるデータ行は、次のようになります。
<Para ItemKey='101' >Emerson,Molly N.</Para>
関連項目
XMLAGG 関数
XMLCONCAT 関数
XMLFOREST 関数
SELECT 文