- From: Per Bothner <per@bothner.com>
- Date: Sun, 08 Feb 2004 08:06:39 -0800
- To: Don Chamberlin <chamberl@almaden.ibm.com>
- Cc: public-qt-comments@w3.org
Don Chamberlin wrote:
> Both the "import schema" and "import module" clauses will be modified
> so that they take a single "target namespace" (a URI) and zero or more
> "location hints" (also URIs). It will be an error for two "import
> schema" clauses, or two "import module" clauses, to specify the same
> target namespace. The location hints may be interpreted (or ignored) in
> an implementation-dependent way. Thus, for example, if a module with
> target namespace "A" is defined by two physical resources at locations
> "B" and "C", a user might write:
>
> import module "A" at "B", "C";
>
> Each of the physical resources imported must contain a syntactically
> valid module definition that specifies the expected target namespace.
> However, if two different resources define the same qualified name (for
> example, two definitions for an element named a:foo), an error is raised.
>
> The new rules will appear in the next XQuery Working Draft. Please let
> us know if you are satisfied with this resolution of your issue.
Not fully. There is still the issue: is it possible to write portable
library modules, without having to modify them for each platform?
If the language allows only a single "physical resource" containing a
single module definition for any given namespace, then it is easy to
define a mapping from namespace to resource location. The namespace can
be mapped to a unique classname or relative filename.
If there can multiple physical resources for a given namespace, then the
implementation cannot use the namespace alone to locate the module. It
must use the location hints, or an external configuration file or
database. Neither is portable. One should be able to "deploy" a set of
modules into a directory, and have XQuery be able to find them without
having to edit each source file or a configuration file. (I might have
to edit a configuration file to specify a search path, but I shouldn't
have to do that for each module.)
A suggestion: how about a non-normative addendum suggeting a convention
for file layout and location hints? This would be similar to the
specification in Chapter 7 of the Java language specification:
http://java.sun.com/docs/books/jls/second_edition/html/packages.doc.html#37758
My suggestion:
A module is referenced using a "module name", which is a URI (absolute
or relative). How an implementation "deferences" a module name to get
an actual module is implementation dependent: implementations may
support "file:" and "http:" URLs with the usual meaning; they may
resolve a relative URI using an implementation-defined base URI; they
may provide a mechanism to map a URI prefix to some other URI prefix or
a "search path". An implementation may also map an "extension"
representing an XQuery source file (".xql" or ".xq" should be
recognized) to other extensions used for pre-compiled modules.
The Base URI of a module if a base uri isn't explicitly specified should
be its module name.
If a location hint in a import module or import schema is a relative URI
it should by default be resolved relative to the importing module's Base
URI. An implementation may also support specifing a search path for
relative URIs. A location hint with an absolute URI may be found as
above. For best portability it is recommended to specify location
hints, and to use relative URIs that look like source file references.
E.g.:
import module "http://x.org/math" at "utils/trig.xql";
There need not be any relationship between module names and the target
namespace of an imported module.
(I don't see any way to find a module given just it target namespace and
no location hints, except using an implementation-specific table or
database, given that modules are not identified by their target namespace.)
--
--Per Bothner
per@bothner.com http://per.bothner.com/
Received on Sunday, 8 February 2004 11:06:43 UTC