3.5.9. XML 関数
XML 関数は、XML データを操作する機能を提供します。詳細は、「JSON 関数 の JSONTOXML 」を参照してください。
サンプル用のデータのサンプル
XML 関数で提供される例では、以下の表構造を使用します。
データを使用
customerid | CustomerName | ContactName | アドレス | City | PostalCode | 国 |
---|---|---|---|---|---|---|
87 | Wartian Herku | Pirkko Koskitalo | Torikatu 38 | Oulu | 90110 | フィンランド |
88 | Wellington Importadora | 親の親 | Rua do Mercado, 12 | Resende | 08737-363 | ブラジル |
89 | white CloverMarks | karl Jablonski | 305 - 14th Ave.S. Suite 3B | Seattle | 98128 | USA |
XMLCAST
XML へ/からキャストします。
XMLCAST(expression AS type)
XMLCAST(expression AS type)
式または型は XML である必要があります。戻り値は、型として 入力
されます。これは、XMLTABLE
が必要なランタイムタイプに値を変換するために使用する機能と同じですが、XMLCAST
は配列型のターゲットとは機能しません。
XMLCOMMENT
XML コメントを返します。
XMLCOMMENT(comment)
XMLCOMMENT(comment)
comment は文字列です。戻り値は XML です。
XMLCONCAT
指定の XML 型を連結した XML を返します。
XMLCONCAT(content [, content]*)
XMLCONCAT(content [, content]*)
コンテンツは XML です。戻り値は XML です。
値が null の場合は無視されます。すべての値が null の場合は、null を返します。
2 つ以上の XML フラグメントを連結します。
XMLELEMENT
指定の名前と内容を含む XML 要素を返します。
XMLELEMENT([NAME] name [, <NSP>] [, <ATTR>][, content]*) ATTR:=XMLATTRIBUTES(exp [AS name] [, exp [AS name]]*) NSP:=XMLNAMESPACES((uri AS prefix | DEFAULT uri | NO DEFAULT))+
XMLELEMENT([NAME] name [, <NSP>] [, <ATTR>][, content]*)
ATTR:=XMLATTRIBUTES(exp [AS name] [, exp [AS name]]*)
NSP:=XMLNAMESPACES((uri AS prefix | DEFAULT uri | NO DEFAULT))+
コンテンツの値が XML 以外のタイプの場合は、親要素に追加されるときにエスケープされます。Null コンテンツの値は無視されます。XML またはコンテンツの文字列値の空白は保持されますが、コンテンツ値の間には空白は追加されません。
XMLNAMESPACES は namespace 情報を提供します。NO DEFAULT は、デフォルトの名前空間を null uri - xmlns="" と同等です。DEFAULT または DEFAULT の名前空間項目を 1 つだけ指定できます。名前空間の接頭辞 xmlns と xml は予約されています。
属性名が指定されていない場合は、式が列参照である必要があります。その場合、属性名は列名になります。null 属性値は無視されます。
name、prefix は識別子です。uri は文字列リテラルです。コンテンツはどのタイプでも指定できます。戻り値は XML です。戻り値はドキュメントが想定される場所での使用に有効です。
簡単な例
複数の列
属性としての列
XMLFOREST
各コンテンツアイテムの XML 要素の連結を返します。
XMLFOREST(content [AS name] [, <NSP>] [, content [AS name]]*)
XMLFOREST(content [AS name] [, <NSP>] [, content [AS name]]*)
NSP - XMLNAMESPACES の定義については、「XML 関数 の XMLELEMENT 」を参照してください。
name は識別子です。コンテンツには任意のタイプを指定できます。戻り値は XML です。
コンテンツアイテムに名前が指定されていない場合は、式が列参照である必要があります。この場合、要素名は部分的にエスケープされた列名のバージョンになります。
XMLFOREST を使用して、複数の XMLELEMENTS の宣言を簡素化できます。XMLFOREST 関数を使用すると、一度に複数の列を処理できます。
例
XMLAGG
XMLAGG は XML 要素のコレクションを取得し、集約された XML ドキュメントを返す集約関数です。
XMLAGG(xml)
XMLAGG(xml)
上記の例の XML 要素では、条件に一致する行が複数ある場合に、カスタマーテーブルの各行が XML の行を生成します。有効な XML を生成しますが、root 要素がないため、適切に形成されません。XMLAGG を使用して修正できます。
例
XMLPARSE
文字列値式の XML 型表現を返します。
XMLPARSE((DOCUMENT|CONTENT) expr [WELLFORMED])
XMLPARSE((DOCUMENT|CONTENT) expr [WELLFORMED])
{string, clob, blob, varbinary} の expr戻り値は XML です。
DOCUMENT が指定されている場合、式には単一のルート要素が必要であり、XML 宣言が含まれる場合とそうでない場合があります。
WELLFORMED を指定すると検証は省略されます。これは、すでに有効なことが認識される CLOB および BLOB に特に便利です。
SELECT XMLPARSE(CONTENT '<customer><name>Wartian Herkku</name><contact>Pirkko Koskitalo</contact></customer>' WELLFORMED); Will return a SQLXML with contents =============================================================== <customer><name>Wartian Herkku</name><contact>Pirkko Koskitalo</contact></customer>
SELECT XMLPARSE(CONTENT '<customer><name>Wartian Herkku</name><contact>Pirkko Koskitalo</contact></customer>' WELLFORMED);
Will return a SQLXML with contents
===============================================================
<customer><name>Wartian Herkku</name><contact>Pirkko Koskitalo</contact></customer>
XMLPI
XML 処理命令を返します。
XMLPI([NAME] name [, content])
XMLPI([NAME] name [, content])
name は識別子です。Content は文字列です。戻り値は XML です。
XMLQUERY
指定の xquery を評価する XML 結果を返します。
XMLQUERY([<NSP>] xquery [<PASSING>] [(NULL|EMPTY) ON EMPTY]] PASSING:=PASSING exp [AS name] [, exp [AS name]]*
XMLQUERY([<NSP>] xquery [<PASSING>] [(NULL|EMPTY) ON EMPTY]]
PASSING:=PASSING exp [AS name] [, exp [AS name]]*
NSP - XMLNAMESPACES の定義については、「 XMLELEMENT in XML 関数 」を参照してください。
また、名前空間は xquery Prolog で直接宣言することもできます。
オプションの PASSING 句は、名前のないコンテキスト項目と、グローバル変数値という名前を提供するために使用されます。xquery がコンテキスト項目を使用し、指定がない場合は例外が発生します。指定できるのは 1 つのコンテキスト項目のみで、XML 型でなければなりません。コンテキスト以外の XML 以外のパス値はすべて適切な XML 型に変換されます。コンテキストアイテムが null と評価されると、null が返されます。
ON EMPTY 句は、評価シーケンスが空の場合に結果を指定するために使用されます。デフォルトである EMPTY ON EMPTY は、空の XML 結果を返します。NULL ON EMPTY は null 結果を返します。
XQuery(文字列)。戻り値は XML です。
XMLQUERY は SQL/XML の検出仕様の一部です。
詳細は、「XMLTABLE in FROM clause 」を参照してください。
「 XQuery の最適化 」も参照してください。
XMLEXISTS
指定の xquery を評価して空でないシーケンスが返されると true を返します。
XMLEXISTS([<NSP>] xquery [<PASSING>]] PASSING:=PASSING exp [AS name] [, exp [AS name]]*
XMLEXISTS([<NSP>] xquery [<PASSING>]]
PASSING:=PASSING exp [AS name] [, exp [AS name]]*
NSP - XMLNAMESPACES の定義については、「 XMLELEMENT in XML 関数 」を参照してください。
また、名前空間は xquery Prolog で直接宣言することもできます。
オプションの PASSING 句は、名前のないコンテキスト項目と、グローバル変数値という名前を提供するために使用されます。xquery がコンテキスト項目を使用し、指定がない場合は例外が発生します。指定できるのは 1 つのコンテキスト項目のみで、XML 型でなければなりません。コンテキスト以外の XML 以外のパス値はすべて適切な XML 型に変換されます。コンテキストアイテムが null と評価されると、null/Unknown が返されます。
XQuery(文字列)。戻り値はブール値です。
XMLEXISTS は SQL/XML Hadoop 仕様の一部です。
「 XQuery の最適化 」も参照してください。
XMLSERIALIZE
XML 式の文字型表現を返します。
XMLSERIALIZE([(DOCUMENT|CONTENT)] xml [AS datatype] [ENCODING enc] [VERSION ver] [(INCLUDING|EXCLUDING) XMLDECLARATION])
XMLSERIALIZE([(DOCUMENT|CONTENT)] xml [AS datatype] [ENCODING enc] [VERSION ver] [(INCLUDING|EXCLUDING) XMLDECLARATION])
戻り値はデータタイプと一致します。 データタイプが指定されていない場合、clob が想定されます。
タイプは文字(string、varchar、clob)またはバイナリー(blob、varbinar)にすることができます。CONTENT がデフォルトです。DOCUMENT を指定し、XML が有効なドキュメントまたはフラグメントでない場合は、例外が発生します。
エンコーディングの暗号は識別子として指定されます。文字のシリアライズではエンコーディングを指定できません。 version ver は文字列リテラルとして指定されます。特定の XMLDECLARATION が指定されていない場合は、UTF-8/UTF-16 またはバージョン 1.0 以外のドキュメントシリアライゼーションを実行する場合や、基礎となる XML に宣言がある場合のみ宣言が含まれます。 CONTENT がシリアライズされる場合は、値がドキュメントまたは要素でない場合に宣言は省略されます。
FE FF および XML 宣言の適切なバイト順序マークを含む、UTF-16 に XML の BLOB を生成する以下の例を参照してください。
バイナリーシリアライゼーションの例
XMLSERIALIZE(DOCUMENT value AS BLOB ENCODING "UTF-16" INCLUDING XMLDECLARATION)
XMLSERIALIZE(DOCUMENT value AS BLOB ENCODING "UTF-16" INCLUDING XMLDECLARATION)
XMLTEXT
XML テキストを返します。
XMLTEXT(text)
XMLTEXT(text)
text は文字列です。戻り値は XML です。
XSLTRANSFORM
XSL スタイルシートを指定されたドキュメントに適用します。
XSLTRANSFORM(doc, xsl)
XSLTRANSFORM(doc, xsl)
doc, XSL in {string, clob, xml}戻り値は clob です。
いずれの引数も null の場合、結果は null になります。
XPATHVALUE
XPATH 式をドキュメントに適用し、最初に一致した結果の文字列値を返します。結果および XQuery をより制御するには、XMLQUERY 関数を使用します。詳細は「XML 関数 の XMLQUERY 」を参照してください。
XPATHVALUE(doc, xpath)
XPATHVALUE(doc, xpath)
{string, clob, blob, xml}. xpath のドキュメントは文字列です。戻り値は文字列です。
テキスト以外のノードと一致すると、依然としてすべての子テキストノードを含む文字列の結果が生成されます。単一要素が xsi:nil でマークされた場合は、null を返します。
入力ドキュメントで名前空間を使用する場合は、名前空間を無視する XPATH を指定する必要がある場合があります。
xpathValue Ignoring Namespaces のサンプル XML
<?xml version="1.0" ?> <ns1:return xmlns:ns1="http://com.test.ws/exampleWebService">Hello<x> World</x></return>
<?xml version="1.0" ?>
<ns1:return xmlns:ns1="http://com.test.ws/exampleWebService">Hello<x> World</x></return>
関数:
xpathValue Ignoring Namespaces のサンプル
xpathValue(value, '/*[local-name()="return"]')
xpathValue(value, '/*[local-name()="return"]')
Hello World
の結果
例: フラットデータ構造からの階層 XML の生成
以下の表とそのコンテンツを使用
Table { x string, y integer }
Table {
x string,
y integer
}
以下のような XML を生成する場合は ['a', 1], ['a', 2], ['b', 3], ['b', 4] などのデータ
以下のように Data Virtualization の SQL ステートメントを使用します。
select xmlelement(name "root", xmlagg(p)) from (select xmlelement(name "x", x, xmlagg(xmlelement(name "y", y)) as p from tbl group by x)) as v
select xmlelement(name "root", xmlagg(p))
from (select xmlelement(name "x", x, xmlagg(xmlelement(name "y", y)) as p from tbl group by x)) as v
その他の例は、http://oracle-base.com/articles/misc/sqlxml-sqlx-generating-xml-content-using-sql.phpを参照してください。