XQuery: проблема пространства имен в локальных функциях - PullRequest
0 голосов
/ 22 ноября 2010

У меня есть следующая проблема с моей локальной функцией.

Следующая функция:

declare function local:exp($w as node()) as element()* {
 for $e in ($w/e)
 let $exp:= QName ("myns", "real")
 return 
  element {$exp}{ 
   attribute resource {$e/@lang}
  }
};

создает этот xml:

<real xmlns="myns" resource="eng"/>

Что действительно необходимо:

<myns:real rdf:resource="lang"/>

Как я могу достичьтот?

  1. Как решить проблему?
  2. Как добавить «rdf» в качестве NS для атрибута ресурса.

Заранее спасибо.

1 Ответ

1 голос
/ 22 ноября 2010

Вы можете назначить префикс QName следующим образом:

let $exp:= QName ("urn:my-namespace", "myns:real")

Вероятно, лучший способ решить эту проблему - объявить эти пространства имен в запросе и просто обратиться к ним по префиксу:

declare namespace rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
declare namespace myns="urn:my-namespace";

declare function local:exp($w as node()) as element()* {
 for $e in $w/e
 return 
  element myns:real { 
   attribute rdf:resource {$e/@lang}
  }
};

Обратите внимание, что вы можете упростить свою функцию, используя прямые конструкторы:

declare function local:exp($w as node()) as element()* {
 for $e in $w/e
 return <myns:real rdf:resource="{$e/@lang}" />
};
...