[MarkLogic Dev General] xhtml loading question

James Clippinger James.Clippinger at marklogic.com
Wed Aug 15 12:43:14 PDT 2007


Well, it depends.  I think most people keep attributes in the no
namespace unless there is a convincing reason to use a different
namespace.  On the search side, it would depend on your content format
and your business requirements, but doing global XPath on attributes
(e.g., //@size) tends to be rare, so name collisions of attributes are
generally less of a concern than element-name collisions.

Regards,
James

> -----Original Message-----
> From: general-bounces at developer.marklogic.com 
> [mailto:general-bounces at developer.marklogic.com] On Behalf Of 
> Helen Chen
> Sent: Wednesday, August 15, 2007 3:22 PM
> To: General Mark Logic Developer Discussion
> Subject: RE: [MarkLogic Dev General] xhtml loading question
> 
> 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" <James.Clippinger at marklogic.com> 
> 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: general-bounces at developer.marklogic.com
> > [mailto:general-bounces at developer.marklogic.com] 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" <James.Clippinger at marklogic.com>
> > 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: general-bounces at developer.marklogic.com
> > [mailto:general-bounces at developer.marklogic.com] 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 <James.Clippinger at marklogic.com >
> > 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: general-bounces at developer.marklogic.com
> > [mailto:general-bounces at developer.marklogic.com] 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
> > <James.Clippinger at marklogic.com > wrote: 
> > 
> > 				Dev, can you send the 
> > cts:search() call you're using for your search?
> > 				 
> > 				Thanks,
> > 				James
> > 
> > 
> > ________________________________
> > 
> > 				From:
> > general-bounces at developer.marklogic.com [mailto:
> > general-bounces at developer.marklogic.com] 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
> > <alexr at santafe.edu> 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
> > <James.Clippinger at marklogic.com > 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 
> > 				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 
> > 		
> > 		
> > 
> > 
> > _______________________________________________
> > 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
> 


More information about the General mailing list