followup:
On Sep 21, 2004, at 8:00 AM, Bruce D'Arcus wrote:
I guess my question, given what I want to do, is how should I
construct the function; as a single function -- let's call it
bib:format-month-day -- that when called takes any
YYYY/YYYY-MM/YYYY-MM-DD string and returns the formatted date (with
parameter for whether months are rendered as full or abbreviated)?
That's where I was headed. But if that's sensible, I'm not sure how
to actually code it; .e.g. what goes inside the "when" below:
<xsl:when test="$date castable as xs:gYearMonth">
...
</xsl:when>
Or, more specifically, how do I take the statement
"xs:date(concat($date, '-01'))" and then use format-date on it?
Here's what I've done:
<xsl:function name="mods:format-month-day">
<xsl:param name="date"/>
<xsl:variable name="date" select="$date" />
<xsl:choose>
<xsl:when test="$date castable as xs:gYearMonth">
<xsl:variable name="month-day"
select="xs:date(concat($date, '-01'))"/>
<xsl:value-of
select="format-date($month-day,'[MNn,*-3].')"/>
</xsl:when>
<xsl:when test="$date castable as xs:date">
<xsl:value-of select="format-date($date,'[MNn,*-3]. [D]')"/>
</xsl:when>
</xsl:choose>
</xsl:function>
<xsl:template match="date">
<h2>Dates:</h2>
<p class="date">
<xsl:value-of select="mods:format-month-day(.)"/>
</p>
</xsl:template>
Now, the bigger question: I need to later internationalize date
formatting. To that end, , where the root of the config file I am
using to configure the formatting will hold an xml:lang attribute
("cs:citationstyle/@lang") .
So:
a) how to do this with the above approach?
b) what are the advantages/disadvantages of the format-date approach
above, versus the below (which is what I currently have)? In theory, I
guess the format-date approach is only useful if it already handles all
of the internationalization of month formatting I'm doing manually
below. In either case, I need to change things to make more
configurable with respect to order and punctuation (9 September 2000
vs. September 9, 2000, etc.).
<xsl:template match="mods:date | mods:dateIssued |
mods:url/@dateLastAccessed">
<xsl:variable name="month-part">
<xsl:choose>
<xsl:when test="substring(.,6,2) = '01'">January</xsl:when>
<xsl:when test="substring(.,6,2) = '02'">February</xsl:when>
<xsl:when test="substring(.,6,2) = '03'">March</xsl:when>
<xsl:when test="substring(.,6,2) = '04'">April</xsl:when>
<xsl:when test="substring(.,6,2) = '05'">May</xsl:when>
<xsl:when test="substring(.,6,2) = '06'">June</xsl:when>
<xsl:when test="substring(.,6,2) = '07'">July</xsl:when>
<xsl:when test="substring(.,6,2) = '08'">August</xsl:when>
<xsl:when test="substring(.,6,2) = '09'">September</xsl:when>
<xsl:when test="substring(.,6,2) = '10'">October</xsl:when>
<xsl:when test="substring(.,6,2) = '11'">November</xsl:when>
<xsl:when test="substring(.,6,2) = '12'">December</xsl:when>
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="month-part-abbrev">
<xsl:choose>
<xsl:when test="substring(.,6,2) = '01'">Jan</xsl:when>
<xsl:when test="substring(.,6,2) = '02'">Feb</xsl:when>
<xsl:when test="substring(.,6,2) = '03'">Mar</xsl:when>
<xsl:when test="substring(.,6,2) = '04'">Apr</xsl:when>
<xsl:when test="substring(.,6,2) = '05'">May</xsl:when>
<xsl:when test="substring(.,6,2) = '06'">Jun</xsl:when>
<xsl:when test="substring(.,6,2) = '07'">Jul</xsl:when>
<xsl:when test="substring(.,6,2) = '08'">Aug</xsl:when>
<xsl:when test="substring(.,6,2) = '09'">Sept</xsl:when>
<xsl:when test="substring(.,6,2) = '10'">Oct</xsl:when>
<xsl:when test="substring(.,6,2) = '11'">Nov</xsl:when>
<xsl:when test="substring(.,6,2) = '12'">Dec</xsl:when>
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="day-part">
<xsl:choose>
<xsl:when test="substring(.,9,1) = '0'">
<xsl:value-of select="substring(.,10,1)" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="substring(.,9,2)" />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:if test="substring(.,6,2)">
<xsl:text> </xsl:text>
<xsl:value-of select="$month-part"/>
</xsl:if>
<xsl:if test="substring(.,9,2)">
<xsl:text> </xsl:text>
<xsl:value-of select="$day-part"/>
</xsl:if>
<xsl:if test="substring(.,6,2)">
<xsl:text></xsl:text>
</xsl:if>
<xsl:if test="../@dateLastAccessed">
<xsl:text>, </xsl:text>
<xsl:value-of select="substring(.,1,4)"/>
</xsl:if>
</xsl:template>
Bruce