|
[XQuery Talk Mailing List Archive Home] [By Date] [By Thread] [By Subject] [By Author] [Recent Entries] [Reply To This Message] Newbie Q: Namespace HandlingPriscilla Walmsley pwalmsley-lists at datypic.comThu 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: http://x-query.com/mailman/listinfo/talk > [mailto:http://x-query.com/mailman/listinfo/talk] On Behalf Of Michael Rys > Sent: Wednesday, May 02, 2007 9:13 PM > To: Sall, Kenneth B.; Michael Kay; http://x-query.com/mailman/listinfo/talk > Subject: RE: 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: http://x-query.com/mailman/listinfo/talk > [mailto:http://x-query.com/mailman/listinfo/talk] On Behalf > > Of Sall, Kenneth B. > > Sent: Wednesday, May 02, 2007 3:54 PM > > To: Michael Kay; http://x-query.com/mailman/listinfo/talk > > Subject: RE: 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:http://x-query.com/mailman/listinfo/talk] > > Sent: Wednesday, May 02, 2007 6:18 PM > > To: Sall, Kenneth B.; http://x-query.com/mailman/listinfo/talk > > Subject: RE: 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: http://x-query.com/mailman/listinfo/talk > > > [mailto:http://x-query.com/mailman/listinfo/talk] On Behalf Of Sall, Kenneth B. > > > Sent: 02 May 2007 22:52 > > > To: http://x-query.com/mailman/listinfo/talk > > > Subject: 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) > > > > > > _______________________________________________ > > > http://x-query.com/mailman/listinfo/talk > > > http://x-query.com/mailman/listinfo/talk > > > > _______________________________________________ > > http://x-query.com/mailman/listinfo/talk > > http://x-query.com/mailman/listinfo/talk > > _______________________________________________ > http://x-query.com/mailman/listinfo/talk > http://x-query.com/mailman/listinfo/talk > >
|
Purchase Stylus Studio Online Today!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|






