Erik Hatcher wrote:
At this point, I'm planning on winging it with the datasets. By late
February I will have (high on my TODO list now!) built a light-weight
Solr mechanism for bringing in MARC data, and perhaps more (iTunes
data files would make a fun one) and doing simple skinnable front-
ends on Solr. Rails at least, but also demo the various formats that
Solr can output making it pluggable into whatever environment easily.
Erik, here is an XSLT doc I created for transferring MARCXML to SOLR
XML. It has some PHP components in it that just make some of the ugly
marc data into something more friendly. It also has some logic based on
our data, but is fairly generic.
I was hoping that during the preconference we could all discuss this
transformation process. I have been working with our metadata librarian
on determining which fields should be included and which should be
grouped together for indexing and searching processes. However, someone
out there might have some better ideas as how to be to transform the
data into SOLR.
Andrew
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:php="http://php.net/xsl">
<xsl:output method="xml" indent="yes" encoding="utf-8"/>
<xsl:template match="/">
<add>
<xsl:call-template name="record"/>
</add>
</xsl:template>
<xsl:template name="record">
<xsl:for-each select="//record">
<doc>
<field name="id"><xsl:value-of select="[EMAIL PROTECTED]"/></field>
<field name="format"><xsl:value-of select="php:functionString('getFormat', ./leader, ./[EMAIL PROTECTED])"/></field>
<field name="language"><xsl:value-of select="substring(./[EMAIL PROTECTED], 36, 3)"/></field>
<xsl:if test="[EMAIL PROTECTED]/[EMAIL PROTECTED]'a']">
<field name="isbn"><xsl:value-of select="[EMAIL PROTECTED]/[EMAIL PROTECTED]'a']"/></field>
</xsl:if>
<xsl:if test="[EMAIL PROTECTED]/[EMAIL PROTECTED]'a']">
<field name="issn"><xsl:value-of select="[EMAIL PROTECTED]/[EMAIL PROTECTED]'a']"/></field>
</xsl:if>
<xsl:choose>
<xsl:when test="[EMAIL PROTECTED]">
<field name="callnumber"><xsl:value-of select="[EMAIL PROTECTED]/[EMAIL PROTECTED]'a']"/><xsl:value-of select="[EMAIL PROTECTED]'090']/[EMAIL PROTECTED]'b']"/></field>
</xsl:when>
<xsl:otherwise>
<xsl:if test="[EMAIL PROTECTED]">
<field name="callnumber"><xsl:value-of select="[EMAIL PROTECTED]/[EMAIL PROTECTED]'a']"/><xsl:value-of select="[EMAIL PROTECTED]'050']/[EMAIL PROTECTED]'b']"/></field>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="[EMAIL PROTECTED]/[EMAIL PROTECTED]'a']">
<field name="author"><xsl:value-of select="[EMAIL PROTECTED]/[EMAIL PROTECTED]'a']"/></field>
</xsl:if>
<xsl:if test="[EMAIL PROTECTED]/[EMAIL PROTECTED]'a']">
<field name="author"><xsl:value-of select="[EMAIL PROTECTED]/[EMAIL PROTECTED]'a']"/></field>
</xsl:if>
<xsl:if test="[EMAIL PROTECTED]/[EMAIL PROTECTED]'a']">
<field name="author"><xsl:value-of select="[EMAIL PROTECTED]/[EMAIL PROTECTED]'a']"/></field>
</xsl:if>
<xsl:if test="[EMAIL PROTECTED]/[EMAIL PROTECTED]'a']">
<field name="author"><xsl:value-of select="[EMAIL PROTECTED]/[EMAIL PROTECTED]'a']"/></field>
</xsl:if>
<field name="title"><xsl:value-of select="[EMAIL PROTECTED]/[EMAIL PROTECTED]'a']"/> <xsl:value-of select="[EMAIL PROTECTED]'245']/[EMAIL PROTECTED]'b']"/></field>
<xsl:if test="[EMAIL PROTECTED]/[EMAIL PROTECTED]'a']">
<field name="title2"><xsl:value-of select="[EMAIL PROTECTED]/[EMAIL PROTECTED]'a']"/></field>
</xsl:if>
<xsl:if test="[EMAIL PROTECTED]/[EMAIL PROTECTED]'c']">
<field name="publishDate"><xsl:value-of select="[EMAIL PROTECTED]/[EMAIL PROTECTED]'c']"/></field>
</xsl:if>
<xsl:if test="[EMAIL PROTECTED]/[EMAIL PROTECTED]'a']">
<field name="dateSpan"><xsl:value-of select="[EMAIL PROTECTED]/[EMAIL PROTECTED]'a']"/></field>
</xsl:if>
<xsl:if test="[EMAIL PROTECTED]/[EMAIL PROTECTED]'a']">
<field name="series"><xsl:value-of select="[EMAIL PROTECTED]/[EMAIL PROTECTED]'a']"/></field>
</xsl:if>
<xsl:if test="[EMAIL PROTECTED]/[EMAIL PROTECTED]'a']">
<field name="series"><xsl:value-of select="[EMAIL PROTECTED]/[EMAIL PROTECTED]'a']"/></field>
</xsl:if>
<xsl:call-template name="subjects"/>
<xsl:for-each select="[EMAIL PROTECTED]">
<field name="Author2"><xsl:value-of select="./[EMAIL PROTECTED]'a']"/></field>
</xsl:for-each>
<xsl:if test="[EMAIL PROTECTED]/[EMAIL PROTECTED]'a']">
<field name="oldTitle"><xsl:value-of select="[EMAIL PROTECTED]/[EMAIL PROTECTED]'a']"/></field>
</xsl:if>
<xsl:if test="[EMAIL PROTECTED]/[EMAIL PROTECTED]'a']">
<field name="newTitle"><xsl:value-of select="[EMAIL PROTECTED]/[EMAIL PROTECTED]'a']"/></field>
</xsl:if>
<xsl:if test="[EMAIL PROTECTED]/[EMAIL PROTECTED]'a']">
<field name="series"><xsl:value-of select="[EMAIL PROTECTED]/[EMAIL PROTECTED]'a']"/></field>
</xsl:if>
<xsl:if test="[EMAIL PROTECTED]/[EMAIL PROTECTED]'u']">
<field name="url"><xsl:value-of select="[EMAIL PROTECTED]/[EMAIL PROTECTED]'u']"/></field>
</xsl:if>
</doc>
</xsl:for-each>
</xsl:template>
<xsl:template name="subjects">
<xsl:for-each select="[EMAIL PROTECTED]">
<field name="subject1"><xsl:value-of select="./[EMAIL PROTECTED]'a']"/></field>
</xsl:for-each>
<xsl:for-each select="[EMAIL PROTECTED]">
<field name="subject2"><xsl:value-of select="./[EMAIL PROTECTED]'a']"/></field>
</xsl:for-each>
<xsl:for-each select="[EMAIL PROTECTED]">
<field name="subject3"><xsl:value-of select="./[EMAIL PROTECTED]'a']"/></field>
</xsl:for-each>
<xsl:for-each select="[EMAIL PROTECTED]">
<field name="subject4a"><xsl:value-of select="./[EMAIL PROTECTED]'a']"/></field>
<field name="subject4x"><xsl:value-of select="./[EMAIL PROTECTED]'x']"/></field>
</xsl:for-each>
<xsl:for-each select="[EMAIL PROTECTED]">
<field name="subject5"><xsl:value-of select="./[EMAIL PROTECTED]'a']"/></field>
</xsl:for-each>
<xsl:for-each select="[EMAIL PROTECTED]">
<field name="subject6"><xsl:value-of select="./[EMAIL PROTECTED]'a']"/></field>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>