You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
790 lines
26 KiB
790 lines
26 KiB
<?xml version="1.0" encoding="UTF-8"?> |
|
<!-- |
|
* Copyright 2007, The Digital Library Federation, All Rights Reserved |
|
* |
|
* Permission is hereby granted, free of charge, to any person obtaining |
|
* a copy of this software and associated documentation files (the |
|
* "Software"), to deal in the Software without restriction, including |
|
* without limitation the rights to use, copy, modify, merge, publish, |
|
* distribute, sublicense, and/or sell copies of the Software, and to |
|
* permit persons to whom the Software is furnished to do so, subject |
|
* to the following conditions: |
|
* |
|
* The above copyright notice and this permission notice shall be |
|
* included in all copies or substantial portions of the Software. |
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
|
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY |
|
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
|
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
|
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
--> |
|
|
|
<xsl:stylesheet version="1.0" |
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" |
|
xmlns:xs="http://www.w3.org/2001/XMLSchema" |
|
xmlns:xlink="http://www.w3.org/1999/xlink" |
|
xmlns:m="http://www.loc.gov/mods/v3"> |
|
|
|
<xsl:template match="/"> |
|
<xsl:apply-templates/> |
|
</xsl:template> |
|
|
|
<xsl:template match="m:mods"> |
|
<xsl:variable name="form" select="m:physicalDescription/m:form"/> |
|
<xsl:variable name="rform" select="m:physicalDescription/m:reformattingQuality"/> |
|
<xsl:variable name="intm" select="m:physicalDescription/m:internetMediaType"/> |
|
<xsl:variable name="extent" select="m:physicalDescription/m:extent"/> |
|
<xsl:variable name="dorigin" select="m:physicalDescription/m:digitalOrigin"/> |
|
<xsl:variable name="note" select="m:note"/> |
|
<xsl:variable name="topic" select="m:subject/m:topic"/> |
|
<xsl:variable name="geo" select="m:subject/m:geographic"/> |
|
<xsl:variable name="time" select="m:subject/m:temporal"/> |
|
<xsl:variable name="hierarchic" select="m:subject/m:hierarchicalGeographic"/> |
|
<xsl:variable name="subname" select="m:subject/m:name"/> |
|
|
|
<xsl:element name="add"> |
|
<xsl:element name="doc"> |
|
|
|
<!-- SetSpec is handled twice, once for regular indexing and once for faceting, |
|
The setSpec will be broken up into individual elements by the java processing |
|
--> |
|
|
|
<!-- set_spec is handled up above --> |
|
|
|
<!-- we only want one title sort element --> |
|
<xsl:if test="m:titleInfo/m:title"> |
|
<xsl:if test="position() = 1"> |
|
<xsl:element name="field"> |
|
<xsl:attribute name="name">title_sort_s</xsl:attribute> |
|
<xsl:value-of select="m:titleInfo/m:title"/> |
|
</xsl:element> |
|
</xsl:if> |
|
</xsl:if> |
|
<xsl:if test="m:identifier[@type='pid']"> |
|
<xsl:if test="position() = 1"> |
|
<xsl:element name="field"> |
|
<xsl:attribute name="name">id</xsl:attribute> |
|
<xsl:value-of select="m:identifier[@type='pid']"/> |
|
</xsl:element> |
|
</xsl:if> |
|
</xsl:if> |
|
|
|
<!-- identifier --> |
|
<xsl:apply-templates select="m:identifier"/> |
|
|
|
<!-- titleInfo --> |
|
<xsl:apply-templates select="m:titleInfo"/> |
|
|
|
<!-- name --> |
|
<xsl:apply-templates select="m:name"/> |
|
|
|
<!-- subject --> |
|
<xsl:apply-templates select="m:subject"/> |
|
|
|
<!-- typeOfResource --> |
|
<xsl:apply-templates select="m:typeOfResource"/> |
|
|
|
<!-- genre --> |
|
<xsl:if test="m:genre"> |
|
<xsl:element name="field"><xsl:attribute name="name">genre_t</xsl:attribute> |
|
<xsl:for-each select="m:genre"> |
|
<xsl:if test=". != ''"> |
|
<xsl:if test="position() != 1"> |
|
<xsl:text>; </xsl:text> |
|
</xsl:if> |
|
<xsl:value-of select="."/> |
|
</xsl:if> |
|
</xsl:for-each> |
|
</xsl:element> |
|
|
|
<xsl:for-each select="m:genre"> |
|
<xsl:element name="field"><xsl:attribute name="name">genre_facet</xsl:attribute> |
|
<xsl:value-of select="normalize-space(.)"/> |
|
</xsl:element> |
|
</xsl:for-each> |
|
</xsl:if> |
|
|
|
<!-- collection --> |
|
<xsl:for-each select="m:relatedItem/m:titleInfo[@authority='dlfaqcoll']/m:title"> |
|
<xsl:element name="field"><xsl:attribute name="name">collection_facet</xsl:attribute> |
|
<xsl:value-of select="normalize-space(.)"/> |
|
</xsl:element> |
|
</xsl:for-each> |
|
|
|
<!-- originInfo --> |
|
<xsl:apply-templates select="m:originInfo"/> |
|
|
|
<!-- language --> |
|
<xsl:if test="m:language/m:languageTerm[@type='text']"> |
|
<xsl:element name="field"><xsl:attribute name="name">language_t</xsl:attribute> |
|
<xsl:for-each select="m:language/m:languageTerm[@type='text']"> |
|
<xsl:if test =". != ''"> |
|
<xsl:if test = "position() != 1"> |
|
<xsl:text>; </xsl:text> |
|
</xsl:if> |
|
<xsl:value-of select="."/> |
|
</xsl:if> |
|
</xsl:for-each> |
|
</xsl:element> |
|
<xsl:for-each select="m:language/m:languageTerm[@type='text']"> |
|
<xsl:element name="field"><xsl:attribute name="name">language_facet</xsl:attribute> |
|
<xsl:value-of select="normalize-space(.)"/> |
|
</xsl:element> |
|
</xsl:for-each> |
|
</xsl:if> |
|
|
|
<!-- physicalDescription --> |
|
<xsl:if test="$form or $rform or $intm or $extent or $dorigin"> |
|
<xsl:apply-templates select="m:physicalDescription"/> |
|
</xsl:if> |
|
|
|
<!-- abstract --> |
|
<xsl:apply-templates select="m:abstract"/> |
|
|
|
<!-- tableOfContents --> |
|
<xsl:apply-templates select="m:tableOfContents"/> |
|
|
|
<!-- targetAudience --> |
|
<xsl:apply-templates select="m:targetAudience"/> |
|
|
|
<!-- note --> |
|
<xsl:if test="$note"> |
|
<xsl:for-each select="m:note"> |
|
<xsl:if test=". != ''"> |
|
<xsl:element name="field"><xsl:attribute name="name">note_t</xsl:attribute> |
|
<xsl:value-of select="."/> |
|
</xsl:element> |
|
</xsl:if> |
|
</xsl:for-each> |
|
</xsl:if> |
|
|
|
<!-- relatedItem --> |
|
<xsl:apply-templates select="m:relatedItem"/> |
|
|
|
<!-- location --> |
|
<xsl:apply-templates select="m:location"> |
|
</xsl:apply-templates> |
|
|
|
<!-- accessCondition --> |
|
<xsl:apply-templates select="m:accessCondition"/> |
|
|
|
</xsl:element> |
|
</xsl:element> |
|
</xsl:template> |
|
|
|
<xsl:template match="m:titleInfo"> |
|
<xsl:variable name="nsort" select="m:nonSort"/> |
|
<xsl:variable name="titl" select="m:title"/> |
|
<xsl:variable name="subt" select="m:subTitle"/> |
|
<xsl:variable name="partname" select="m:partName"/> |
|
<xsl:variable name="partNumber" select="m:partnum"/> |
|
|
|
<xsl:choose> |
|
<xsl:when test="@type = 'alternative' or m:title/@type = 'alternative'"> |
|
<xsl:element name="field"> |
|
<xsl:attribute name="name"><xsl:text>alt_title_t</xsl:text></xsl:attribute> |
|
<xsl:value-of select="m:title"/> |
|
</xsl:element> |
|
</xsl:when> |
|
<xsl:when test="@type = 'uniform' or m:title/@type = 'uniform'"> |
|
<xsl:element name="field"> |
|
<xsl:attribute name="name"><xsl:text>uni_title_t</xsl:text></xsl:attribute> |
|
<xsl:value-of select="m:title"/> |
|
</xsl:element> |
|
</xsl:when> |
|
<xsl:when test="@type = 'abbreviated' or m:title/@type = 'abbreviated'"> |
|
<xsl:element name="field"> |
|
<xsl:attribute name="name"><xsl:text>abbr_title_t</xsl:text></xsl:attribute> |
|
<xsl:value-of select="m:title"/> |
|
</xsl:element> |
|
</xsl:when> |
|
<xsl:when test="@type = 'translated' or m:title/@type = 'translated'"> |
|
<xsl:element name="field"> |
|
<xsl:attribute name="name"><xsl:text>trans_title_t</xsl:text></xsl:attribute> |
|
<xsl:value-of select="m:title"/> |
|
</xsl:element> |
|
</xsl:when> |
|
<xsl:otherwise> |
|
<xsl:element name="field"> |
|
<xsl:attribute name="name">title_t</xsl:attribute> |
|
<!-- including nsort because this is keyword search spec --> |
|
<xsl:value-of select="$nsort"/> |
|
<xsl:value-of select="$titl"/> |
|
|
|
<xsl:for-each select="m:subTitle"> |
|
<xsl:if test=". != ''"> |
|
<xsl:if test="position()=1 and $titl"> |
|
<xsl:text>; </xsl:text> |
|
</xsl:if> |
|
<xsl:value-of select="."/> |
|
<xsl:if test="position() != last()"> |
|
<xsl:text>; </xsl:text> |
|
</xsl:if> |
|
</xsl:if> |
|
</xsl:for-each> |
|
|
|
<xsl:for-each select="m:partName"> |
|
<xsl:if test=". != ''"> |
|
<xsl:if test="position()=1 and ($titl or $subt)"> |
|
<xsl:text>; </xsl:text> |
|
</xsl:if> |
|
<xsl:value-of select="."/> |
|
<xsl:if test="position() != last()"> |
|
<xsl:text>; </xsl:text> |
|
</xsl:if> |
|
</xsl:if> |
|
</xsl:for-each> |
|
|
|
<xsl:for-each select="m:partNumber"> |
|
<xsl:if test=". != ''"> |
|
<xsl:if test="position()=1 and ($titl or $subt or $partname)"> |
|
<xsl:text>; </xsl:text> |
|
</xsl:if> |
|
<xsl:value-of select="."/> |
|
<xsl:if test="position() != last()"> |
|
<xsl:text>; </xsl:text> |
|
</xsl:if> |
|
</xsl:if> |
|
</xsl:for-each> |
|
</xsl:element> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
</xsl:template> |
|
|
|
<xsl:template match="m:identifier"> |
|
|
|
<xsl:element name="field"><xsl:attribute name="name"><xsl:text>identifier_t</xsl:text></xsl:attribute> |
|
<xsl:value-of select="."/> |
|
</xsl:element> |
|
|
|
</xsl:template> |
|
|
|
<xsl:template match="m:name"> |
|
|
|
<xsl:element name="field"> |
|
<xsl:attribute name="name"> |
|
<xsl:choose> |
|
<xsl:when test="@type='organization'"><xsl:text>name_organization_t</xsl:text></xsl:when> |
|
<xsl:when test="@type='conference'"><xsl:text>name_conference_t</xsl:text></xsl:when> |
|
<xsl:when test="@type='personal'"><xsl:text>name_personal_t</xsl:text></xsl:when> |
|
</xsl:choose> |
|
</xsl:attribute> |
|
|
|
<xsl:choose> |
|
<xsl:when test="m:namePart[@type='family'] or m:namePart[@type='given']"> |
|
<xsl:if test="m:namePart[@type='family']"> |
|
<xsl:value-of select="m:namePart[@type='family']"/> |
|
</xsl:if> |
|
<xsl:if test="m:namePart[@type='given']"> |
|
<xsl:if test="m:namePart[@type='family']"> |
|
<xsl:text>, </xsl:text> |
|
</xsl:if> |
|
<xsl:value-of select="m:namePart[@type='given']"/> |
|
</xsl:if> |
|
<xsl:if test="m:namePart[@type='date']"> |
|
<xsl:text>, </xsl:text> |
|
<xsl:value-of select="m:namePart[@type='date']"/> |
|
</xsl:if> |
|
</xsl:when> |
|
|
|
<!-- if only namePart no specific family or given name tags --> |
|
<xsl:otherwise> |
|
<xsl:choose> |
|
<xsl:when test="m:namePart != ''"> |
|
<xsl:for-each select="m:namePart"> |
|
<xsl:value-of select="."/> |
|
<xsl:if test="position()!=last()"> |
|
<xsl:text>, </xsl:text> |
|
</xsl:if> |
|
</xsl:for-each> |
|
</xsl:when> |
|
<!-- if only displayForm --> |
|
<xsl:otherwise> |
|
<xsl:if test="m:displayForm != ''"> |
|
<xsl:for-each select="m:displayForm"> |
|
<xsl:value-of select="."/> |
|
<xsl:if test="position()!=last()"> |
|
<xsl:text>, </xsl:text> |
|
</xsl:if> |
|
</xsl:for-each> |
|
</xsl:if> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
|
|
<!-- if there is text roleTerm --> |
|
<xsl:for-each select="m:role/m:roleTerm[@type='text']"> |
|
<xsl:if test=". != ''"> |
|
<xsl:text>, </xsl:text> |
|
<xsl:value-of select="."/> |
|
</xsl:if> |
|
</xsl:for-each> |
|
</xsl:element> |
|
|
|
<xsl:element name="field"> |
|
|
|
<xsl:attribute name="name"> |
|
<xsl:choose> |
|
<xsl:when test="@type='organization'"><xsl:text>name_organization_facet</xsl:text></xsl:when> |
|
<xsl:when test="@type='conference'"><xsl:text>name_conference_facet</xsl:text></xsl:when> |
|
<xsl:when test="@type='personal'"><xsl:text>name_personal_facet</xsl:text></xsl:when> |
|
</xsl:choose> |
|
</xsl:attribute> |
|
|
|
<xsl:choose> |
|
<xsl:when test="m:namePart[@type='family'] or m:namePart[@type='given']"> |
|
<xsl:if test="m:namePart[@type='family']"> |
|
<xsl:value-of select="normalize-space(m:namePart[@type='family'])"/> |
|
</xsl:if> |
|
<xsl:if test="m:namePart[@type='given']"> |
|
<xsl:if test="normalize-space(m:namePart[@type='family'])"> |
|
<xsl:text>, </xsl:text> |
|
</xsl:if> |
|
<xsl:value-of select="normalize-space(m:namePart[@type='given'])"/> |
|
</xsl:if> |
|
<xsl:if test="m:namePart[@type='date']"> |
|
<xsl:text>, </xsl:text> |
|
<xsl:value-of select="normalize-space(m:namePart[@type='date'])"/> |
|
</xsl:if> |
|
</xsl:when> |
|
|
|
<!-- if only namePart no specific family or given name tags --> |
|
<xsl:otherwise> |
|
<xsl:choose> |
|
<xsl:when test="m:namePart != ''"> |
|
<xsl:for-each select="m:namePart"> |
|
<xsl:value-of select="."/> |
|
<xsl:if test="position()!=last()"> |
|
<xsl:text>, </xsl:text> |
|
</xsl:if> |
|
</xsl:for-each> |
|
</xsl:when> |
|
<!-- if only displayForm --> |
|
<xsl:otherwise> |
|
<xsl:if test="m:displayForm != ''"> |
|
<xsl:for-each select="m:displayForm"> |
|
<xsl:value-of select="."/> |
|
<xsl:if test="position()!=last()"> |
|
<xsl:text>, </xsl:text> |
|
</xsl:if> |
|
</xsl:for-each> |
|
</xsl:if> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
</xsl:element> |
|
</xsl:template> |
|
|
|
<xsl:template match="m:subject"> |
|
<xsl:variable name="topic" select="m:topic|m:occupation|m:titleInfo"/> |
|
<xsl:variable name="geo" select="m:geographic|m:hierarchicalGeographic|m:geographicCode"/> |
|
<xsl:variable name="time" select="m:temporal"/> |
|
<xsl:variable name="cart" select="m:cartographics"/> |
|
<xsl:variable name="genre" select="m:genre"/> |
|
<xsl:variable name="subname" select="m:name"/> |
|
|
|
<xsl:for-each select="$topic"> |
|
<xsl:element name="field"><xsl:attribute name="name"><xsl:text>subject_topic_t</xsl:text></xsl:attribute> |
|
<xsl:value-of select="."/> |
|
</xsl:element> |
|
<xsl:element name="field"><xsl:attribute name="name"><xsl:text>subject_topic_facet</xsl:text></xsl:attribute> |
|
<xsl:value-of select="normalize-space(.)"/> |
|
</xsl:element> |
|
</xsl:for-each> |
|
<xsl:for-each select="$geo"> |
|
<xsl:element name="field"><xsl:attribute name="name"><xsl:text>subject_geographic_t</xsl:text></xsl:attribute> |
|
<xsl:value-of select="."/> |
|
</xsl:element> |
|
<xsl:element name="field"><xsl:attribute name="name"><xsl:text>subject_geographic_facet</xsl:text></xsl:attribute> |
|
<xsl:value-of select="normalize-space(.)"/> |
|
</xsl:element> |
|
</xsl:for-each> |
|
<xsl:for-each select="$time"> |
|
<xsl:element name="field"><xsl:attribute name="name"><xsl:text>subject_temporal_t</xsl:text></xsl:attribute> |
|
<xsl:value-of select="."/> |
|
</xsl:element> |
|
<xsl:element name="field"><xsl:attribute name="name"><xsl:text>subject_temporal_facet</xsl:text></xsl:attribute> |
|
<xsl:value-of select="normalize-space(.)"/> |
|
</xsl:element> |
|
</xsl:for-each> |
|
<xsl:for-each select="$subname"> |
|
<xsl:element name="field"><xsl:attribute name="name"><xsl:text>subject_name_t</xsl:text></xsl:attribute> |
|
<xsl:value-of select="."/> |
|
</xsl:element> |
|
<xsl:element name="field"><xsl:attribute name="name"><xsl:text>subject_name_facet</xsl:text></xsl:attribute> |
|
<xsl:value-of select="normalize-space(.)"/> |
|
</xsl:element> |
|
</xsl:for-each> |
|
<xsl:for-each select="$genre"> |
|
<xsl:element name="field"><xsl:attribute name="name"><xsl:text>genre_t</xsl:text></xsl:attribute> |
|
<xsl:value-of select="."/> |
|
</xsl:element> |
|
<xsl:element name="field"><xsl:attribute name="name"><xsl:text>genre_facet</xsl:text></xsl:attribute> |
|
<xsl:value-of select="normalize-space(.)"/> |
|
</xsl:element> |
|
</xsl:for-each> |
|
|
|
<!-- slurp up all sub elements of subject into one field, not sure if we need this --> |
|
<xsl:if test="*"> |
|
<xsl:element name="field"><xsl:attribute name="name"><xsl:text>subject_t</xsl:text></xsl:attribute> |
|
<xsl:for-each select="*"> |
|
<xsl:if test=". != ''"> |
|
<xsl:value-of select="."/> |
|
<xsl:if test="position()!=last()"> |
|
<xsl:text> --</xsl:text> |
|
</xsl:if> |
|
</xsl:if> |
|
</xsl:for-each> |
|
</xsl:element> |
|
<xsl:element name="field"><xsl:attribute name="name"><xsl:text>subject_facet</xsl:text></xsl:attribute> |
|
<xsl:for-each select="*"> |
|
<xsl:if test=". != ''"> |
|
<xsl:value-of select="normalize-space(.)"/> |
|
<xsl:if test="position()!=last()"> |
|
<xsl:text> --</xsl:text> |
|
</xsl:if> |
|
</xsl:if> |
|
</xsl:for-each> |
|
</xsl:element> |
|
</xsl:if> |
|
</xsl:template> |
|
|
|
<xsl:template match="m:typeOfResource"> |
|
<xsl:element name="field"><xsl:attribute name="name">type_of_resource_t</xsl:attribute> |
|
<xsl:value-of select="."/> |
|
</xsl:element> |
|
<xsl:element name="field"><xsl:attribute name="name">type_of_resource_facet</xsl:attribute> |
|
<xsl:value-of select="normalize-space(.)"/> |
|
</xsl:element> |
|
</xsl:template> |
|
|
|
<xsl:template match="m:abstract"> |
|
<xsl:choose> |
|
<xsl:when test="@xlink"> |
|
<xsl:element name="field"> |
|
<xsl:attribute name="name"><xsl:text>abstract_t</xsl:text></xsl:attribute> |
|
<xsl:value-of select="@xlink"/> |
|
</xsl:element> |
|
</xsl:when> |
|
<xsl:otherwise> |
|
<xsl:element name="field"><xsl:attribute name="name">abstract_t</xsl:attribute> |
|
<xsl:value-of select="."/> |
|
</xsl:element> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
</xsl:template> |
|
|
|
|
|
<xsl:template match="m:tableOfContents"> |
|
<xsl:choose> |
|
<xsl:when test="@xlink"> |
|
<xsl:element name="field"> |
|
<xsl:attribute name="name"><xsl:text>table_of_contents_t</xsl:text></xsl:attribute> |
|
<xsl:value-of select="@xlink"/> |
|
</xsl:element> |
|
</xsl:when> |
|
<xsl:otherwise> |
|
<xsl:element name="field"><xsl:attribute name="name">table_of_contents_t</xsl:attribute> |
|
<xsl:value-of select="."/> |
|
</xsl:element> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
</xsl:template> |
|
|
|
<xsl:template match="m:targetAudience"> |
|
<xsl:choose> |
|
<xsl:when test="@xlink"> |
|
<xsl:element name="field"> |
|
<xsl:attribute name="name"><xsl:text>toc_t</xsl:text></xsl:attribute> |
|
<xsl:value-of select="@xlink"/> |
|
</xsl:element> |
|
</xsl:when> |
|
<xsl:otherwise> |
|
<xsl:element name="field"><xsl:attribute name="name">target_audience_t</xsl:attribute> |
|
<xsl:value-of select="."/> |
|
</xsl:element> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
</xsl:template> |
|
|
|
<xsl:template match="m:relatedItem"> |
|
<xsl:if test="@type = 'host'"> |
|
<xsl:element name="field"><xsl:attribute name="name">related_item_identifier_t</xsl:attribute> |
|
<xsl:value-of select="m:identifier"/> |
|
</xsl:element> |
|
<xsl:element name="field"><xsl:attribute name="name">related_item_title_t</xsl:attribute> |
|
<xsl:value-of select="m:titleInfo/m:title"/> |
|
</xsl:element> |
|
</xsl:if> |
|
</xsl:template> |
|
|
|
<xsl:template match="m:location"> |
|
<xsl:if test="m:physicalLocation"> |
|
<xsl:element name="field"><xsl:attribute name="name">location_t</xsl:attribute> |
|
<xsl:for-each select="m:physicalLocation"> |
|
<xsl:if test=". != ''"> |
|
<xsl:value-of select="."/> |
|
<xsl:if test="position() != last()"> |
|
<xsl:text>; </xsl:text> |
|
</xsl:if> |
|
</xsl:if> |
|
</xsl:for-each> |
|
</xsl:element> |
|
</xsl:if> |
|
</xsl:template> |
|
|
|
<xsl:template match="m:accessCondition"> |
|
<xsl:element name="field"><xsl:attribute name="name">access_condition_t</xsl:attribute> |
|
<xsl:value-of select="."/> |
|
</xsl:element> |
|
</xsl:template> |
|
|
|
<xsl:template match="m:physicalDescription"> |
|
<xsl:element name="field"><xsl:attribute name="name">physical_description_t</xsl:attribute> |
|
<xsl:for-each select="*"> |
|
<xsl:if test=". != ''"> |
|
<xsl:value-of select="."/> |
|
<xsl:if test="position() != last()"> |
|
<xsl:text>; </xsl:text> |
|
</xsl:if> |
|
</xsl:if> |
|
</xsl:for-each> |
|
</xsl:element> |
|
</xsl:template> |
|
|
|
<xsl:template match="m:originInfo"> |
|
<!--+ |
|
+ first look for any date with a keyDate and any attribute with the value w3cdtf |
|
+ then for any date with a keyDate |
|
+ then for the first dateIssued |
|
+ then for the first dateCreated |
|
+ then for the first copyrightDate |
|
+ then for the first dateOther |
|
+--> |
|
<xsl:variable name="date_splat_w3c_key_date" select="*[@keyDate and @*='w3cdtf']"/> |
|
<xsl:variable name="date_splat_key_date" select="*[@keyDate]"/> |
|
<xsl:variable name="date_created" select="m:dateCreated[not(@keyDate)]"/> |
|
<xsl:variable name="date_issued" select="m:dateIssued[not(@keyDate)]"/> |
|
<xsl:variable name="date_copyrighted" select="m:copyrightDate[not(@keyDate)]"/> |
|
<xsl:variable name="date_other" select="m:dateOther[not(@keyDate)]"/> |
|
<xsl:variable name="date_captured" select="m:dateCaptured[not(@keyDate)]"/> |
|
<xsl:variable name="date_valid" select="m:dateValid[not(@keyDate)]"/> |
|
<xsl:variable name="date_modified" select="m:dateModified[not(@keyDate)]"/> |
|
|
|
<xsl:choose> |
|
<xsl:when test="$date_splat_w3c_key_date"> |
|
<xsl:element name="field"><xsl:attribute name="name">raw_date</xsl:attribute> |
|
<xsl:value-of select="$date_splat_w3c_key_date"/> |
|
</xsl:element> |
|
</xsl:when> |
|
<xsl:when test="$date_splat_key_date"> |
|
<xsl:element name="field"><xsl:attribute name="name">raw_date</xsl:attribute> |
|
<xsl:value-of select="$date_splat_key_date"/> |
|
</xsl:element> |
|
</xsl:when> |
|
<xsl:when test="$date_created"> |
|
<xsl:for-each select="$date_created"> |
|
<xsl:element name="field"><xsl:attribute name="name">raw_date</xsl:attribute> |
|
<xsl:choose> |
|
<xsl:when test="@point='start'"> |
|
<xsl:value-of select="."/> |
|
<xsl:text>-</xsl:text> |
|
<xsl:value-of select="following-sibling::*[1]"/> |
|
</xsl:when> |
|
<xsl:otherwise> |
|
<xsl:value-of select="."/> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
</xsl:element> |
|
</xsl:for-each> |
|
</xsl:when> |
|
<xsl:when test="$date_issued"> |
|
<xsl:for-each select="$date_issued"> |
|
<xsl:element name="field"><xsl:attribute name="name">raw_date</xsl:attribute> |
|
<xsl:choose> |
|
<xsl:when test="@point='start'"> |
|
<xsl:value-of select="."/> |
|
<xsl:text>-</xsl:text> |
|
<xsl:value-of select="following-sibling::*[1]"/> |
|
</xsl:when> |
|
<xsl:when test="@point='end'"> |
|
<xsl:text>n.d.</xsl:text> |
|
</xsl:when> |
|
<xsl:otherwise> |
|
<xsl:value-of select="."/> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
</xsl:element> |
|
</xsl:for-each> |
|
</xsl:when> |
|
<xsl:when test="$date_copyrighted"> |
|
<xsl:for-each select="$date_copyrighted"> |
|
<xsl:element name="field"><xsl:attribute name="name">raw_date</xsl:attribute> |
|
<xsl:choose> |
|
<xsl:when test="@point='start'"> |
|
<xsl:value-of select="."/> |
|
<xsl:text>-</xsl:text> |
|
<xsl:value-of select="following-sibling::*[1]"/> |
|
</xsl:when> |
|
<xsl:when test="@point='end'"> |
|
<xsl:text>n.d.</xsl:text> |
|
</xsl:when> |
|
<xsl:otherwise> |
|
<xsl:value-of select="."/> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
</xsl:element> |
|
</xsl:for-each> |
|
</xsl:when> |
|
<xsl:when test="$date_other"> |
|
<xsl:for-each select="$date_other"> |
|
<xsl:element name="field"><xsl:attribute name="name">raw_date</xsl:attribute> |
|
<xsl:choose> |
|
<xsl:when test="@point='start'"> |
|
<xsl:value-of select="."/> |
|
<xsl:text>-</xsl:text> |
|
<xsl:value-of select="following-sibling::*[1]"/> |
|
</xsl:when> |
|
<xsl:when test="@point='end'"> |
|
<xsl:text>n.d.</xsl:text> |
|
</xsl:when> |
|
<xsl:otherwise> |
|
<xsl:value-of select="."/> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
</xsl:element> |
|
</xsl:for-each> |
|
</xsl:when> |
|
</xsl:choose> |
|
|
|
<xsl:if test="m:placeTerm[@type='text']|m:publisher"> |
|
<xsl:element name="field"><xsl:attribute name="name">publisher_place_t</xsl:attribute> |
|
<xsl:for-each select="m:placeTerm[@type='text']|m:publisher"> |
|
<xsl:if test=". != ''"> |
|
<xsl:value-of select="."/> |
|
<xsl:if test="position() != last()"> |
|
<xsl:text>; </xsl:text> |
|
</xsl:if> |
|
</xsl:if> |
|
</xsl:for-each> |
|
</xsl:element> |
|
</xsl:if> |
|
|
|
<xsl:if test="m:edition|m:issuance|m:frequency"> |
|
<xsl:element name="field"><xsl:attribute name="name">origin_aspects_t</xsl:attribute> |
|
<xsl:for-each select="m:edition|m:issuance|m:frequency"> |
|
<xsl:if test=". != ''"> |
|
<xsl:value-of select="."/> |
|
<xsl:if test="position() != last()"> |
|
<xsl:text>; </xsl:text> |
|
</xsl:if> |
|
</xsl:if> |
|
</xsl:for-each> |
|
</xsl:element> |
|
</xsl:if> |
|
|
|
<xsl:variable name="pl" select="m:place"/> |
|
<xsl:variable name="pub" select="m:publisher"/> |
|
<xsl:variable name="datei" select="m:dateIssued" separator="== "/> |
|
<xsl:variable name="datec" select="m:dateCreated"/> |
|
<xsl:variable name="datecr" select="m:copyrightDate"/> |
|
<xsl:variable name="edit" select="m:edition"/> |
|
|
|
<xsl:if test="$pl or $pub or $datei or $datec or $edit"> |
|
<xsl:element name="field"><xsl:attribute name="name">origin_t</xsl:attribute> |
|
<xsl:if test="$pl or $pub or $datei or $datec"> |
|
<!-- place U concatenated with publisher T into U --> |
|
<xsl:if test="$pl or $pub"> |
|
<!-- place U --> |
|
<xsl:if test="$pl"> |
|
<xsl:for-each select="m:place/m:placeTerm"> |
|
<xsl:choose> |
|
<xsl:when test="@type = 'code'"> |
|
</xsl:when> |
|
<xsl:otherwise> |
|
<xsl:value-of select="."/> |
|
<xsl:if test="position()!=last()"> |
|
<xsl:text>; </xsl:text> |
|
</xsl:if> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
</xsl:for-each> |
|
</xsl:if> |
|
|
|
<!-- concatenated by ',' --> |
|
<xsl:if test="$pl and $pub"> |
|
<xsl:text>, </xsl:text> |
|
</xsl:if> |
|
|
|
<!-- publisher T --> |
|
<xsl:if test="$pub"> |
|
<xsl:for-each select="m:publisher"> |
|
<xsl:if test=". != ''"> |
|
<xsl:value-of select="."/> |
|
<xsl:if test="position()!=last()"> |
|
<xsl:text>; </xsl:text> |
|
</xsl:if> |
|
</xsl:if> |
|
</xsl:for-each> |
|
</xsl:if> |
|
</xsl:if> |
|
|
|
<xsl:if test="( $pl or $pub ) and ( $datei or $datec )"> |
|
<xsl:text>, </xsl:text> |
|
</xsl:if> |
|
|
|
<!-- dateIssued YR --> |
|
<xsl:if test="$datei"> |
|
<xsl:for-each select="m:dateIssued"> |
|
<xsl:if test=". != ''"> |
|
<xsl:value-of select="."/> |
|
<xsl:if test="position()!=last()"> |
|
<xsl:text>; </xsl:text> |
|
</xsl:if> |
|
</xsl:if> |
|
</xsl:for-each> |
|
</xsl:if> |
|
|
|
<xsl:if test="$datei or $datec"> |
|
<xsl:text>; </xsl:text> |
|
</xsl:if> |
|
|
|
<!-- dateCreated YR --> |
|
<xsl:if test="$datec"> |
|
<xsl:for-each select="m:dateCreated"> |
|
<xsl:if test=". != ''"> |
|
<xsl:value-of select="."/> |
|
<xsl:if test="position()!=last()"> |
|
<xsl:text>; </xsl:text> |
|
</xsl:if> |
|
</xsl:if> |
|
</xsl:for-each> |
|
</xsl:if> |
|
</xsl:if> |
|
|
|
<xsl:if test="$pl or $pub or $datei or $datec"> |
|
<xsl:text>, </xsl:text> |
|
</xsl:if> |
|
|
|
<xsl:if test="$edit"> |
|
<xsl:for-each select="m:edition"> |
|
<xsl:if test=". != ''"> |
|
<xsl:value-of select="."/> |
|
<xsl:if test="position()!=last()"> |
|
<xsl:text>; </xsl:text> |
|
</xsl:if> |
|
</xsl:if> |
|
</xsl:for-each> |
|
</xsl:if> |
|
</xsl:element> |
|
|
|
</xsl:if> |
|
</xsl:template> |
|
|
|
</xsl:stylesheet> |
|
|
|
|