|
Subject: RE: [xsl] Linenumbering & word index From: James Cummings <James.Cummings@xxxxxxxxxxxxxx> Date: Fri, 6 Aug 2004 14:15:36 +0100 (BST) |
On Thu, 5 Aug 2004, Michael Kay wrote:
> > But can't see how to get the word position whilst tokenizing the
> > whole lot? Everything I try doesn't work.
> >
>
> I think the clue here is that you need a data structure consisting of a list
> of (word, position) pairs. As soon as you need more than a linear sequence,
> it's probably a good idea to use a temporary tree. So you probably want
> something like:
>
> <xsl:variable name="words">
> <xsl:for-each select="tokenize(...)">
> <word value="{.}" position="{position()}"/>
> </
> </
>
> and then do further processing on this tree.
Ok, I'm horribly muddled now, sorry.
I understand I build a temporary tree $words which contains
a whole bunch of individual <word> elements for storing the
value of the word. I don't understand how position() helps
me since what I really want is poemnumber&linenumber? Unless
when processing $words I'm meant to go find the linenumber based
somehow on the position?
What I have currently that completely fails is:
--------------
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="/">
<!-- want: Word: 1:15, 4:12, etc. type of reference -->
<xsl:for-each-group select="$words" group-by=".">
<xsl:sort/>
<xsl:value-of select="word/@value"/> --
<xsl:for-each select="current-group()">
<a href="#{concat('poem',@poemnumber,'line',@linenumber)}">
<xsl:value-of select="@poemnumber"/>:<xsl:value-of
select="@linenumber"/></a>
</xsl:for-each>
</xsl:for-each-group>
</xsl:template>
<xsl:variable name="words">
<xsl:for-each select="tokenize(lower-case(string(translate(.,',.!:;',' '))),'\s+')[string(.)]">
<!-- How do I only match text in 'head' and 'l' elements rather than
all text? -->
<xsl:variable name="poemnumber">
<!-- How do I get poem number here? i.e. xsl:number
count="div[@type='poem'] when I was matching 'l' " -->
</xsl:variable>
<xsl:variable name="linenumber">
<!-- How do I get line number here? i.e. xsl:number
from="div[@type='poem'] when I was matching 'l'-->
</xsl:variable>
<word value="{.}" litposition="{position()}" poemnumber="$poemnumber"
linenumber="$linenumber"/>
</xsl:for-each>
</xsl:variable>
<!-- some of the things I don't want to match -->
<xsl:template match="teiHeader|foreign|p|milestone|gap" priority="-1" />
------------------
I'm sure I'm being dense, I'm just not used to doing things with
temporary trees.
Any more suggestions appreciated,
-James
---
Dr James Cummings, Oxford Text Archive, University of Oxford
James dot Cummings at oucs dot ox dot ac dot uk
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Parametrized includes -wo, Ralph Holz | Thread | Re: [xsl] Linenumbering & word inde, David Carlisle |
| Re: [xsl] testing 1st child, David Carlisle | Date | Re: [xsl] Parametrized includes -wo, David Carlisle |
| Month |