Thanks for explain it. Is it good habit to make sure all the attributes for the element belong to the same namespace during loading? Or otherwise maybe attributes without namespace are easier for searching?
Helen >>> "James Clippinger" <[EMAIL PROTECTED]> 08/15/07 3:06 PM >>> Helen, default namespaces never apply to unprefixed attributes; attributes without a prefix are always in the no namespace. This is an XML specification (see http://www.w3.org/TR/2006/REC-xml-names-20060816/#defaulting) that has been carried through to XQuery. I don't know the reasoning behind that design decision by the recommendation writers and I personally dislike the differential treatment of elements vs. attributes, but it's how the language works. Regards, James > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf Of > Helen Chen > Sent: Wednesday, August 15, 2007 2:35 PM > To: General Mark Logic Developer Discussion > Cc: Helen Chen > Subject: RE: [MarkLogic Dev General] xhtml loading question > > Hi James, > > I'm interested in this topic and I have an question about the > namespace for the > attribute: > > At the data loading time, Dev declared namespace as > "http://www.w3.org/1999/xhtml > xdmp:document-insert("/content/htmlchk66.html", > <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" > lang="en"> <body> <meta name="org" content="abc-de" /> <meta > name="product" content="electronics" /> <meta > name="education" content="school" /> <meta name="test" > content="answer123" /> </body> > </html>) > > My understanding for namespace is: if you declare the > namespace, unless you change it or it goes out of the scope, > all the following elements and attributes belong to this namespace. > > But you mentioned that the attributes in Dev's data does not > have any namespace, I think I misunderstood the concept. Can > you explain it more? > > Thanks, Helen > > > > >>> "James Clippinger" <[EMAIL PROTECTED]> > 08/14/07 5:41 PM > >>> >>> > Dev, the syntax you used would associate the prefix "html" > with the XHTML namespace; you could use it like this: > > declare namespace html="http://www.w3.org/1999/xhtml" > > cts:search(xdmp:directory(('/'),"infinity"), > cts:and-query((cts:element-attribute-value-query(xs:QName("htm > l:meta"), > xs:QName("name"), > "org"),cts:element-attribute-value-query(xs:QName("html:meta"), > xs:QName("content"), "abc-de")))) > > Now, you could use the "default element namespace" syntax to set the > default: > > default element namespace="http://www.w3.org/1999/xhtml" > > cts:search(xdmp:directory(('/'),"infinity"), > cts:and-query((cts:element-attribute-value-query(xs:QName("meta"), > xs:QName("name"), > "org"),cts:element-attribute-value-query(xs:QName("meta"), > xs:QName("content"), "abc-de")))) > > However, this will return no results in your example, because > xs:QName() will, when given an unprefixed string, return > QNames in the default element namespace. This is the right > thing for the QNames being used as elements, but it causes > the attribute QNames not to match since they are in the no > namespace. This version would work: > > default element namespace="http://www.w3.org/1999/xhtml" > declare namespace no-namespace="" > > cts:search(xdmp:directory(('/'),"infinity"), > cts:and-query((cts:element-attribute-value-query(xs:QName("meta"), > xs:QName("no-namespace:name"), > "org"),cts:element-attribute-value-query(xs:QName("meta"), > xs:QName("no-namespace:content"), "abc-de")))) > > I think the html-prefix form is more intuitive than this one, > but it is legal XQuery and will work just fine. > > Regards, > James > > > > ________________________________ > > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf Of > Devadoss P > Sent: Tuesday, August 14, 2007 5:16 PM > To: General Mark Logic Developer Discussion > Subject: Re: [MarkLogic Dev General] xhtml loading question > > > Thanks James, it's working. > > I couldn't understand, why declaring default namespace > is not working in this case (declare namespace html = > "http://www.w3.org/1999/xhtml"). > > Is it because of xhtml namespace? > > Thanks, > Dev > > > > > On 8/14/07, James Clippinger <[EMAIL PROTECTED] > > wrote: > > Dev, you need to include the XHTML namespace in > the element QNames you create for use in the cts:search() if > you want the query to match those elements. This would work: > > cts:search(xdmp:directory(('/'),"infinity"), > cts:and-query((cts:element-attribute-value-query(fn:QName(" > http://www.w3.org/1999/xhtml <http://www.w3.org/1999/xhtml> > ", "meta"), xs:QName("name"), > "org"),cts:element-attribute-value-query(fn:QName(" > http://www.w3.org/1999/xhtml <http://www.w3.org/1999/xhtml> > ", "meta"), xs:QName("content"), "abc-de")))) > > Note that the attribute QNames don't require > namespace URIs because, having not been prefixed in the > original source, they are in the no namespace. If you wanted > to use the fn:QName() function for consistency, this form also works: > > cts:search(xdmp:directory(('/'),"infinity"), > cts:and-query((cts:element-attribute-value-query(fn:QName(" > http://www.w3.org/1999/xhtml <http://www.w3.org/1999/xhtml> > ", "meta"), fn:QName("", "name"), > "org"),cts:element-attribute-value-query(fn:QName(" > http://www.w3.org/1999/xhtml <http://www.w3.org/1999/xhtml> > ", "meta"), fn:QName("", "content"), "abc-de")))) > > Regards, > James > > > ________________________________ > > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf Of > Devadoss P > Sent: Tuesday, August 14, 2007 4:49 PM > > To: General Mark Logic Developer Discussion > Subject: Re: [MarkLogic Dev General] > xhtml loading question > > > > > James, > > This is the query used to load the document, > xdmp:document-insert("/content/htmlchk66.html", > <html xmlns="http://www.w3.org/1999/xhtml " > xml:lang="en" lang="en"> > <body> > <meta name="org" content="abc-de" /> > <meta name="product" content="electronics" /> > <meta name="education" content="school" /> > <meta name="test" content="answer123" /> > </body> > </html>) > > and my cts query is > cts:search(xdmp:directory(('/'),"infinity"), > cts:and-query((cts:element-attribute-value-query(xs:QName("meta"), > xs:QName("name"), > "org"),cts:element-attribute-value-query(xs:QName("meta"), > xs:QName("content"), "abc-de")))) > > This query returns result, if I load > document without xmlns. > > Thanks, > Dev > > > On 8/14/07, James Clippinger > <[EMAIL PROTECTED] > wrote: > > Dev, can you send the > cts:search() call you're using for your search? > > Thanks, > James > > > ________________________________ > > From: > [EMAIL PROTECTED] [mailto: > [EMAIL PROTECTED] On Behalf Of Devadoss P > Sent: Tuesday, August 14, 2007 4:33 PM > To: General Mark Logic Developer > Discussion > Subject: Re: [MarkLogic Dev > General] xhtml loading question > > > > James and Mike, > > How to resolve > (xmlns="http://www.w3.org/1999/xhtml") namespace conflict in > xquery; I loaded html document (which has xmlns namespce > defined) to MarkLogic and tried to query its element by using > cts:search(), but it returns empty row. > > Can you help me to resolve > namespace issue? > > Thanks, > Dev > > > On 8/14/07, Alex Rice > <[EMAIL PROTECTED]> wrote: > > James and Michael: > > i had not even thought of namespaces. > now I am getting nodes back and > can use the declare namespace > feature etc. Thank you both for > responding. > > Alex Rice > > > On 8/14/07, James Clippinger > <[EMAIL PROTECTED] > wrote: > > Alex, I'm not familiar with > the XHTML created by Dreamweaver or UpCast, > > but I suspect the XHTML > elements both tools create are in the XHTML > > namespace. Try this (keeping > in mind the wildcard-namespace syntax may > > be slow): > > > > > doc("/SFI/Update/news/articletest2/test.xml")//*:p > > > > If it returns items, you can > see which namespace each item is in and go > > from there. > > > > Regards, > > James > > > > _______________________________________________ > General mailing list > [email protected] > > http://xqzone.com/mailman/listinfo/general > > > > > > _______________________________________________ > General mailing list > [email protected] > > http://xqzone.com/mailman/listinfo/general > > > > > > _______________________________________________ > General mailing list > [email protected] > http://xqzone.com/mailman/listinfo/general > > > > > _______________________________________________ > General mailing list > [email protected] > http://xqzone.com/mailman/listinfo/general > _______________________________________________ General mailing list [email protected] http://xqzone.com/mailman/listinfo/general _______________________________________________ General mailing list [email protected] http://xqzone.com/mailman/listinfo/general
