Thank you Michael. In this view, changing the default namespace, the pair (“”,uri1) to (“”, uri2) is a potential conflict, I can see that. However, adding a default namespace when no namespace is defined - in the (prefix, uri) view, I would see that as changing (“”,””) to (“”, uri1) - seems quite similar to me...
Don’t worry, I was just intrigued ;-) Always Leo On 17 Sep 2014, at 12:15, Michael Kay <[email protected]> wrote: > >> Christian, thank you for your lines. >> >>> This is different in the second case. The specification [1] says that >>> "If the namespace binding of $QName conflicts with any namespace >>> binding in the namespaces property of $target, a dynamic error is >>> raised [err:XUDY0023].". This is why an error is raised if a namespace >>> already exists. >> >> When I prefix the new name, it works, even though the namespace binding is >> the same. > > A namespace binding is a (prefix, uri) pair, so when you prefix the name > there is a new (prefix, uri) pair which doesn't confllct with any existing > (prefix, uri) pair. Does that clarify? > > Michael Kay > Saxonica > >> >> declare namespace gym='http://www.mygym.com'; >> >> let $i:=(doc("FitnessCenter.xml")//gym:Name)[1] >> >> return rename node $i as QName('http://www.gym.com', “gym:Name") >> with >> <?xml version="1.0" encoding="UTF-8"?> >> >> <FitnessCenter xmlns="http://www.mygym.com"> >> <Member Level="platinum"> >> <Name>Jeff</Name> >> <FavoriteColor>lightgrey</FavoriteColor> >> </Member> >> </FitnessCenter> >> >> I cannot see the namespace conflict. >> Thanks anyway >> Always >> Leo >> >> >> >> >>> >>> Hope this helps, >>> Christian >>> >>> [1] http://www.w3.org/TR/xquery-update-10/#id-rename >>> >>> >>> >>>>> The problem is that your original document >>>>> uses the default namespace "http://www.mygym.com", and your query uses >>>>> "http://www.gym.com". In other words, the error is raised because the >>>>> namespace binding of your target name conflicts with the existing >>>>> namespace binding. >>>> >>>> That I don't get. >>>> >>>> This works >>>> let $i:=(doc("FitnessCenter.xml")//Name)[1] >>>> >>>> return rename node $i as QName('http://www.gym.com', "Name") >>>> with >>>> <?xml version="1.0" encoding="UTF-8"?> >>>> >>>> <FitnessCenter> >>>> <Member Level="platinum"> >>>> <Name>Jeff</Name> >>>> <FavoriteColor>lightgrey</FavoriteColor> >>>> </Member> >>>> </FitnessCenter> >>>> >>>> This not >>>> >>>> declare namespace gym='http://www.mygym.com'; >>>> >>>> let $i:=(doc("FitnessCenter.xml")//gym:Name)[1] >>>> >>>> return rename node $i as QName('http://www.gym.com', "Name") >>>> with >>>> <?xml version="1.0" encoding="UTF-8"?> >>>> >>>> <FitnessCenter xmlns="http://www.mygym.com"> >>>> <Member Level="platinum"> >>>> <Name>Jeff</Name> >>>> <FavoriteColor>lightgrey</FavoriteColor> >>>> </Member> >>>> </FitnessCenter> >>>> >>>> >>>> >>>> Why should that conflict? >>>> Always >>>> Leo >>>> >>>> >>>> >>>> >>>>> >>>>> Here is a recursive approach to change the default namespace of a >>>>> document: >>>>> ______________________________________ >>>>> >>>>> declare function local:update($root as node(), $ns as xs:string) { >>>>> if($root instance of element()) then ( >>>>> element { QName($ns, local-name($root)) } { >>>>> $root/@*, >>>>> for $node in $root/node() >>>>> return local:update($node, $ns) >>>>> } >>>>> ) else ( >>>>> $root >>>>> ) >>>>> }; >>>>> >>>>> let $ns := 'http://www.gym.com' >>>>> let $root := doc("FitnessCenter.xml")/* >>>>> let $updated := local:update($root, $ns) >>>>> return replace node $root with $updated >>>>> ______________________________________ >>>>> >>>>> Hope this helps, >>>>> Christian >>>>> >>>>> >>>>> >>>>> On Tue, Sep 16, 2014 at 12:10 PM, Leo Studer <[email protected]> >>>>> wrote: >>>>>> Hello >>>>>> >>>>>> I use the following query with Saxon-EE xQuery 9.5.1.5 in Oxygen. >>>>>> >>>>>> for $i in doc('FitnessCenter.xml')//* >>>>>> return rename node $i as QName('http://www.gym.com', local-name($i)) >>>>>> >>>>>> >>>>>> on the following file: >>>>>> >>>>>> <?xml version="1.0" encoding="UTF-8"?> >>>>>> <FitnessCenter xmlns="http://www.mygym.com"> >>>>>> <Member Level="platinum"> >>>>>> <Name>Jeff</Name> >>>>>> <FavoriteColor>lightgrey</FavoriteColor> >>>>>> </Member> >>>>>> <Member Level="gold"> >>>>>> <Name>David</Name> >>>>>> <FavoriteColor>lightblue</FavoriteColor> >>>>>> </Member> >>>>>> </FitnessCenter> >>>>>> >>>>>> and get the following error: new name conflicts with existing namespace >>>>>> binding >>>>>> >>>>>> >>>>>> I thought the function local-name() produces an output without >>>>>> namespace binding? Can anyone explain? >>>>>> >>>>>> Thanks in advance >>>>>> Leo >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> [email protected] >>>>>> http://x-query.com/mailman/listinfo/talk >>>> >>>> >>>> _______________________________________________ >>>> [email protected] >>>> http://x-query.com/mailman/listinfo/talk >> >> >> _______________________________________________ >> [email protected] >> http://x-query.com/mailman/listinfo/talk > _______________________________________________ [email protected] http://x-query.com/mailman/listinfo/talk
