Hi Tim,
I looked into that earlier. To summarize this is what you need:
declare default element namespace "";
import schema "" at "/my-schema.xsd";
validate strict {
$mydoc
}
More details can be found here http://markmail.org/message/qauezioxxmyp64kd,
comments from Mary on the same thread may also interest you..
Kind regards,
Geert
> -----Original Message-----
> From: [email protected]
> [mailto:[email protected]] On Behalf Of
> Tim Meagher
> Sent: donderdag 4 maart 2010 18:12
> To: 'General Mark Logic Developer Discussion'
> Subject: RE: [MarkLogic Dev General] Problem inserting
> default namespace in created XML document fixed, but validation fails
>
> Hi Geert,
>
>
>
> Thanks for the info. The thing that helped me most was using
> the QName function when creating the elements. I thought
> this would fix a problem I'm having with validating content
> using a default namespace and schema location, but that's not
> the case. I could use an example of using marklogic to
> validate an xml file against a schema where the xml document
> only contains the default namespace declaration. That
> includes making sure the schema is configured correctly and
> that the appropriate declarations exists in the xquery code.
> The schema is loaded in the Schemas database.
>
>
>
> Tim
>
>
>
> -----Original Message-----
> From: [email protected]
> [mailto:[email protected]] On Behalf Of
> Geert Josten
> Sent: Thursday, March 04, 2010 2:13 AM
> To: General Mark Logic Developer Discussion
> Subject: RE: [MarkLogic Dev General] Problem inserting
> default namespaceincreated XML document
>
>
>
> 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
>
> _______________________________________________
General mailing list
[email protected]
http://xqzone.com/mailman/listinfo/general