xsl-list
[Top] [All Lists]

Re: dynamically applying templates

2004-09-13 17:13:02
Thanks for sticking with this Wendell! However, and maybe I'm being dense, if I look at this:

On Sep 13, 2004, at 5:35 PM, Wendell Piez wrote:

Unless you have mods:titleInfo elements somewhere in your input (either in the source file or in a configuration) ... no.

Select the config template and perform the mapping you want:

<xsl:template
   match="cs:title[parent::reftype/@name='book' and
                   ancestor::bibliography/@author-as-sort-order='yes'>
  <mods:titleInfo>
    Creates whatever output you want for this kind of title here;
    make generic, if you like, by including values of @after and
    so forth in place of literals....
  </mods:titleInfo>
</xsl:template>

I don't think this is what I'm looking for. I don't need to create the mods:titleInfo output; I need to process the mods:titleInfo element that is already there in my input source.

input -->    file.xsl  <-- config
                      |
                      |
                      v
                 output

So, you have the right config file structure below, but let me add an additional element to illustrate.

where the node you are matching is in your config file:

<bibliography author-as-sort-order="yes">
  <entry>
    <reftype name="book">
      <title font-style="italic" after=", "/>
      <creator/>
    </reftype>
  </entry>
</bibliography>

A minimal input document then could be:

<doc>
   <mods xmlns="http://www.loc.gov/mods/v3";>
     <name type="personal">
        <namePart type="given">Jane</namePart>
        <namePart type="family">Doe</namePart>
     </name>
     <titleInfo>
        <title>Main Title</title>
        <subTitle>Subtitle</subTitle>
     </titleInfo>
   </mods>
</doc>

Note, then, that order of elements in the input file is different than that specified in the config file, which is saying output should be:

        Main Title: Subtitle, Jane Doe

<xsl:template match="cs:title">
  <xsl:apply-templates select="//mods:titleInfo" mode="bib"/>
</xsl:template>
...
<xsl:template match="mods:titleInfo" mode="bib">
  <span class="title">
    <xsl:apply-templates/>
  </span>
</xsl:template>

This won't work because that second template is not a mods:titleInfo element, and it won't ever be processed as such. It will only be applied if a mods:titleInfo node somewhere is selected (in mode 'bib'). (You could select a node from the stylesheet itself for processing, but any node addressed as "//mods:titleInfo" is going to be in the primary source; plus it's got the wrong name.)

Why "wrong name"?

Bruce