source: Document_handling/trunk/XSLT/ndg_to_DC.xsl @ 253

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/Document_handling/trunk/XSLT/ndg_to_DC.xsl@253
Revision 253, 5.8 KB checked in by selatham, 15 years ago (diff)

* empty log message *

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1<?xml version="1.0" encoding="UTF-8"?>
2<!-- An XSLT transformation to create an OAI-PMH unqualified Dublin Core record from an NDG 'B-stub' MetadataModel 
3     document.
4     (The B-stub is created with a separate xquery).
5     
6     Author - Sue Latham 01/06/2005
7     Copyright (C) 2005 CCLRC & NERC( Natural Environment Research Council ).
8    This software may be distributed under the terms of the
9    Q Public License, version 1.0 or later. http://ndg.nerc.ac.uk/public_docs/QPublic_license.txt
10-->
11<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"    xmlns:dc="http://purl.org/dc/elements/1.1/"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
12        <xsl:output method="xml" encoding="UTF-8"  indent="yes"/>
13       
14        <xsl:template match="/">
15                <xsl:apply-templates/>
16        </xsl:template>
17        <xsl:template match="dgMetadata">
18                <xsl:apply-templates select="dgMetadataRecord"/>
19        </xsl:template>
20        <xsl:template match="dgMetadataRecord">
21                <oai_dc:dc      xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/    http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
22                        <!--<xsl:attribute name="xmlns:xsi">"http://www.w3.org/2001/XMLSchema-instance"</xsl:attribute>
23                        <xsl:attribute name="xsi:schemaLocation">"http://go-essp.org/dif_v9.4 http://ndg.nerc.ac.uk/schemas/dif_v9.4.xsd"</xsl:attribute> -->
24                        <xsl:apply-templates select="dgDataEntity"/>
25        </oai_dc:dc >                                           
26        </xsl:template>
27        <xsl:template match="dgDataEntity">
28                <xsl:variable name="DataEntityID" select="concat(preceding-sibling::dgMetadataID/repositoryIdentifier,':', 'DC',':', preceding-sibling::dgMetadataID/localIdentifier)"/>
29                         <dc:title xml:lang="en">
30                                <xsl:value-of select="preceding-sibling::name"/>
31                        </dc:title>
32
33                        <xsl:for-each select="dgDataRoles/dgDataCreator/dgRoleHolder">
34                                <xsl:choose>
35                                        <xsl:when test="endDate">
36                                                <!-- if the RoleHolder has an end date ignore it. There should be only one RoleHolder  that is current -->
37                                        </xsl:when>
38                                        <xsl:otherwise>
39                                                        <xsl:choose>
40                                                                <xsl:when test="dgOrganisation">
41                                                                <!--    <xsl:variable name="Orgkey" select="dgOrganisationID/localIdentifier"/>
42                                                                        <xsl:for-each select="key('dgOrganisationkey', $Orgkey)"> -->
43                                                                                <dc:creator>
44                                                                                        <xsl:value-of select="dgOrganisation/name"/>
45                                                                                </dc:creator>
46                                                                </xsl:when>
47                                                                <xsl:when test="dgPerson">
48                                                                <!--    <xsl:variable name="Personkey" select="dgPersonID/localIdentifier"/>
49                                                                        <xsl:for-each select="key('dgPersonkey', $Personkey)"> -->
50                                                                                <dc:creator>
51                                                                                        <xsl:value-of select="concat(dgPerson/name/initials,' ',dgPerson/name/familyName)"/>
52                                                                                </dc:creator>
53                                                                </xsl:when>
54                                                        </xsl:choose>
55                                        </xsl:otherwise>
56                                </xsl:choose>
57                        </xsl:for-each>
58                       
59                        <!-- Pick out only hierarchy's of the GCMD terms for the subjecty. Only created if a top level GCMD term appears first. -->
60                        <xsl:for-each select="dgDataSummary/dgParameterSummary/dgStdParameterMeasured">
61                                        <xsl:if test="(./ListLevel = 0 ) and (./dgValidTermID/ParentListID = 'http://gcmd.gsfc.nasa.gov/Resources/valids/gcmd_parameters.html' )">
62                                        <dc:subject>
63                                                <xsl:value-of select="./dgValidTerm"/>
64                                                        <xsl:choose>
65                                                                <xsl:when test="(./dgValidSubterm/ListLevel = 1 ) and
66                                                                (./dgValidSubterm/dgValidTermID/ParentListID = 'http://gcmd.gsfc.nasa.gov/Resources/valids/gcmd_parameters.html' )">
67                                                                        <xsl:value-of select="concat(' ',./dgValidSubterm/dgValidTerm)"/>
68                                                                </xsl:when>
69                                                                <xsl:otherwise>Unknown Topic</xsl:otherwise>
70                                                        </xsl:choose>   
71                                                        <xsl:choose>
72                                                                <xsl:when test="(./dgValidSubterm/dgValidSubterm/ListLevel = 2 ) and
73                                                                (./dgValidSubterm/dgValidSubterm/dgValidTermID/ParentListID = 'http://gcmd.gsfc.nasa.gov/Resources/valids/gcmd_parameters.html' )">
74                                                                        <xsl:value-of select="concat(' ',./dgValidSubterm/dgValidSubterm/dgValidTerm)"/>
75                                                                </xsl:when>
76                                                                <xsl:otherwise>Unknown Term</xsl:otherwise>
77                                                        </xsl:choose>
78                                                        <xsl:if test="./dgValidSubterm/dgValidSubterm/dgValidSubterm">
79                                                                <xsl:value-of select="concat(' ',./dgValidSubterm/dgValidSubterm/dgValidSubterm/dgValidTerm)"/>
80                                                                <xsl:value-of select="concat(' ',../ParameterName)"/>
81                                                        </xsl:if>       
82                                                </dc:subject>
83                                        </xsl:if>
84                        </xsl:for-each>
85                       
86                        <!-- Get the ISO topic category stuff out as a subject -->
87                        <xsl:for-each select="following-sibling::dgStructuredKeyword">
88                                        <xsl:if test="./dgValidTermID/ParentListID = 'ISO 19115 Topic Category'">
89                                                        <dc:subject>
90                                                                <xsl:value-of select="./dgValidTerm"/>
91                                                        </dc:subject>
92                                        </xsl:if>
93                        </xsl:for-each>
94                       
95                        <dc:description>
96                                <xsl:value-of select="preceding-sibling::dgMetadataDescription/abstract/abstractText"/>
97                        </dc:description>
98                               
99                        <xsl:for-each select="dgDataRoles/dgDataCurator/dgRoleHolder">
100                                <xsl:choose>
101                                        <xsl:when test="endDate" >
102                                                <!-- if the RoleHolder has an end date ignore it. There should be only one RoleHolder  that is current -->
103                                        </xsl:when>
104                                        <xsl:when test="dgRoleID" >
105                                                <!-- if the RoleHolder is not a dgPerson or dgOrganisation ignore it.  -->
106                                        </xsl:when>
107                                        <xsl:otherwise>
108                                                <dc:publisher>
109                                                        <xsl:choose>
110                                                                <xsl:when test="dgOrganisation">
111                                                                        <xsl:value-of select="dgOrganisation/name"/>
112                                                                </xsl:when>
113                                                                <xsl:when test="dgPerson">
114                                                                                <xsl:value-of select="dgPerson/name"/>
115                                                                </xsl:when>
116                                                                <xsl:otherwise>Unknown Publisher</xsl:otherwise>
117                                                        </xsl:choose>
118                                                </dc:publisher> 
119                                        </xsl:otherwise>
120                                </xsl:choose>
121                        </xsl:for-each>
122                       
123
124                        <xsl:if test="following-sibling::DataProvenance/RecordCreation">
125                                <dc:date>
126                                        <xsl:value-of select="following-sibling::DataProvenance/RecordCreation/CreatedDate"></xsl:value-of>
127                                </dc:date>
128                        </xsl:if>
129                        <dc:identifier>
130                                <xsl:value-of select="$DataEntityID"/>
131                        </dc:identifier>       
132        </xsl:template>
133</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.