Hi Helen, I personally prefer base-uri, as it navigates up to the root itself if necessary. You can read more about the two functions here:
http://developer.marklogic.com/pubs/4.1/apidocs/AccessorBuiltins.html#fn:document-uri (particularly read Summary and User Notes) Kind regards, Geert > -----Original Message----- > From: general-boun...@developer.marklogic.com > [mailto:general-boun...@developer.marklogic.com] On Behalf Of > Helen Chen > Sent: woensdag 20 januari 2010 22:05 > To: General Mark Logic Developer Discussion > Cc: Helen Chen > Subject: Re: [MarkLogic Dev General] question about cts:search > > Hi Geert, > > I run your query > for $doc in doc()/ns1:article//ns1:sub[not(@temp1 or @temp2)] > let $uri := try { base-uri($doc) } catch ($e) { () } where > not($uri) return > $doc > > and it returns empty sequence. > ------------ > > if I take "not" out in the where clause, like for $doc in > doc()/ns1:article//ns1:sub[not(@temp1 or @temp2)] let $uri := > try { base-uri($doc) } catch ($e) { () } where ($uri) return > $doc > > I got 7 nodes out, these nodes only have attributes, no sub > nodes inside, like <ns1:sub file="1"/>, and they are all in > the same xml file, the xml is: /pt/ajr_1.xml > > -------------- > I actually can run > > doc()/ns1:article//ns1:sub[not(@temp1 or @temp2)]/fn:root(.) > > and it returns the root of file /pt/ajr_1.xml, and only one > result node > > --------- > but I cannot run > doc()/ns1:article//ns1:sub[not(@temp1 or @temp2)]/fn:document- > uri(fn:root(.)) > > > I thought it was because of multiple node returned, but when I use > fn:root(.) at the end, it returns only one node, so it must be > something else. > > when I do : doc()/ns1:article//ns1:sub[not(@temp1 or @temp2)]/ > fn:document-uri(.) > it returns empty sequence > > when I do: doc()/ns1:article//ns1:sub[not(@temp1 or @temp2)]/ > fn:document-uri(fn:root(.)) > it gives error > > when I do: doc()/ns1:article//ns1:sub[not(@temp1 or @temp2)]/ > fn:document-uri(fn:root(.)/ns1:article) > this query makes sure only one node for > fn:document-uri() function, but it returns empty sequence > > It seems that fn:root() pass root element to the > fn:document-uri() and > it does not like it, if I pass node to it, it returns empty > sequence. > Can we use fn:document-uri() or fn:base-uri() at the end of query? > > > Thanks, Helen > > > On Jan 20, 2010, at 3:33 PM, Geert Josten wrote: > > > Hi Helen, > > > >> I changed and I got the same error as when I use fn:base-uri(.) > >> > >> Description: XDMP-NOTANODE: doc()/child::ns1:article/ > >> descendant::ns1:sub[not(attribute::temp1 or > >> attribute::temp2)]/document-uri(root(.)) -- > >> xs:anyURI("/pt/ajr_1.xml") is not a node > >> > >> The result is really only one document, but it seems that > I cannot > >> put > >> fn:document-uri at the end of the query. > > > > This is actually quite strange. Doc() always returns nodes > or empty > > sequence, child always returns nodes or empty sequence, descendant > > always returns nodes or empty sequence, so this is very > odd. Even a > > text or binary document would result in a node. > > > > Could you try the following to figure out which document is > causing > > the trouble? > > > > for $doc in doc()/ns1:article//ns1:sub[not(@temp1 or @temp2)] > > let $uri := try { base-uri($doc) } catch ($e) { () } > > where not($uri) > > return > > $doc > > > > Kind regards, > > Geert > > > > > > Drs. G.P.H. Josten > > Consultant > > > > > > http://www.daidalos.nl/ > > Daidalos BV > > Source of Innovation > > Hoekeindsehof 1-4 > > 2665 JZ Bleiswijk > > Tel.: +31 (0) 10 850 1200 > > Fax: +31 (0) 10 850 1199 > > http://www.daidalos.nl/ > > KvK 27164984 > > De informatie - verzonden in of met dit emailbericht - 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. > > > > > > > > _______________________________________________ > > General mailing list > > General@developer.marklogic.com > > http://xqzone.com/mailman/listinfo/general > > _______________________________________________ > General mailing list > General@developer.marklogic.com > http://xqzone.com/mailman/listinfo/general > _______________________________________________ General mailing list General@developer.marklogic.com http://xqzone.com/mailman/listinfo/general