Print

Print


And just because I'm drinking too much coffee...

If you're using an XSLT 2.0 processor for this you can do some things with
variables that might make things a little easier; e.g.

<xsl:variable name="vJournalTitle"
select="normalize-space(dcvalue[@qualifier='name'])"/>
<xsl:variable name="vJournalVol"
select="normalize-space(dcvalue[@qualifier='volume'])"/>
<xsl:variable name="vJournalIssue"
select="normalize-space(dcvalue[@qualifier='issue'])"/>

You can call those variables in a concat() function and you won't have to
deal with wonky spacing in your output. There are almost certainly a bunch
of much better ways to do this - I'll never be anything better than an XSLT
apprentice - but it might be a good starting point.

See the second <dc_identifier> for the difference in output.
Cheers.

--> cat sherman.xml
<?xml version="1.0" encoding="UTF-8"?>
<record>
    <dcvalue element="publication" qualifier="issue" language="">1</dcvalue>
    <dcvalue element="publication" qualifier="name" language="">Quarterly
        Review of Economics and Finance</dcvalue>
    <dcvalue element="publication" qualifier="volume"
language="">47</dcvalue>
</record>

--> cat sherman.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="record">
        <xsl:variable name="vJournalTitle"
select="normalize-space(dcvalue[@qualifier='name'])"/>
        <xsl:variable name="vJournalVol"
select="normalize-space(dcvalue[@qualifier='volume'])"/>
        <xsl:variable name="vJournalIssue"
select="normalize-space(dcvalue[@qualifier='issue'])"/>

        <dc-identifier><xsl:value-of
select="dcvalue[@qualifier='name']"/><xsl:text> Vol.
</xsl:text><xsl:value-of select="dcvalue[@qualifier='volume']"/><xsl:text>
Issue </xsl:text><xsl:value-of select="dcvalue[@qualifier='issue']"/>
        </dc-identifier>

        <dc_identifier>
            <xsl:value-of select="concat($vJournalTitle, ' Vol. ',
$vJournalVol, ' Issue ', $vJournalIssue)"/>
        </dc_identifier>
    </xsl:template>

--> saxon -s:./sherman.xml -xsl:./sherman.xsl
<?xml version="1.0" encoding="UTF-8"?>
<dc-identifier>Quarterly
        Review of Economics and Finance Vol. 47 Issue 1</dc-identifier>
<dc_identifier>Quarterly Review of Economics and Finance Vol. 47 Issue
1</dc_identifier>


On Fri, Jul 11, 2014 at 1:33 PM, Matthew Sherman <[log in to unmask]>
wrote:

