- From: Per Bothner <per@bothner.com>
- Date: Tue, 21 Oct 2003 16:18:46 -0700
- To: james anderson <james.anderson@setf.de>
- Cc: www-ql@w3.org
james anderson wrote:
>
> On Tuesday, Oct 21, 2003, at 21:15 Europe/Berlin, Per Bothner wrote:
>> I don't know what "first-class names" refers to, so I don't know if
>> I'm not thinking about it ...
>
>
> "first class" in the standard sense: data which can be passed, bound,
> and returned.
Yes, but how are your "first class names" different from QNames, which
can be passed, bound, and returned in XQuery?
Btw, QNames in Qexo are implmented using a class called Symbol, which is
also used for the JEmacs (Emacs Lisp) and (embryonic) Common Lisp
implementations that are also part of Kawa. So I am quite familiar with
first-class names.
Your implementation is of course a very natural one when using Common
Lisp. However, it is not particularly space-efficient one, since you
appear to use a CLOS object for each node. (This is similar to using
DOM, of course.) I'm aiming for a much more space-efficient implementation.
Also note that XQuery requires that $b and $c/b must be two *different*
nodes. Specifically, the parent of $b is $a, while the parent of $c/b
is $c. Conceptually you must copy the $b node when evaluating
<c>{$b}</c>. That means that if $b and hence $c/b has a sub-element
that uses the ns1 prefix, you can't find it by looking up the parent
chain to get to $a.
> inscope-namespaces($B)
> -> (#<NS-NODE ns2 -> NS2 #x12B1956> #<NS-NODE ns3 -> NS3 #x12C3B2E>)
I don't think this is acceptable.
What you've left out is what algorithm write-node uses to select where
to put the namespace attributes. My guess is that when it prints an
element that uses a namespace prefix that it hasn't yet printed a
definition for then it searches up the parent links for a matching
binding in the namespaces slot. Is that correct?
That works, but consider:
let $a := <a xmlns:ns1="NS1"><b><ns1:bx/><ns1:by/></b></a>
return $a/b
This can print as either:
<b xmlns:ns1="NS1"><ns1:bx/><ns1:by/></b>
or:
<b><ns1:bx xmlns:ns1="NS1"/><ns1:by xmlns:ns1="NS1"/></b>
Both are valid, but I would much prefer the former. My algorithm does
that. I think it would be difficult for your algorithm to do that
without an extra pass.
--
--Per Bothner
per@bothner.com http://per.bothner.com/
Received on Tuesday, 21 October 2003 19:21:35 UTC