This discussion of keys and predicates raises an issue I had been
pondering. I've working on some documents
where the cross-references are entered but without the target specified.
I've got ids on each of the main entries
(which will be the targets), but I need to look them up in order to find
the right things.
So I've got an input structure like this:
<e eid="e0001"><hg><hw>keyword</hw></hg><se1>...</se1></e>
...
<e eid="e1234"><hg><hw>different_keyword</hw></hg><se1>... <xg>See also
<xr>keyword</xr></xg>...</se1></e>
where the <xr> element "keyword" needs to link to the <e> element where the
<hw> is "keyword".
I'm thinking that I can set up a key like
<xsl:key name="headwords" match="hw" use="ancestor::e/@eid" />
and then reference it in my xr template like
<xsl:attribute name="href"><xsl:text>#</xsl:text><xsl:apply-templates
select="key('headwords',ancestor::e/@eid)" /></xsl:attribute>
Does that sound right?
Now, an additional twist:
Sometimes I've got several headwords that are identical except for the
homograph numbers, like so:
<e eid="e0003"><hg><hw>keyword</hw><hom>1</hom></hg><se1>...</se1></e>
<e eid="e0004"><hg><hw>keyword</hw><hom>2</hom></hg><se1>...</se1></e>
<e eid="e0005"><hg><hw>keyword</hw><hom>3</hom></hg><se1>...</se1></e>
and these are referenced like so:
<e eid="e2345"><hg><hw>different_keyword</hw></hg>... <xg>See also
<xr>keyword</xr><hom>1</hom></xg>...</e>
Is there a way to include those homograph numbers in the key and in the
cross-reference so that I get the
correct (I hope unique) link?
Thanks again for all of your help!
At 12:35 PM 5/5/03, you wrote:
Didier,
You want the current() function, which returns the current node (typically
the node that has matched the template) irrespective of what the context
node happens to be (e.g. inside a predicate, where the context node has
changed).
So:
<xsl:apply-templates
select="//rdf:description[(_at_)about=current()/@xlink:href]" />
But you'd get better performance using a key:
<xsl:key name="descs-by-about" match="rdf:description" use="@about"/>
Then
<xsl:apply-templates select="key('descs-by-about',@xlink:href)"/>
Enjoy,
Wendell
--Chris
----------------------------------------------------------------------------------------
Texterity ~ XML and PDF ePublishing Services
----------------------------------------------------------------------------------------
Chris Loschen, XML Developer
Texterity, Inc.
144 Turnpike Road
Southborough, MA 01772 USA
tel: +1.508.804.3033
fax: +1.508.804.3110
email: loschen(_at_)texterity(_dot_)com
http://www.texterity.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list