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 > > > >> > > > > >> > > > > > > > > > > > > > >