[xquery-talk] Namespace conflict ?

Leo Studer leo.studer at varioweb.ch
Wed Sep 17 03:07:27 PDT 2014


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. 

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 <leo.studer at varioweb.ch> 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
>>>> 
>>>> 
>>>> _______________________________________________
>>>> talk at x-query.com
>>>> http://x-query.com/mailman/listinfo/talk
>> 
>> 
>> _______________________________________________
>> talk at x-query.com
>> http://x-query.com/mailman/listinfo/talk




More information about the talk mailing list