At 2004-01-24 10:11 -0700, Randolph Kahle wrote:
I am using XSL to translate a set of XML documents into a corresponding
set of HTML documents. I am stuck trying to figure out how to create <a >
... </a> links in HTML that display forward and backward pointers through
the web pages.
...
Each topic has the following (partial) structure:
<<<<<
<topic>
<!-- Used to link topics together -->
<menu>
<file>overview</file>
<display>overview</display>
<next>overview2</next>
<prior>introduction</prior>
</menu>
<course>Course Name</course>
<section>Overview</section>
<title>Overview</title>
<abstract></abstract>
...
I would prefer to keep the meta information about topic sequence out of
each topic file.
Basically, as I understand it, I need to point backward one sibling topic
and forward one sibling topic and detect the end cases where there is no
forward/backward sibling.
You will still need a unique identifier for each topic, so I'll assume
you'll move the <file> element one level higher to be a child of <topic>.
When you are in the template rule for a topic, you can test just as you
asked in prose:
<xsl:if test="preceding-sibling::topic">
<a href="{preceding-sibling::topic[1]/file}.htm">
<xsl:value-of select="preceding-sibling::topic[1]/title"/>
</a>
</xsl:if>
... and the mirror using following-sibling:: axis for the next. Note that
the [1] predicate (when in a step) addresses the closest in that direction,
because the axes are proximity ordered.
I hope this helps.
.............................. Ken
p.s. when I do this with my course presentation slides, I use an ID-typed
attribute for the base of the filename since that guarantees uniqueness
across the XML document; if you inadvertently name two topics with the same
file, you will get overwrite without getting any errors; but if you add an
ID-typed attribute to topic and you validate the document, the validation
process will flag duplicates before you start creating any files.
Alternatively, you could use a key table:
<xsl:key name="files" match="topic/file" use="."/>
... then when you go to produce each of the actual files:
<xsl:if test="count(key('files',file))>1">
<xsl:message terminate="yes">Duplicate filename!</xsl:message>
</xsl:if>
--
Public courses: sign up for one or both soon to reserve your seat!
Each week: Monday-Wednesday: XSLT/XPath; Thursday-Friday: XSL-FO
Washington, DC: 2004-03-15 San Francisco, CA: 2004-03-22
Hong Kong, China: 2004-05-17 Bremen, Germany: 2004-05-24
World-wide on-site corporate, government & user group XML training
G. Ken Holman mailto:gkholman(_at_)CraneSoftwrights(_dot_)com
Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/
Box 266, Kars, Ontario CANADA K0A-2E0 +1(613)489-0999 (F:-0995)
Male Breast Cancer Awareness http://www.CraneSoftwrights.com/s/bc
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list