Hi Doug,
I tried your query, I think when the xpath returns mode than one node,
it will fail, but if I add for loop to it , it works fine.
I think the trouble for me now is: everyone thinks putting the
function base-uri(), document-uri() or xdmp:node-uri() at the end of
xpath should work, but I cannot make it work. I'm going to setup
another test enviroment with marklogic4 and then see if there is any
difference.
I'll keep everyone posted.
Thanks for everyone's help.
Helen
On Jan 20, 2010, at 5:37 PM, Glidden, Douglass A wrote:
Helen,
I'm not sure this will make a difference, but try these alternatives:
fn:base-uri(doc()/ns1:article//ns1:sub[not(@temp1 or @temp2)])
fn:document-uri(doc()[ns1:article//ns1:sub[not(@temp1 or @temp2)]])
I'm not sure (internally) how this usage differs from the other, so
it may or may not work. In the document-uri case, I made a change
to the XPath to avoid having to use root function, but you can try
either way.
Doug Glidden
Software Engineer
The Boeing Company
[email protected]
-----Original Message-----
From: [email protected] [mailto:[email protected]
] On Behalf Of Helen Chen
Sent: Wednesday, January 20, 2010 16:56
To: General Mark Logic Developer Discussion
Cc: Helen Chen
Subject: Re: [MarkLogic Dev General] question about cts:search
Hi Geert,
Thanks. Now I understand why sometimes when I use document-uri() and
it returns empty sequence, that's because it is not document element.
So I did the following test:
-------------
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
it returns empty sequence
-----------------------
for $i in doc()/ns1:article//ns1:sub[not(@temp1 or @temp2)] return
base-uri($i)
it returns 7 uris and they are actually the same uri (/pt/
ajr_1.xml), just because there are 7 ns1:sub nodes found.
------------------
when I tried to run
doc()/ns1:article//ns1:sub[not(@temp1 or @temp2)]/fn:base-uri(.)
I got error :
Description: XDMP-NOTANODE: doc()/child::ns1:article/
descendant::ns1:sub[attribute::temp1 or attribute::temp2]/base-uri(.)
-- xs:anyURI("/pt/ajr_1.xml") is not a node
the base-rui() function returns type anyURI, not a node, is this
what it complains?
Thanks, Helen
On Jan 20, 2010, at 4:19 PM, Geert Josten wrote:
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: [email protected]
[mailto:[email protected]] 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
[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