More on XSLT applications to TEI --
At 04:37 AM 1/20/2004, Michael Beddow wrote:
>... Without going too far into the
>details of this particular example material, I would suggest keeping
>Wendell's general template invocation and testing the @who value within it,
>like so:
>
><xsl:template match="sp/p">
><p>
><xsl:if test="not(preceding-sibling::p)"><b>
><!-- speaker specific stuff: -->
><xsl:choose>
><!-- Within this <choose>, test your @who value and do the necessary -->
><xsl:when>
><!-- Use a <when> for each @who-value-specific behavour you want, and
>maybe an <otherwise> to catch any defaults -->
></xsl:when>
></xsl:choose>
><xsl:text>Justice </xsl:text>
><xsl:apply-templates select="key('spk-by-id', ../@who)"/></b>
><xsl:text>: </xsl:text>
></xsl:if>
><xsl:apply-templates/>
></p>
></xsl:template>
I would take this further. The most robust and maintainable way of adding
the title prefixes would be to put it into a separate place altogether --
and not merely a named template, but rather what we call a lookup table.
XSLT provides a function, document(), which can be used to query XML
documents other than the primary source document, which allows us to put
this table wherever we like. Conveniently, the document() function can even
be pulled into service to query the stylesheet itself: to do this, provide
it with a null-string argument as "document('')". So for this example I put
my lookup table in the stylesheet:
<local:lookup xmlns:local="putalocalURLhere">
<title who="spk1">Justice</title>
<title who="spk2">Mr</title>
</local:lookup>
Then in my template I can simply say
<xsl:variable name="title"
select="document('')/*/local:lookup/title[@who=current()/@who]"/>
(untested, but I think I have the syntax right)
and then provide the value of $title where I need it.
If you have a large lookup table, you may want to structure it a bit
differently:
<local:lookup xmlns:local="putalocalURLhere">
<title label="Justice">
<person who="spk1"/>
</title>
<title label="Mr">
<person who="spk2"/>
<person who="spk3"/>
<person who="spk6"/>
<person who="spk7"/>
</title>
<title label="Dr">
<person who="spk4"/>
<person who="spk5"/>
</title>
</local:lookup>
-- in which case, the expression to retrieve the appropriate value will
change. It still starts document('')/*/local:lookup/title ... the rest is
left as an exercise for the reader. :-> (Although looking at it now I think
I might prefer the first design in any case: the more important point is
that you have quite a bit of flexibility here.)
NB the cumbersome namespace declaration (xmlns:local etc.) is necessary
because in order for a stylesheet to compile, elements not in the XSLT
namespace at the "top level" of the stylesheet (that is, next to not inside
templates) must be in a declared namespace. C'est la vie.
> > Finally a mere organizational question:
> > Should I switch for such questions to the list
> > hosted by Mulberry?
>
>This is a more difficult question that it looks. First off, the place
>to get detailed XSLT advice is indeed XSL-L, which is why Wendell drew
>attention to it. All the gurus hang out there, and they are astonishingly
>patient and helpful with beginners as well as people with more complex
>problems. And some of those gurus are also TEI folk. But a lot of them
>aren't, and if your query is as much a TEI-related howto as it is an XSLT
>issue you may not find you get the sort of responses you need because some
>of the responders won't understand the context. Also, it is a very
>heavy-traffic list. I personally find I don't always have time even to scan
>the digests, let alone follow the stream of real-time postings
>
>If discussing XSLT matters on TEI-L is an offence, I am a serial offender,
>so perhaps I am not the best person to offer an opinion. All I can say (and
>to judge from the postings of my co-offenders, this seems to be their basic
>philosophy, too) is that in my view it's appropriate to post here (a)
>specific queries that directly relate to XSLT processing of TEI or
>TEI-related markup (b) more general queries about what XSLT can do that
>arise when planning a TEI-based project (c) information about XSLT
>techniques that can solve TEI-related problems, even if the original poster
>of the problem didn't have XSLT in mind as a solution.
I couldn't agree more with Michael about this. I did not mean to indicate
that XSLT questions, even very specific ones, are not welcome or in scope
for TEI-L. TEI-L is enriched by discussions of XSL (as of any application
technology useful to us) in this particular context. Accordingly I am very
grateful to Michael and to everyone else who occasionally provides XSL help
here.
Rather, I think each of us has to find her or his own balance, both in
asking and responding -- the list as a whole will be balanced by our
balance -- and continue making decisions about the best approach to sharing
and solving problems on a case-by-case basis, in light of all relevant
factors. It is only in the hope of helping readers find that balance point
for themselves, given their own circumstances --- not in an effort to shift
it for TEI-L as a whole -- that I mention alternatives. Some of us will be
learning XSLT in a more concerted way than others. While it's good that
discussion of matters XSLT appear here (even those who are not deep in the
thickets benefit, I think) anyone who's just getting going with XSLT should
also know of other available resources.
While I'm on the topic, two other particularly relevant ones are:
Dave Pawson's XSLT FAQ at http://www.dpawson.co.uk/xsl/sect2/sect21.html
Mulberry's XSLT Quick Reference guide (a printable cheat-sheet or "targum"
of XSLT syntax) at http://www.mulberrytech.com/quickref/index.html
I mention the FAQ because chances are very low that any particular XSLT
question, particularly one posed by a newcomer, has never been asked
before. And while searching the archives of XSL-List (where all the known
questions have been asked repeatedly) and the FAQ are non-trivial
exercises, occasionally one hits paydirt there.
Onward!
Wendell
======================================================================
Wendell Piez mailto:[log in to unmask]
Mulberry Technologies, Inc. http://www.mulberrytech.com
17 West Jefferson Street Direct Phone: 301/315-9635
Suite 207 Phone: 301/315-9631
Rockville, MD 20850 Fax: 301/315-8285
----------------------------------------------------------------------
Mulberry Technologies: A Consultancy Specializing in SGML and XML
======================================================================
|