/ / Трансформация на индентност с пространства от имена - xquery, exist-db

Преобразуване на индентификацията с пространства с имена - xquery, exist-db

Налице е добре познат код за идентичност трансформиране в. \ T XQuery wikibook

Но той работи добре само без документи на пространството от имена или изрично декларира пространствата от имена със същите префикси, използвани в документа, който ще се обработва.

Ако не декларирате пространства от имена (със същите префикси), получавате грешка:

Не може да се компилира xquery: err: XPST0081 Не е определено пространство от имена за префикс xsd [в ред 15, колона 12]

Има ли начин да се напише трансформация на идентичност в XQuery, която може автоматично да обработва пространствата от имена и префиксите, избягвайки изричното деклариране на пространства от имена?

РЕДАКТИРАНЕ:

Това е кодът от Wikibook:

(: return a deep copy of  the element and all sub elements :)
declare function local:copy($element as element()) as element() {
element {node-name($element)}
{$element/@*,
for $child in $element/node()
return
if ($child instance of element())
then local:copy($child)
else $child
}
};

В моя случай, аз не знам пространства от имена или префикси в документа, който ще се обработва, така че element { } { } конструкцията се провали, ако пространството от имена и префикс не са декларирани в XQuery.

За да го възпроизведете, просто копирайте / поставете и стартирайте с документ, който използва префикс пространства от имена.

Отговори:

0 за отговор № 1

Мисля, че отговорът е не. Ако искате да обработвате елементи с имена, тогава тези пространства от имена трябва да бъдат декларирани.


0 за отговор № 2

Въз основа на съобщението за грешка, всичко, което трябва да направите, е да декларирате пространството за имена xsd в горната част на вашия документ XQuery.

Declare namespace xsd="http://www.w3.org/2001/XMLSchema";

Ако това не го направи, публикуването на XQuery ще ни помогне много да разберем какъв е проблемът.