[xquery-talk] Newbie Q: Namespace Handling
Priscilla Walmsley
pwalmsley-lists at datypic.com
Thu May 3 13:19:03 PDT 2007
Similarly, IE 6 does not properly italicize this:
<html:html xmlns:html="http://www.w3.org/1999/xhtml">
<html:body>
<html:p>Hello <html:i>world</html:i>!</html:p>
</html:body>
</html:html>
...but works fine if you take the prefix off the <i> tags.
I have had to go out my way to "unprefix" HTML elements (using Michael's
option c) when querying/transforming input documents that included prefixed
HTML elements.
Priscilla
> -----Original Message-----
> From: talk-bounces at x-query.com
> [mailto:talk-bounces at x-query.com] On Behalf Of Michael Rys
> Sent: Wednesday, May 02, 2007 9:13 PM
> To: Sall, Kenneth B.; Michael Kay; talk at x-query.com
> Subject: RE: [xquery-talk] Newbie Q: Namespace Handling
>
> That is because many of Google's tools (and other people, not
> to pick on Google alone here) have no clue of real XML
> namespace handling (well there are exceptions but this is a
> prime example).
>
> Best regards
> Michael
>
> > -----Original Message-----
> > From: talk-bounces at x-query.com
> [mailto:talk-bounces at x-query.com] On Behalf
> > Of Sall, Kenneth B.
> > Sent: Wednesday, May 02, 2007 3:54 PM
> > To: Michael Kay; talk at x-query.com
> > Subject: RE: [xquery-talk] Newbie Q: Namespace Handling
> >
> > Thank you, Michael. I will submit this to W3C.
> >
> > Meanwhile, I tried revising the basic KML (Google Earth) example at
> > http://code.google.com/apis/kml/documentation/kml_tut.html#basic_kml
> > to use a namespace prefix, like so:
> >
> > <?xml version="1.0" encoding="UTF-8"?>
> > <ge:kml xmlns:ge="http://earth.google.com/kml/2.1">
> > <ge:Folder>
> > <ge:Placemark>
> > <ge:name>Simple placemark</ge:name>
> > <ge:description>Attached to the ground.
> Intelligently places
> > itself
> > at the height of the underlying terrain.
> > </ge:description>
> > <ge:Point>
> > <ge:coordinates>-
> > 122.0822035425683,37.42228990140251,0</ge:coordinates>
> > </ge:Point>
> > </ge:Placemark>
> > </ge:Folder>
> > </ge:kml>
> >
> >
> > Surprisingly, Google Earth thinks the root <kml> element is
> "missing or
> > bad"! I'll try the other options you've suggested, especially (c).
> >
> > Ken Sall
> >
> > -----Original Message-----
> > From: Michael Kay [mailto:mike at saxonica.com]
> > Sent: Wednesday, May 02, 2007 6:18 PM
> > To: Sall, Kenneth B.; talk at x-query.com
> > Subject: RE: [xquery-talk] Newbie Q: Namespace Handling
> >
> >
> > When you do
> >
> > <kml xmlns="http://earth.google.com/kml/2.1">
> >
> > the default namespace declaration affects the contained
> path expressions,
> > so
> > in
> >
> > doc("namespace.xml")//bar
> >
> > you are selecting bar elements in namespace
> > http://earth.google.com/kml/2.1
> >
> > There's a good reason XQuery was done this way, it was an
> attempt to avoid
> > the problems that people have with default namespace
> handling in XSLT 1.0,
> > where a default namespace declaration *doesn't* affect
> unprefixed names in
> > path expressions. But it makes it very difficult to handle
> your scenario,
> > where the source document is in no namespace but you want
> result elements
> > to
> > be in a default (unprefixed) namespace. In fact it's because of this
> > scenario that XSLT 1.0 was designed the way it was...
> >
> > I think this is a serious usability problem with XQuery 1.0
> as defined and
> > it needs to be addressed in XQuery 1.1. (Please feel free
> to file this as
> > a
> > comment against the spec - they carry more weight when they
> come from
> > users.)
> >
> > In the meantime, I think your best option is probably to
> avoid using the
> > default namespace in the result document: use a prefixed namespace
> > instead.
> > If you really need the result document to use the default
> namespace, then
> > postprocess it to change the prefix.
> >
> > If you can't do that, some other possible workarounds are:
> >
> > (a) put the contained query
> >
> > for $i in doc("namespace.xml")//bar return $i
> >
> > into a function or a variable where the namespace context
> can be different
> >
> > (b) use doc("namespace.xml")//*:bar
> >
> > which will select elements with local name "bar" in any
> namespace or none
> >
> > (c) generate the output elements with a computed element constructor
> >
> > element {xs:QName("kml")}{
> > element {xs:QName("Folder"){ {
> > ... etc ...
> >
> > Michael Kay
> > http://www.saxonica.com/
> >
> > > -----Original Message-----
> > > From: talk-bounces at x-query.com
> > > [mailto:talk-bounces at x-query.com] On Behalf Of Sall, Kenneth B.
> > > Sent: 02 May 2007 22:52
> > > To: talk at x-query.com
> > > Subject: [xquery-talk] Newbie Q: Namespace Handling
> > >
> > > Hello all.
> > >
> > > I've having difficulty outputting the correct default
> > > namespace from a query. I'm using SaxonB 8.9J on Windows XP
> > > with jre 1.6.0_01.
> > >
> > > With this trivial input:
> > >
> > > <?xml version="1.0" encoding="UTF-8"?>
> > > <bar>foobar</bar>
> > >
> > > and trivial XQuery #1:
> > >
> > > <kml>
> > > <Folder>
> > > {
> > > for $i in doc("namespace.xml")//bar
> > > return $i
> > > }
> > > </Folder>
> > > </kml>
> > >
> > > I get the result #1:
> > >
> > > <?xml version="1.0" encoding="UTF-8"?>
> > > <kml>
> > > <Folder>
> > > <bar>foobar</bar>
> > > </Folder>
> > > </kml>
> > >
> > > However, I want the opening <kml> to appear as:
> > >
> > > <kml xmlns="http://earth.google.com/kml/2.1">
> > >
> > > With XQuery #2:
> > >
> > > <kml xmlns="http://earth.google.com/kml/2.1">
> > > <Folder>
> > > {
> > > for $i in doc("namespace.xml")//bar
> > > return $i
> > > }
> > > </Folder>
> > > </kml>
> > >
> > > I get result #2:
> > >
> > > <?xml version="1.0" encoding="UTF-8"?>
> > > <kml xmlns="http://earth.google.com/kml/2.1">
> > > <Folder/>
> > > </kml>
> > >
> > > Which isn't correct for the <Folder> content.
> > >
> > > I've also tried adding a default namespace declaration to
> XQuery #2:
> > >
> > > declare default element namespace
> "http://earth.google.com/kml/2.1";
> > >
> > > but that has no impact; I still get result #2.
> > >
> > > What am I missing? Thanks in advance for any clarification
> > > about namespace handling.
> > >
> > > Kenneth B. Sall
> > > XML Data and Systems Analyst
> > > Advanced Systems and Concepts
> > > Science Applications International Corp. (SAIC)
> > > 7125 Columbia Gateway Dr., Suite 250
> > > Columbia, MD 21046
> > > 410-953-7016 (office)
> > > 410-300-2997 (mobile)
> > >
> > > _______________________________________________
> > > talk at x-query.com
> > > http://x-query.com/mailman/listinfo/talk
> >
> > _______________________________________________
> > talk at x-query.com
> > http://x-query.com/mailman/listinfo/talk
>
> _______________________________________________
> talk at x-query.com
> http://x-query.com/mailman/listinfo/talk
>
>
More information about the talk
mailing list