> Thanks, that is very helpful.
>
>
> On Fri, Jul 11, 2014 at 1:30 PM, Bridger Dyson-Smith <
> [log in to unmask]>
> wrote:
>
> > Hi Matthew,
> >
> > That looks good to me. The only thing I might suggest -- depending on
> your
> > needs -- is to add <xsl:text> around your literals; e.g.
> >
> > <xsl:value-of select="dcvalue[@qualifier='name']"/><xsl:text> Vol.
> > </xsl:text><xsl:value-of
> select="dcvalue[@qualifier='volume']"/><xsl:text>
> > Issue </xsl:text><xsl:value-of select="dcvalue[@qualifier='issue']"/>
> >
> > If the processor you are using does something weird with white space,
> > you'll avoid it by having the white space in text element. You may need a
> > more precise XPath, depending on the context of your template, but the
> > initial statement didn't look to bad.
> >
> > Hope that helps.
> > Best,
> > Bridger
> >
> >
> > On Fri, Jul 11, 2014 at 11:24 AM, Matthew Sherman <
> > [log in to unmask]>
> > wrote:
> >
> > > Given the DSpace Dublin Core formatting I would like to be able to take
> > > this:
> > >
> > > <dcvalue element="*publication*" qualifier="*issue*"
> > > language="">1</dcvalue>
> > >  <dcvalue element="*publication*" qualifier="*name*"
> > language="">Quarterly
> > > Review of Economics and Finance</dcvalue>
> > > <dcvalue element="*publication*" qualifier="*volume*" language="
> > > ">47</dcvalue>
> > >
> > > And turn during a OAI harvest turn it into:
> > >
> > > <dc:identifier>Quarterly Review of Economics and
> > > Finance Vol. 47 Issue 1</dc:identifier>
> > >
> > > I am thinking I can just add
> > >
> > > <dc:identifier><xsl:value-of select=""/> Vol. <xsl:value-of select=""/>
> > > Issue <xsl:value-of select=""/></dc:identifier>
> > >
> > > in the identifier section of the cross walk, but I am not 100% sure.
> >  Also
> > > I am not sure if I will need to use the excessively complex XPath to
> > > reference my source values.  Can anyone tell me if I am on the right
> > track?
> > >
> > >
> > > On Fri, Jul 11, 2014 at 11:13 AM, Matthew Sherman <
> > > [log in to unmask]>
> > > wrote:
> > >
> > > > Ok, that makes sense.  While I knew of OAI-PMH this is my first time
> > > > really getting my hands dirty with it so I wasn't sure if this
> > > > exceptionally detailed formatting was a function of the OAI protocols
> > or
> > > a
> > > > function of DSpace.  I also extracted a metadata record from DSpace
> to
> > > see
> > > > how they are formatting it and this I what I found for the type
> field:
> > > >
> > > > <dcvalue element="type" qualifier="none" language="">Poster</dcvalue>
> > > >
> > > >
> > > > On Fri, Jul 11, 2014 at 11:08 AM, Dunn, Katie <[log in to unmask]>
> wrote:
> > > >
> > > >> Matt said: "I guess it is the "doc:element/doc:element/doc:field"
> > thing
> > > >> that is mostly what it throwing me."
> > > >>
> > > >> More DSpacey people than I can probably comment more knowledgeably
> on
> > > >> this, but this seems like less of an OAI-PMH thing than a DSpace
> > thing.
> > > It
> > > >> looks like maybe DSpace stores metadata internally in a generic
> > > >> metadata/element/field structure like Bridger showed (with doc
> > > namespace):
> > > >>
> > > >> <doc:metadata>
> > > >>     <doc:element name="example"> <!-- ignored! -->
> > > >>     <doc:element name="dc">
> > > >>         <doc:element name="blahBlahBlah"> <!-- ignored! -->
> > > >>         <doc:element name="type">
> > > >>             <doc:element>
> > > >>                 <doc:element>
> > > >>                     <doc:field name="value"> <!-- get the value of
> > this
> > > >> element -->
> > > >>
> > > >> ...and the select is pulling the information it needs for the
> <dc:type
> > > />
> > > >> element in the OAI-PMH output out of the internal DSpace structure.
> > > >>
> > > >> Katie
> > > >>
> > > >>
> > > >> -----Original Message-----
> > > >> From: Code for Libraries [mailto:[log in to unmask]] On
> Behalf
> > Of
> > > >> Bridger Dyson-Smith
> > > >> Sent: Friday, July 11, 2014 10:56 AM
> > > >> To: [log in to unmask]
> > > >> Subject: Re: [CODE4LIB] OAI Crosswalk XSLT
> > > >>
> > > >> Hi Matt,
> > > >>
> > > >> Michael Kays' XSLT 2.0 and XPath 2.0 is a great reference and is
> > > >> available as an eBook. Mulberry Technologies has some quick
> reference
> > > >> guides [1] that might be helpful.
> > > >>
> > > >> Cheers,
> > > >> Bridger
> > > >>
> > > >> <doc:metadata>
> > > >>     <doc:element name="example"> <!-- ignored! -->
> > > >>     <doc:element name="dc">
> > > >>         <doc:element name="blahBlahBlah"> <!-- ignored! -->
> > > >>         <doc:element name="type">
> > > >>             <doc:element>
> > > >>                 <doc:element>
> > > >>                     <doc:field name="value"> <!-- get the value of
> > this
> > > >> element -->
> > > >>
> > > >> [1] http://www.mulberrytech.com/quickref/
> > > >>
> > > >>
> > > >>
> > > >> On Fri, Jul 11, 2014 at 10:38 AM, Matthew Sherman <
> > > >> [log in to unmask]>
> > > >> wrote:
> > > >>
> > > >> > Hi Code4Lib folks,
> > > >> >
> > > >> > I have a question for those of you who have worked with OAI-PMH.
>  I
> > am
> > > >> > currently editing our DSpace OAI crosswalk to include a few custom
> > > >> > metadata field that exist in our repository for publication
> > > >> > information and port them into a more standard format.  The
> problem
> > I
> > > >> > am running into is the select statements they use are not the
> > typical
> > > >> > XPath statements I am used to.  For example:
> > > >> >
> > > >> > <xsl:for-each
> > > >> >
> > > >> >
> > select="doc:metadata/doc:element[@name='dc']/doc:element[@name='type']
> > > >> > /doc:element/doc:element/doc:field[@name='value']">
> > > >> > <dc:type><xsl:value-of select="." /></dc:type> </xsl:for-each>
> > > >> >
> > > >> > I know what the "." does, but the other select statement is a bit
> > > >> > foreign to me.  So my question is, does anyone know of some
> > reference
> > > >> > material that can help me make sense of this select?  I need to
> > > >> > understand what it is doing so I can make my own.  Thanks for any
> > > >> insight you can provide.
> > > >> >
> > > >> > Matt Sherman
> > > >> >
> > > >>
> > > >
> > > >
> > >
> >
>