2012-04-17 2 views
1

私は、(私はチュートリアルから借りていること)は、この非常に単純なXMLドキュメントでの作業図書-mod.xmlよ:XQuery:なぜこの変換はソースドキュメントを変更するのですか?

<?xml version="1.0" encoding="ISO-8859-1"?> 

<bookstore> 

<book category="COOKING"> 
    <title lang="en">Everyday Italian</title> 
    <author>Giada De Laurentiis</author> 
    <year>2005</year> 
    <price>30.00</price> 
</book> 

<book category="CHILDREN"> 
    <title lang="en">Harry Potter</title> 
    <author>J K. Rowling</author> 
    <year>2005</year> 
    <price>29.99</price> 
</book> 

<book category="WEB"> 
    <title lang="en">XQuery Kick Start</title> 
    <author>James McGovern</author> 
    <author>Per Bothner</author> 
    <author>Kurt Cagle</author> 
    <author>James Linn</author> 
    <author>Vaidyanathan Nagarajan</author> 
    <year>2003</year> 
    <price>49.99</price> 
</book> 

<book category="WEB"> 
    <title lang="en">Learning XML</title> 
    <author>Erik T. Ray</author> 
    <year>2003</year> 
    <price>39.95</price> 
</book> 

</bookstore> 

そして、このクエリを使用して:

copy $d := doc("books-mod.xml") 
modify (
    for $t in $d//title 
    return replace value of node $t with concat($t, " in bed") 
) 
return $d 

このクエリが実行され、私が期待していることをします(つまり、各書籍のタイトルに「ベッドの中に」というテキストを追加します)。しかし、驚くべきことに、ソース文書も変更されています... copyの全体の点は、この文書のコピーを変更したと思いました。

私はここで何が欠けていますか?

xqilla-uを使用してクエリを実行しています。

答えて

2

これは間違いなくバグです。 変換式は、明示的にnot an updating expressionです:

Aは、それが既存のノードの値を変更していないため、式は簡単な式で変換します。

使用しているXQillaのバージョンは?それらを溶解させるのではなく、文書ノードをコピーするための変換式を修正

おそらく既に修正されている可能性があります。

+0

Hmm。私は2.3.0を使用しているので、そこにいるはずです...この動作を確認するための+1は間違っています。私は掘り起こして、これが私が見ているものかどうかを見なければならない。 – FatalError

+2

実際、永続的なファイルストアに対するクエリの効果は、完全に実装定義です。あなたが2 + 2を書いたときにあなたのディスクをフォーマットしたクエリプロセッサは、人気がないかもしれませんが、それは不適合ではありません。 –

+0

私はそれを気付かなかった、私はそれを考える、それは完璧な意味があります。あなたが知っている以上に... –