- From: James Clark <jjc@jclark.com>
- Date: Tue, 24 Aug 1999 08:15:24 +0700
- To: Denys Duchier <Denys.Duchier@ps.uni-sb.de>
- CC: xsl-list@mulberrytech.com, xsl-editors@w3.org
Denys Duchier wrote:
>
> Kay Michael <Michael.Kay@icl.com> writes:
>
> > > 1. the description of xsl:key fails to specify where the nodes that
> > > are being matched come from. I assume that they are all the nodes
> > > in the `primary' source document (does this also include attribute,
> > > namespace, text and processing instruction nodes?)
> >
> > No, they are the nodes of the document that contains the current node when
> > the key() function is invoked. But yes, they can be nodes of any type.
>
> If I understand you correctly, then each document, whether it is the
> `primary' one being transformed or a `secondary' one referred to by
> means of the document() function, has its own collection of keys.
Right. The description of the key() function says:
"...it returns a node-set
containing the nodes ***in the same document as the context node*** that
have a value for the named key equal to this string"
> Thus assuming the following variable declaration:
>
> <variable name="db" select="document('db.xml')"/>
>
> In order to get keys from secondary document $db, I must use an
> expression of the form:
>
> $db/key($name,$value)
>
> is that the intention?
Unfortunately, that's not allowed by the syntax. You have do do
something like:
<xsl:for-each select="document('db.xml')">
<xsl:apply-templates select="key($name,$value)"/>
</xsl:for-each>
> Does it not follow from this that I can never have a key that contains
> nodes from multiple documents?
>
> If a multi-document spanning key is desired, then it must be simulated
> by means of union expressions (thus forcing database merging to be
> expressed at each point of use rather than at the point of
> `definition').
Right. In this respect, key() is just like id().
James
Received on Monday, 23 August 1999 21:47:57 UTC