Thanks for all the suggestions folks, other things at work have
prevented me from working on this quite yet but there is a lot of
helpful advice and suggestions here so thanks.  As a note on the
<xsl:for-each> that is actually the default dc_oai.xsl file for DSpace
and not my own work so feel free to ding the folks over there for that
choice.  This gives me a better feel for how XSLT hands conditionals
and some ideas on how to tackle it.  Though I would be curious to ask
if there is a reason to default to <xsl:if> vs. <xsl:choose>?  I'm not
sure that I necessarily need a switch to fix this problem but I want
to hear the thought process so I know how to better think over these
options in the future.

On Tue, Jun 2, 2015 at 5:21 PM, Boheemen, Peter van
<peter.vanbohee...@wur.nl> wrote:
> You should use a template that is only applied when the specified field is 
> there. These templates in xslt are applied automatically only if the field is 
> there:
>
> <xsl:template 
> match="doc:metadata/doc:element[@name='dc']/doc:element[@name='publication']/doc:element[@name='volume']/doc:element/doc:field[@name='value']">
>   <xsl:text>Vol. </xsl:text
>  <xsl:apply-templates/>
> </xsl:template>
>
> If the field is defined, but empty you should do:
>
> <xsl:template 
> match="doc:metadata/doc:element[@name='dc']/doc:element[@name='publication']/doc:element[@name='volume']/doc:element/doc:field[@name='value']">
>   <xsl:if test="not(.='')">
>      <xsl:text>Vol. </xsl:text
>      <xsl:apply-templates/>
>   </xsl:if>
> </xsl:template>
>
> Xslt is not a procedural language, you should hardly ever use <xsl:for-each>
>
> Peter
>
>
> -----Original Message-----
> From: Code for Libraries [mailto:CODE4LIB@LISTSERV.ND.EDU] On Behalf Of Matt 
> Sherman
> Sent: dinsdag 2 juni 2015 21:35
> To: CODE4LIB@LISTSERV.ND.EDU
> Subject: Re: [CODE4LIB] XSLT Advice
>
> Cool.  I talked to Ron via phone so I am getting a better picture, but I am 
> still happy to take more insights.
>
> So the larger context.  I inherited a DSpace instance with three custom 
> metadata fields which actually have some useful publication information, 
> though they improperly titled them in by associating them with a dc prefix 
> but there were two many to fix quickly and they haven't broken DSpace yet so 
> we continue.  So I added to the XSL to pull the data within the the custom 
> fields to display "publication name" Vol. "publication volume" Issue 
> "publication issue".  That worked really well until I realized that there was 
> no conditional so even when the fields are empty I still get: 
> <dc:identifier>Vol.
> Issue</dc:identifier>
>
> So here are the Custom Metadata fields:
>
> dc.publication.issue
> dc.publication.name
> dc.publication.volume
>
>
> Here is the customized XSLT, with dc.identifier added for context of what the 
> rest of the sheet looks like.
>
> <!-- dc.identifier -->
>             <xsl:for-each
> select="doc:metadata/doc:element[@name='dc']/doc:element[@name='identifier']/doc:element/doc:field[@name='value']">
>                 <dc:identifier><xsl:value-of select="." /></dc:identifier>
>             </xsl:for-each>
>
> <!-- dc.identifier.* -->
> <xsl:for-each 
> select="doc:metadata/doc:element[@name='dc']/doc:element[@name='identifier']/doc:element/doc:element/doc:field[@name='value']">
>                 <dc:identifier><xsl:value-of select="." /></dc:identifier> 
> </xsl:for-each>
>
> <!-- dc.publication fields to dc.identifier --> <dc:identifier><xsl:value-of 
> select="doc:metadata/doc:element[@name='dc']/doc:element[@name='publication']/doc:element[@name='name']/doc:element/doc:field[@name='value']"/><xsl:text>
> Vol. </xsl:text><xsl:value-of
> select="doc:metadata/doc:element[@name='dc']/doc:element[@name='publication']/doc:element[@name='volume']/doc:element/doc:field[@name='value']"/><xsl:text>
> Issue </xsl:text><xsl:value-of
> select="doc:metadata/doc:element[@name='dc']/doc:element[@name='publication']/doc:element[@name='issue']/doc:element/doc:field[@name='value']"/></dc:identifier>
>
>
> Ron suggested that using choose and when and that does seem to make the most 
> sense.  The other trickiness is that I have found that some of these fields 
> as filled when others are blank, such as their being a volume but not an 
> issue.  So I need to figure out how to test multiple fields so that I can 
> have it display differently dependent on what has data or not at all none of 
> the fields are filled, which is the case in items such as posters.
>
> So any thoughts would help.  Thanks.
>
> On Tue, Jun 2, 2015 at 2:50 PM, Wick, Ryan <ryan.w...@oregonstate.edu> wrote:
>> I agree with Stuart, post the example here.
>>
>> Or if you want more real-time chat there's always #code4lib IRC.
>>
>> For an XSLT resource, Dave Pawson's site is great:
>> http://www.dpawson.co.uk/xsl/sect2/sect21.html
>>
>> Ryan Wick
>>
>> -----Original Message-----
>> From: Code for Libraries [mailto:CODE4LIB@LISTSERV.ND.EDU] On Behalf
>> Of Stuart A. Yeates
>> Sent: Tuesday, June 02, 2015 11:46 AM
>> To: CODE4LIB@LISTSERV.ND.EDU
>> Subject: Re: [CODE4LIB] XSLT Advice
>>
>> There are a number of experienced xslt'ers here. Post your example to the 
>> group so we can all learn.
>>
>> Cheers
>> Stuart
>>
>> On Wednesday, June 3, 2015, Matt Sherman <matt.r.sher...@gmail.com> wrote:
>>
>>> Hi all,
>>>
>>> I am making a few corrections on an oai_dc.xslt file for our DSpace
>>> instance I slightly botched modifying to integrate some custom
>>> metadata into a dc.identifier citation in the OAI-PMH harvest.  I
>>> need to get proper conditionals so it can display and harvest the
>>> metadata correctly and not run when there is no data in those fields.
>>> I have a pretty good idea what I need to do, and if this were like
>>> JavaScript or Python I could probably muddle through.  The trouble is
>>> that I don't know the conditional syntax for XSLT quite well enough
>>> to know what I can do and thus need to do.  Plus the online resources
>>> for learning/referencing XSLT for this are a bit shallow for what I
>>> need hence asking the group.  So if there is anyone who knows XSLT
>>> really well that would be willing to talk with me for a bit to help
>>> me work through what I need to get the syntax to work like I want I
>>> would appreciate it.  Thanks.
>>>
>>> Matt Sherman
>>>
>>
>>
>> --
>> --
>> ...let us be heard from red core to black sky

Reply via email to