Hi Tim,

That is because you are using computed element constructors, creating list 
elements explicitly without namespaces (since you pass in the result of a call 
to local-name()). Also, you should not created xmlns attributes directly, but 
supply the element constructor with a xs:QName that contains the element name 
in the desired namespace.

I think you are looking for something like this:

declare namespace xsi = "http://www.w3.org/2001/XMLSchema-instance";;
declare namespace pre = "http://mystuff.com/pre";;

declare variable $sd := "http://mystuff.com/schema";;

declare function pre:passthru-nodeset($x as node()) as node()*
{
    for $z in $x/(@* | node()) return pre:build-nodeset($z)
};

declare function pre:build-nodeset($x as node()) as node()*
{
(:Revise link counts, clean up link, add link attributes to mixed-citation:)
    typeswitch ($x)
    case text() return $x
    case attribute () return $x
    case element ()
        return
            element {QName($sd, local-name($x))} {
                if (not($x/parent::*)) then
                    attribute xsi:schemaLocation { "/the-schema.xsd" }
                else (),
                pre:passthru-nodeset($x)
            }
    default return pre:passthru-nodeset($x)
};

let $record :=
    <record bla="boo"><list type="unknown"><item/></list></record>
return
    pre:build-nodeset($record)

Note: you might be interested in the functions available at 
http://www.xqueryfunctions.com/xq/. They are included in the distribution of 
MarkLogic Server 4.1..

Kind regards,
Geert

>


drs. G.P.H. (Geert) Josten
Consultant


Daidalos BV
Hoekeindsehof 1-4
2665 JZ Bleiswijk

T +31 (0)10 850 1200
F +31 (0)10 850 1199

mailto:[email protected]
http://www.daidalos.nl/

KvK 27164984

P Please consider the environment before printing this mail.
De informatie - verzonden in of met dit e-mailbericht - is afkomstig van 
Daidalos BV en is uitsluitend bestemd voor de geadresseerde. Indien u dit 
bericht onbedoeld hebt ontvangen, verzoeken wij u het te verwijderen. Aan dit 
bericht kunnen geen rechten worden ontleend.

> From: [email protected]
> [mailto:[email protected]] On Behalf Of
> Tim Meagher
> Sent: donderdag 4 maart 2010 4:43
> To: 'General Mark Logic Developer Discussion'
> Subject: [MarkLogic Dev General] Problem inserting default
> namespace in created XML document
>
> Hi Folks,
>
>
>
> I'm trying to take an XML document that refers to a DTD and
> to remove the DTD declaration and insert a default namespace.
>  I built a recursive function that goes thru each node:
>
>
>
> declare namespace pre = "http://mystuff.com/pre";;
>
>
>
> declare function pre:passthru-nodeset($x as node()) as node()* {
>     for $z in $x/(@* | node()) return pre:build-nodeset($z) };
>
>
>
> declare function pre:build-nodeset($x as node()) as node()* {
> (:Revise link counts, clean up link, add link attributes to
> mixed-citation:)
>     typeswitch ($x)
>     case text() return $x
>     case attribute () return $x
>     case element (record)
>         return
>             element record {
>             attribute xsi:schemaLocation { "/the-schema.xsd" },
>             attribute xmlns:xsi
> {"http://www.w3.org/2001/XMLSchema-instance"},
>             attribute xmlns {"http://mystuff.com/schema"},
>             pre:passthru-nodeset($x)}
>     case element ()
>         return element {string(local-name($x))} {
>             pre:passthru-nodeset($x)}
>     default return pre:passthru-nodeset($x) };
>
>
>
> The problem is that the resulting XML document from invoking
> pre:build-nodeset($record) looks something like this:
>
>
>
> <record xsi:schemaLocation="/APAthe-schema.xsd" id="1001"
>
>     xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
>
>     xmlns="http://mystuff.com/schema";>
>   <list xmlns="">
>     <item>
>        ...
>
>
>
> and when I try to validate the resulting document a
> validation error occurs because the default namespace has
> been renamed at the <list> element.  How can I remove the
> xmlns="" declaration from the <list> element?
>
>
>
> Thanks ahead of time,
>
>
>
> Tim Meagher
>
>
_______________________________________________
General mailing list
[email protected]
http://xqzone.com/mailman/listinfo/general

Reply via email to