XQuery/XML 到 SQL
顯示
< XQuery
表格 XML 例如
<books>
<book>
<title>Introduction to XQuery</title>
<description>A beginner's guide to XQuery that covers sequences and FLOWR expressions</description>
<type>softcover</type>
<sales-count>155</sales-count>
<price>19.95</price>
</book>
<book>
<title>Document Transformations with XQuery</title>
<description>How to transform complex documents like DocBook, TEI and DITA</description>
<type>hardcover</type>
<sales-count>105</sales-count>
<price>59.95</price>
</book><!-- ...more books here.... -->
</books>
可以透過生成建立語句匯出到 SQL 表中
declare variable $local:nl := "
";
declare function local:element-to-SQL-create($element) {
("create table ", name($element), $local:nl ,
string-join(
for $node in $element/*[1]/*
return
concat (" ",name($node) , " varchar(20)" ),
concat(',',$local:nl)
),
";",$local:nl
)
};
以及插入語句
declare function local:element-to-SQL-insert ($element) {
for $row in $element/*
return
concat (
" insert into table ",
name($element),
" values (",
string-join(
for $node in $element/*[1]/*
return concat('"',data($row/*[name(.)=name($node)]),'"'),
","
),
");",$local:nl
)
};
並在指令碼中使用這兩個函式
declare option exist:serialize "method=text media-type=text/text";
let $xml := doc("/db/apps/xqbook/data/catalog.xml")/*
return
(local:element-to-SQL-create($xml),
local:element-to-SQL-insert($xml)
)
此 SQL 非常通用,由於缺乏架構,所有欄位均定義為 varchar。有了架構,可以在 SQL 中定義適當的資料型別。