[MarkLogic Dev General] Problem inserting defaultnamespaceincreated XML document fixed, but validation fails

Tim Meagher tim at aaom.net
Sat Mar 6 16:26:23 PST 2010


Hi Geert,

 

I was receiving neither of these errors.  As it turns out, I had neglected
to use the QName to create the root element (I was fashioning it separately
from the rest of the nodeset in my code), even though one of the attributes
was the xmlns reference (which is why I thought it wouldn't have a problem).

 

Thank you for your help!

 

Tim

 

-----Original Message-----
From: general-bounces at developer.marklogic.com
[mailto:general-bounces at developer.marklogic.com] On Behalf Of Geert Josten
Sent: Thursday, March 04, 2010 2:39 PM
To: General Mark Logic Developer Discussion
Subject: RE: [MarkLogic Dev General] Problem inserting
defaultnamespaceincreated XML document fixed, but validation fails

 

Hi Tim,

 

If the schema is not found, an XDMP-UNDSCHMAT will be thrown. If the
namespace doesn't match the one in the schema, an XDMP-SCHMNSMISMATCH is
thrown.

 

What result are you expecting and what are you getting?

 

Kind regards,

Geert

 

> -----Original Message-----

> From: general-bounces at developer.marklogic.com 

> [mailto:general-bounces at developer.marklogic.com] On Behalf Of 

> Tim Meagher

> Sent: donderdag 4 maart 2010 19:10

> To: 'General Mark Logic Developer Discussion'

> Subject: RE: [MarkLogic Dev General] Problem inserting 

> default namespaceincreated XML document fixed, but validation fails

> 

> Tried it with no success.  I'm not sure if it is adequately 

> locating the schema.

> 

>  

> 

> ________________________________

> 

> From: general-bounces at developer.marklogic.com 

> [mailto:general-bounces at developer.marklogic.com] On Behalf Of 

> Geert Josten

> Sent: Thursday, March 04, 2010 1:01 PM

> To: General Mark Logic Developer Discussion

> Subject: RE: [MarkLogic Dev General] Problem inserting 

> default namespaceincreated XML document fixed, but validation fails

> 

>  

> 

> Hi Tim,

> 

>  

> 

> Just add the following:

> 

>  

> 

> import schema "http://mystuff.com/schema" at "/the-schema.xsd";

> 

>  

> 

> Kind regards,

> 

> Geert

> 

>  

> 

>     

> ________________________________

> 

> 

>     From: general-bounces at developer.marklogic.com 

> [mailto:general-bounces at developer.marklogic.com] On Behalf Of 

> Tim Meagher

>     Sent: donderdag 4 maart 2010 18:49

>     To: 'General Mark Logic Developer Discussion'

>     Subject: RE: [MarkLogic Dev General] Problem inserting 

> default namespace increated XML document fixed, but validation fails

> 

>     Hi Geert,

> 

>      

> 

>     This time I'm actually specifying a namespace as in the 

> XML that gets created in the example below, e.g. 

> 

>      

> 

>     <record xsi:schemaLocation="/the-schema.xsd" id="1001"

> 

>          xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance

> 

>          xmlns="http://mystuff.com/schema">

> 

>       <list>

> 

>          <item>

> 

>            ...

> 

>      

> 

>     Where "the-schema.xsd" is loaded in the root of the 

> Schemas database.

> 

>      

> 

>     I'm looking for validation syntax and trying to see if 

> I need to declare the targetNamespace in the schema.  I just 

> can't get this puppy to validate!

> 

>      

> 

>     Thanks!

> 

>      

> 

>     Tim

> 

>      

> 

>     -----Original Message-----

>     From: general-bounces at developer.marklogic.com 

> [mailto:general-bounces at developer.marklogic.com] On Behalf Of 

> Geert Josten

>     Sent: Thursday, March 04, 2010 12:21 PM

>     To: General Mark Logic Developer Discussion

>     Subject: RE: [MarkLogic Dev General] Problem inserting 

> default namespace increated XML document fixed, but validation fails

> 

>      

> 

>     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: general-bounces at developer.marklogic.com 

> 

>     > [mailto:general-bounces at developer.marklogic.com] 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: general-bounces at developer.marklogic.com 

> 

>     > [mailto:general-bounces at developer.marklogic.com] 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:geert.josten at daidalos.nl

> 

>     > 

> 

>     > 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: general-bounces at developer.marklogic.com

> 

>     > 

> 

>     > > [mailto:general-bounces at developer.marklogic.com] 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

> 

>     > 

> 

>     > General at developer.marklogic.com

> 

>     > 

> 

>     > http://xqzone.com/mailman/listinfo/general

> 

>     > 

> 

>     > _______________________________________________

> 

>     General mailing list

> 

>     General at developer.marklogic.com

> 

>     http://xqzone.com/mailman/listinfo/general

> 

> _______________________________________________

General mailing list

General at developer.marklogic.com

http://xqzone.com/mailman/listinfo/general

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://xqzone.marklogic.com/pipermail/general/attachments/20100306/5f764346/attachment-0001.html


More information about the General mailing list