xsl-list
[Top] [All Lists]

Re: Creating Forward/Backward HTML links from multi-file XSL processing

2004-01-24 12:34:08
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



<Prev in Thread] Current Thread [Next in Thread>