* * * * *

                        Alphabet Soup of the Viet-Cong

I started to convert my website [1] to XML (eXtensible Markup Language) back
in October [2] but what with the holiday season and what not, that particular
project got pushed back. But the past week or so I've resurrected that
particular project and I've been immersed in XML, XSLT (eXtensible Stylesheet
Language Transformations), HTML (HyperText Markup Language) and CSS
(Cascading Style Sheets) and other alphabet soups of technology.

I had started with converting my humor columns (Murphy's Law) [3] over to XML
(of which I had converted about half) and wrote an XSLT file to convert them
to XHTML (eXtensible Hypertext Markup Language). Earlier this week, I picked
up where I resumed, converting the rest to XML and tweaking the templates.
Given the recent brouhaha (Dive into Mark: Semantic Obsolescence) [4] over
XHTML, plus an inability of some older browsers to properly handle the XHTML
markup, I rethought the notion of using XHTML and went back to HTML 4 strict
(which is now an easy thing to do given I'm using templates).

I had started with one of the lower sections of my website and was working my
way up (I had finished with Murphy's Law [5], now time to work on the High-
Brow Literary Section [6]) when I started having integration problems, mainly
with XSLT. I was working on one template file for the writing section, and I
already had a separate template file for the columns.

> <?xml version="1.0" ?>
>
> <xsl:stylesheet
>         version="1.0"
>         xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> >
>
> <xsl:include href="murphy/murphy.xsl"/>
>

“writings.xsl”

When I wasn't getting errors I was getting odd results. Perhaps it was still
my unfamiliarity with XSLT and the differences between <xsl:include> and
<xsl:import> but I was having a difficult trying to locate the source of the
odd results, like spurious output when there shouldn't have been any.

I then switched to a top-down conversion, with a single XSLT file. I rewrote
what I had, making naming changes to clarify what template what was and what
was going on.

Whatever I did, it cleared up the problems I was having.

It's slow going, and XSLT is not the prettiest of languages to program in
(and yes, it is Turing Complete [7] so it is a programming language) and I'm
still trying to get used to XPath (XML Path Language) [8] expressions.

> <xsl:call-template name="common-meta-tags">
>   <xsl:with-param name="year"><xsl:value-of select="substring(@ref,1,4)"/></xsl:with-param>
> </xsl:call-template>
>
> <xsl:if test="position()&gt;1">
>   <link
>       type="text/html"
>       rel="next"
>       title="{preceding-sibling::about[position()=1]/attribute::date}"
>       href="../{preceding-sibling::about[position()=1]/attribute::ref}.html"
>   />
> </xsl:if>
>
> <xsl:if test="position()&lt;last()">
>   <link
>       type="text/html"
>       rel="previous"
>       title="{following-sibling::about/attribute::date}"
>       href="../{following-sibling::about/attribute::ref}.html"
>   />
> </xsl:if>
>

“site.xsl”—Portion of code to generate the index of about pages

Yes, the relational operators like < have to be encoded as &lt; since this is
XML—like I said, it's not pretty. And certain XPath (XML Path Language)
expressions can use the short form, while others (such as selecting adjacent
nodes with preceding-sibling and following-sibling) have to use the fully
qualified notation and you have to know when that is (of the thirteen axis
you can step by, child, descendant, descendant-or-self, parent, ancestor,
ancestor-or-self, following-sibling, preceding-sibling, following, preceding,
attribute, namespace or self only five can be expressed in a shorthand
notation, self (as “.”), parent (as “‥”), child (as the name of the element),
descentant-or-self (as “/”) or attribute (with a “@” preceding the name of
the attribute)).

I hope you got all that (and I suspect I just lost all my readers at this
point).

You also don't have variables, even though <xsl:variable> would lead you to
think so; it's more a named constant than a variable.

It's stuff like this that reminds me of the Vietnam draftee Kansas farm boy
walking through the jungles of South East Asia oblivious to the various trip
wires the Viet-Cong have planted …

[1] http://www.conman.org/people/spc/
[2] gopher://gopher.conman.org/0Phlog:2002/10/21.1
[3] http://www.conman.org/people/spc/writings/murphy/
[4] http://diveintomark.org/archives/2003/01/13.html#semantic_obsolescence
[5] http://www.conman.org/people/spc/writings/murphy/
[6] http://www.conman.org/people/spc/writings/
[7] http://c2.com/cgi/wiki?TuringComplete
[8] http://www.w3.org/TR/xpath

Email author at [email protected]