Christian, thank you very much - this difference is what I missed, and it is really important.
So - doc() and collection() work in two steps:
(a) try to interpret the argument URI as a "database resource URI" (defined to be the concatenation of database name and database path), locating a database document or directory
(b) if no database documents were located (that is - the argument is no valid database resource URI): interpret the URI as a file:// URI, locating a file or directory.
Concerning the default collection, I only just now discovered the difference between the function db:open and the command <open name="...">: the command changes the dynamic context for a subsequent query, making the documents of the opened db the default collection - whereas db:open does not change the dynamic context. (Well - otherwise it would not be side-effect free.)
One more question: Does the open-command change the dynamic context of subsequent queries in any other way except for setting the default collection?
Cheers, Hans-Juergen
________________________________ Von: Christian Grün christian.gruen@gmail.com An: Hans-Juergen Rennau hrennau@yahoo.de CC: Base X basex-talk@mailman.uni-konstanz.de Gesendet: 4:07 Samstag, 7.Juli 2012 Betreff: Re: [basex-talk] db:open and collection()
Hi Hans-Jürgen,
it seems to me that function db:open() and collection() are equivalent. [...]
the main difference of the collection() and doc() functions is that they can also access local resources: you may as well use them to create a temporary main-memory collection from all files found at the given local file path [1]. In other words, db:open() will be a little bit more efficient, and cause no surprises, if you know that your files are stored in a database.
Hope this helps, Christian