XML 関数は、XML データを操作するための機能を提供します。
JSONTOXML
この関数は、JSON から XML ドキュメントを返します。
Syntax
JSONTOXML(rootElementName, JSON)
rootElementName
は文字列、JSON は です。{clob, blob}
戻り値はxml
です。
適切なUTFエンコーディング(8、16LE。16BE、32LE、322625BE)がJSONブロブとして検出されます。他のエンコーディングを使用する場合は、to_chars
関数を参照してください。
結果は常に整形式のXML文書になります。
XMLへのマッピングは以下のルールを使用します:
- 現在の要素名は最初は
rootElementName
、JSON構造が走査されるにつれてオブジェクト値名になります; - すべての要素名は、有効な XML 1.1 の名前でなければなりません。無効な名前はSQLXML仕様に従って完全にエスケープされます;
- 各オブジェクトまたはプリミティブ値は、現在の名前を持つ要素で囲まれます;
- 配列の値がルートでない限り、追加要素で囲まれることはありません;
- NULL値は、属性
xsi:nil="true"
、空の要素で表現されます。
Example
JSONTOXML('person', x) のサンプル JSON から XML への変換
JSON
"firstName" : "John" , "children" : [ "Randy", "Judy" ]
XML
<?
xml
version
=
"1.0"
?>
<
person
>
<
firstName
>John</
firstName
>
<
children
>Randy</
children
>
<
children
>Judy<
children
>
</
person
>
JSONToXml('person', x) のサンプル JSON から XML への変換 (ルート配列付き)
JSON
[{
"firstName"
:
"George"
}, {
"firstName"
:
"Jerry"
}]
XML
<?
xml
version
=
"1.0"
?>
<
person
>
<
person
>
<
firstName
>George</
firstName
>
</
person
>
<
person
>
<
firstName
>Jerry</
firstName
>
</
person
>
</
person
>
この例では、XMLを整形式に保つために "person "ラッパー要素が追加されていることに注意してください。
XMLCOMMENT
この関数は XML コメントを返します。
Syntax
XMLCOMMENT(comment)
comment
は文字列です;- 戻り値は XML です。
Example
SELECT XMLCOMMENT('Lorem ipsum ');;
この呼び出しは以下を返します:
<!-- Lorem ipsum -->
XMLCONCAT
この関数は、与えられた XML 要素を連結した XML を返します。
Syntax
XMLCONCAT(content [, content]*)
content
はxmlです;- 戻り値は xml です。
Example
SELECT
XMLCONCAT(
XMLELEMENT(
"name"
,
'Dr Jekyll'
),
XMLELEMENT(
"name"
,
'Mr Hyde'
)
);;
この呼び出しは以下を返します:
<
name
>Dr Jekyll</
name
><
name
>Mr Hyde</
name
>
値がNULLの場合は無視されます。すべての値がNULLの場合、NULLが返されます。
XMLELEMENT
この関数は、指定された名前と内容を持つ XML 要素を返します。
Syntax
XMLELEMENT([NAME] name [, <
NSP
>] [, <
ATTR
>][, content]*)
ATTR:=XMLATTRIBUTES (exp [AS name] [, exp [AS name]]*)
NSP:=XMLNAMESPACES ((uri AS prefix | DEFAULT uri | NO DEFAULT))+
content
の値がXML以外の型の場合、親要素に追加される際にエスケープされます;- NULLコンテンツ値は無視されます;
- XML またはコンテンツの文字列値の空白は保持されますが、コンテンツ値の間に空白は追加されません;
XMLNAMESPACES
は名前空間情報を提供するために使用されます;NO DEFAULT
は、デフォルトの名前空間を NULL uri - に定義することと同じです;xmlns=""
DEFAULT
またはNO DEFAULT
名前空間項目は 1 つだけ指定できます;- 名前空間接頭辞
xmlns
およびxml
は予約済みです; name
およびprefix
はIdentifiers です;uri
は文字列リテラルです;content
はどんな型でも構いません;- 戻り値はXML で、 XML ドキュメント(要素コンテンツなど)が期待される場所での使用に有効です。
Example
SELECT
XMLELEMENT(
NAME
"MI6"
,
XMLNAMESPACES(
'uri'
as
ns1),
XMLELEMENT(
"head"
,
'M'
),
XMLELEMENT(
"agent"
,
XMLATTRIBUTES(
'007'
AS
"id"
,
'Martini'
AS
"drink"
),
'Bond, James'
)
);;
この呼び出しは以下を返します:
<
MI6
xmlns:ns1
=
"uri"
>
<
head
>M</
head
>
<
agent
id
=
"007"
drink
=
"Martini"
>Bond, James</
agent
>
</
MI6
>
XMLESCAPENAME
この関数は、ISO 9075(有効なXML 識別子)に従った名前のエスケープに使用できます。
Syntax
XMLESCAPENAME(name, true)
- Name は文字列です;
- 2番目の引数は、完全なエスケープが必要なのか、部分的なエスケープが必要なのかを表します;
- 戻り値はエスケープされた名前です。
Example
SELECT
XMLESCAPENAME(
'xml_name_:XML_name_xls GetsEsc@ped'
,
TRUE
);;
この呼び出しは以下を返します:
_u0078_ml_name__u003A_XML_name_u005F_xls_u0020_GetsEsc_u0040_ped
XMLFOREST
この関数は、各コンテンツアイテムのXML 要素を連結して返します。
Syntax
XMLFOREST(content [<
NSP
>] [, AS name] [, content [AS name]]*)
NSP - XMLNAMESPACES の定義についてはXMLELEMENT を参照してください。
name
はIdentifiers です;content
はどんな型でも構いません;- 戻り値は XML です;
- コンテンツ項目に名前が与えられない場合、式は列参照でなければなりません。この場合、要素名はカラム名を部分的にエスケープしたものになります。
Example
SELECT XMLFOREST(
XMLNAMESPACES('
http://tempuri.org/
' AS ns1),
XMLELEMENT(family_name, 'Huxley') AS family,
XMLELEMENT(person, 'Aldous Huxley') AS familyMember
);;
この呼び出しは以下を返します:
<
family
xmlns:ns1
=
"uri"
>
<
family_name
>Huxley</
family_name
>
</
family
>
<
familyMember
>
<
person
>Aldous Huxley</
person
>
</
familyMember
>
XMLPARSE
この関数は、文字列値表現の XML 型表現を返します。
Syntax
XMLPARSE((DOCUMENT|CONTENT) expr [WELLFORMED])
expr
in {string, clob, blob};- 戻り値は xml です。
Examples
シンプルなXMLPARSE
SELECT
XMLPARSE(CONTENT
'
<chipmunk>Chip</chipmunk>
<chipmunk>Dale</chipmunk>
'
);;
この呼び出しは以下を返します:
<
chipmunk
>Chip</
chipmunk
>
<
chipmunk
>Dale</
chipmunk
>
XMLPARSE with DOCUMENT
and WELLFORMED
SELECT
XMLPARSE(DOCUMENT
'
<ResqueRangers xmlns:ns1="uri">
<chipmunk>Chip</chipmunk>
<chipmunk>Dale</chipmunk>
</ResqueRangers>
'
WELLFORMED);;
この呼び出しは以下を返します:
<
ResqueRangers
xmlns:ns1
=
"uri"
>
<
chipmunk
>Chip</
chipmunk
>
<
chipmunk
>Dale</
chipmunk
>
</
ResqueRangers
>
XMLPARSE
この形式を使用する際には、2つの注意点があります:
DOCUMENT
が指定された場合、式は単一のルート要素を持たなければならず、XML宣言を含んでも含まなくてもよい;WELLFORMED
が指定された場合、バリデーションはスキップされます。これは、すでに有効であることが分かっているCLOB
やBLOB
の型に対して特に有効です。
この関数は、ファイルを式として渡すためにも使用できます:
XMLPARSE(DOCUMENT f.file)
XMLPI
この関数は XML 処理命令を返します。
Syntax
XMLPI([NAME] name [, content])
name
は Identifiers です;content
は文字列です- 戻り値は
XML
です。
Example
SELECT
XMLPI(
NAME
"Instruction"
,
'Push the red button'
);;
この呼び出しは以下を返します:
<?
Instruction
Push the red button?>
XMLQUERY
この関数は SQL/XML 2006 仕様の一部で、指定された XQuery を評価した XML 結果を返します。
Syntax
XMLQUERY([<
NSP
>] xquery [<
PASSING
>] [(NULL|EMPTY) ON EMPTY]])
PASSING:=PASSING exp [AS name] [, exp [AS name]]*
- NSP - XMLNAMESPACESの定義についてはXMLELEMENTを参照してください;
xquery
は文字列です;- 戻り値は XML です。
Examples
シンプルな XMLQUERY
SELECT
XMLQUERY(
'root/name/text()'
PASSING
CAST
(
'
<root>
<name>John</name>
<name>Paul</name>
<name>George</name>
<name>Ringo</name>
</root>'
AS
xml)
);;
この呼び出しは以下を返します:
John Paul George Ringo
INTO EMPTY句を含むXMLQUERY
ON EMPTY
句は、評価されるシーケンスが空の場合の結果を指定するために使用されます。EMPTY ON EMPTY
デフォルトでは、空の XML 結果を返し、 NULL ON EMPTY
は NULL 結果を返します。
SELECT
XMLQUERY(
'root/n/text()'
PASSING
CAST
(
'
<root>
<name>John</name>
<name>Paul</name>
<name>George</name>
<name>Ringo</name>
</root>'
AS
xml)
NULL
ON
EMPTY);;
この呼び出しは以下を返します:
null
名前空間はXQueryのプロローグで直接宣言することもできます。
オプションのPASSING
Clauseは、名前と名前付きグローバル変数値を持たないコンテキスト項目を提供するために使用されます。XQuery がコンテキスト項目を使用し、コンテキスト項目が提供されていない場合は、例外が発生します。指定できるコンテキスト項目は1つだけで、XML型でなければなりません。コンテキストのない非XMLパッシング値はすべて、適切なXMLタイプに変換されます。
XQuery によっては、メモリをより効率的に使用するのに役立つドキュメント・プロジェクションが必要になる場合があります。詳細はXQuery Optimizationの章を参照してください。
XMLSERIALIZE
この関数は XML 式の文字型表現を返します。
Syntax
XMLSERIALIZE([(DOCUMENT|CONTENT)] xml [AS datatype])
- 戻り値はデータ型と一致します;
- データ型は文字型(string、varchar、clob)のみです;
content
がデフォルトです;DOCUMENT
が指定された場合、式は単一のルート要素を持たなければなりません;- XML が有効なドキュメントまたはフラグメントでない場合は、例外が発生します。
Example
SELECT
XMLSERIALIZE(DOCUMENT
'
<Wars-of-the-Roses xmlns:ns1="uri">
<House>Lancaster</House>
<House>York</House>
</Wars-of-the-Roses>'
AS
CLOB);;
この呼び出しは以下を返します:
<
Wars
-of-the-Roses
xmlns:ns1
=
"uri"
><
House
>Lancaster</
House
><
House
>York</
House
></
Wars
-of-the-Roses>
XSLTRANSFORM
この関数は、与えられたドキュメントに XSL スタイルシートを適用します。
Syntax
XSLTRANSFORM(doc, xsl)
doc
,xsl
in {string, clob, xml};- 戻り値は clob です。
Example
SELECT
XSLTRANSFORM(
'<bookstore>
<book genre="novel" ISBN="1-861003-11-0">
<title>Pride And Prejudice</title>
<author>
<first-name>Jane</first-name>
<last-name>Austen</last-name>
</author>
<price>8.99</price>
</book>
</bookstore>'
,
'<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="book">
<book-data>
ISBN: <xsl:value-of select="@ISBN"/>
Title: <xsl:value-of select="title"/>
Author: <xsl:apply-templates select="author"/>
Price: <xsl:value-of select="price"/>
</book-data>
</xsl:template>
<xsl:template match="author">
<xsl:value-of select="first-name"/> <xsl:value-of select="first-last"/>
</xsl:template>
</xsl:stylesheet>'
);;
この呼び出しは以下を返します:
<
book
-data>
ISBN: 1-861003-11-0
Title: Pride And Prejudice
Author: Jane
Price: 8.99
</
book
-data>
どちらかの引数がNULLの場合、結果はNULLになることに注意してください。
XPATHVALUE
この関数はドキュメントに XPATH 式を適用し、最初にマッチした結果の文字列値を返します。
Syntax
XPATHVALUE(doc, xpath)
doc
および の {string, clob, xml};xpath
- 戻り値は文字列です。
非テキスト・ノードにMATCHしても、すべての子孫テキスト・ノードを含む文字列結果が得られることに注意してください。
Example
XML 値
<?
xml
version
=
"1.0"
?>
<
ns1
:return
xmlns:ns1
=
"http://com.test.ws/exampleWebService"
>Hello<
x
> World</
x
></
ns1
:return>
FUNCTION
SELECT
XPATHVALUE(value, '/*[
local
-
name
()=
"return"
])
この呼び出しの結果は 'Hello World' です。