source: Document_handling/trunk/XSLT/ndg_to_dif.xsl @ 225

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

Amended for version 1.1 of the Metadata Model schema, plus now uses B-stub created by xquery.

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
Line 
1<?xml version="1.0" encoding="UTF-8"?>
2<!-- An XSLT transformation to create a GCMD DIF from an NDG 'B-stub' MetadataModel 
3     document. This contains a DataEntity and associated first level entities.
4     (The B-stub is created with a separate xquery).
5     
6     Author - Sue Latham 01/03/2004
7     Updated 01/09/2004 - New version(1.1) of NDG_B schema and change to using B-stub.
8-->
9<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
10        <xsl:output method="xml" encoding="UTF-8" doctype-system="http://gcmd.gsfc.nasa.gov/Aboutus/xml/dif/dif.dtd" indent="yes"/>
11        <xsl:key name="dgMetadatakey" match="//dgMetadata/dgMetadataRecord" use="concat(dgMetadataID/repositoryIdentifier, dgMetadataID/localIdentifier)"/>
12        <!-- change this bit about organisation key and person key when I know where they will appear in the b-stub. Will keys be needed?-->
13        <xsl:key name="dgOrganisationkey" match="//dgMetadata/dgOrganisation" use="dgMetadataID/localIdentifier"/>
14        <xsl:key name="dgPersonkey" match="//dgMetadata/dgPerson" use="dgMetadataID/localIdentifier"/>
15
16        <xsl:template match="/">
17                <xsl:apply-templates/>
18        </xsl:template>
19        <xsl:template match="dgMetadata">
20                <xsl:apply-templates select="dgMetadataRecord"/>
21        </xsl:template>
22        <xsl:template match="dgMetadataRecord">
23                <DIF>
24                <xsl:apply-templates select="dgDataEntity"/>
25                <xsl:apply-templates select="dgDataProvenance"/>
26                </DIF>
27        </xsl:template>
28        <xsl:template match="dgDataEntity">
29                <xsl:variable name="Nameofdataset" select="preceding-sibling::name"/>
30                <xsl:variable name="DataEntityID" select="concat('/',preceding-sibling::dgMetadataID/repositoryIdentifier,'/',preceding-sibling::dgMetadataID/localIdentifier)"/>
31                        <Entry_ID>
32                                <xsl:value-of select="$DataEntityID"/>
33                        </Entry_ID>
34                        <Entry_Title>
35                                <xsl:value-of select="preceding-sibling::name"/>
36                        </Entry_Title>
37                        <xsl:for-each select="dgDataRoles/dgDataCreator/dgRoleHolder">
38                                <xsl:choose>
39                                        <xsl:when test="endDate">
40                                                <!-- if the RoleHolder has an end date ignore it. There should be only one RoleHolder  that is current -->
41                                        </xsl:when>
42                                        <xsl:otherwise>
43                                                <Data_Set_Citation>
44                                                        <xsl:choose>
45                                                                <xsl:when test="dgOrganisationID">
46                                                                        <xsl:variable name="Orgkey" select="dgOrganisationID/localIdentifier"/>
47                                                                        <xsl:for-each select="key('dgOrganisationkey', $Orgkey)">
48                                                                                <Dataset_Creator>
49                                                                                        <xsl:value-of select="name"/>
50                                                                                </Dataset_Creator>
51                                                                        </xsl:for-each>
52                                                                </xsl:when>
53                                                                <xsl:when test="dgPersonID">
54                                                                        <xsl:variable name="Personkey" select="dgPersonID/localIdentifier"/>
55                                                                        <xsl:for-each select="key('dgPersonkey', $Personkey)">
56                                                                                <Dataset_Creator>
57                                                                                        <xsl:value-of select="concat(name/initials,' ',name/familyName)"/>
58                                                                                </Dataset_Creator>
59                                                                        </xsl:for-each>
60                                                                </xsl:when>
61                                                        </xsl:choose>
62                                                        <Dataset_Title>
63                                                                <xsl:value-of select="$Nameofdataset"/>
64                                                        </Dataset_Title>
65                                                </Data_Set_Citation>
66                                        </xsl:otherwise>
67                                </xsl:choose>
68                        </xsl:for-each>
69                       
70                        <!-- Pick out only hierarchy's of the GCMD terms. Only created if a top level GCMD term appears first. -->
71                        <xsl:for-each select="dgDataSummary/dgParameterSummary/dgStdParameterMeasured">
72                                        <xsl:if test="(./ListLevel = 1) and (./dgValidTermID/ParentListID = 'http://gcmd.gsfc.nasa.gov/Resources/valids/gcmd_parameters.html' )">
73                                                <Parameters>
74                                                <Category>      <xsl:value-of select="./dgValidTerm"/></Category>       
75                                                <Topic>
76                                                        <xsl:choose>
77                                                        <xsl:when test="(./dgValidSubterm/ListLevel = 2 ) and
78                                                        (./dgValidSubterm/dgValidTermID/ParentListID = 'http://gcmd.gsfc.nasa.gov/Resources/valids/gcmd_parameters.html' )">
79                                                                <xsl:value-of select="./dgValidSubterm/dgValidTerm"/>
80                                                        </xsl:when>
81                                                        <xsl:otherwise>Unknown Topic</xsl:otherwise>
82                                                        </xsl:choose>
83                                                </Topic>       
84                                                <Term>
85                                                        <xsl:choose>
86                                                        <xsl:when test="(./dgValidSubterm/dgValidSubterm/ListLevel = 3 ) and
87                                                        (./dgValidSubterm/dgValidSubterm/dgValidTermID/ParentListID = 'http://gcmd.gsfc.nasa.gov/Resources/valids/gcmd_parameters.html' )">
88                                                                <xsl:value-of select="./dgValidSubterm/dgValidSubterm/dgValidTerm"/>
89                                                        </xsl:when>
90                                                        <xsl:otherwise>Unknown Term</xsl:otherwise>
91                                                        </xsl:choose>
92                                                </Term> 
93                                                <xsl:if test="./dgValidSubterm/dgValidSubterm/dgValidSubterm">
94                                                        <Variable>
95                                                                <xsl:value-of select="./dgValidSubterm/dgValidSubterm/dgValidSubterm/dgValidTerm"/>
96                                                        </Variable>
97                                                        <Detailed_Variable>
98                                                                <xsl:value-of select="../ParameterName"/>
99                                                        </Detailed_Variable>
100                                                </xsl:if>       
101                                                </Parameters>
102                                        </xsl:if>
103                        </xsl:for-each>
104
105                        <xsl:for-each select="RelatedDeployment">
106                        <!-- not needed with everything already in b-stub record
107                                <xsl:variable name="RDkey" select="concat( activity/ActivityID/repositoryIdentifier, ActivityID/localIdentifier)"/>
108                                <xsl:for-each select="key('dgMetadatakey', $RDkey)"> -->
109                                        <Project>
110                                                <Short_Name>
111                                                        <xsl:value-of select="activity/abbreviation"/>
112                                                </Short_Name>
113                                                <Long_Name>
114                                                        <xsl:value-of select="activity/name"/>
115                                                </Long_Name>
116                                        </Project>
117                        </xsl:for-each>
118                       
119                        <xsl:for-each select="dgDataRoles/dgDataCurator/dgRoleHolder">
120                                <xsl:choose>
121                                        <xsl:when test="endDate" >
122                                                <!-- if the RoleHolder has an end date ignore it. There should be only one RoleHolder  that is current -->
123                                        </xsl:when>
124                                        <xsl:when test="dgRoleID" >
125                                                <!-- if the RoleHolder is not a dgPerson or dgOrganisation ignore it.  -->
126                                        </xsl:when>
127                                        <xsl:otherwise>
128                                                <Data_Center>
129                                                        <xsl:choose>
130                                                                <xsl:when test="dgOrganisationID">
131                                                                        <xsl:variable name="Orgkey" select="dgOrganisationID/localIdentifier"/>
132                                                                        <xsl:for-each select="key('dgOrganisationkey', $Orgkey)">
133                                                                                <Data_Center_Name>
134                                                                                        <Short_Name>
135                                                                                                <xsl:value-of select="abbreviation"/>
136                                                                                        </Short_Name>
137                                                                                        <Long_Name>
138                                                                                                <xsl:value-of select="name"/>
139                                                                                        </Long_Name>
140                                                                                </Data_Center_Name>
141                                                                                <Data_Center_URL>
142                                                                                        <xsl:value-of select="contactDetails/URI"/>
143                                                                                </Data_Center_URL>
144                                                                        </xsl:for-each>
145                                                                </xsl:when>
146                                                                <xsl:when test="dgPersonID">
147                                                                        <xsl:variable name="Personkey" select="dgPersonID/localIdentifier"/>
148                                                                        <xsl:for-each select="key('dgPersonkey', $Personkey)">
149                                                                                <Data_Center_Name>
150                                                                                        <Short_Name>
151                                                                                                <xsl:value-of select="abbreviation"/>
152                                                                                        </Short_Name>
153                                                                                        <Long_Name>
154                                                                                                <xsl:value-of select="name"/>
155                                                                                        </Long_Name>
156                                                                                </Data_Center_Name>
157                                                                                <Data_Center_URL>
158                                                                                        <xsl:value-of select="contactDetails/URI"/>
159                                                                                </Data_Center_URL>
160                                                                        </xsl:for-each>
161                                                                </xsl:when>
162                                                                <xsl:otherwise>
163                                                                        <Data_Center_Name>
164                                                                                <Short_Name>Unknown Data Centre</Short_Name>
165                                                                        </Data_Center_Name>
166                                                                </xsl:otherwise>
167                                                        </xsl:choose>
168                                                        <xsl:for-each select="//dgMetadataRecord/dgDataEntity/dgDataGranule">                                                   
169                                                                <Data_Set_ID>
170                                                                        <xsl:value-of select="./dataModelID"/>
171                                                                </Data_Set_ID>
172                                                        </xsl:for-each>
173                                                        <Personnel>
174                                                                <Role>Data Center Contact</Role>
175                                                                <First_Name></First_Name>
176                                                                <Last_Name></Last_Name>
177                                                                <Email><xsl:value-of select="following::contactDetails/eMail"/></Email>
178                                                                <Phone><xsl:value-of select="following::contactDetails/telephone"/></Phone>
179                                                                <FAX><xsl:value-of select="following::contactDetails/fax"/></FAX>
180                                                                <Address><xsl:value-of select="following::contactDetails/address"/></Address>                                                   
181                                                        </Personnel>
182                                                </Data_Center>
183                                        </xsl:otherwise>
184                                </xsl:choose>
185                        </xsl:for-each>
186                       
187                        <Summary>
188                                <xsl:value-of select="preceding-sibling::dgMetadataDescription/abstract/abstractText"/>
189                        </Summary>
190                       
191                        <Related_URL>
192                                <URL_Content_Type>NDG_B_SERVICE</URL_Content_Type>
193                                <URL>badc.nerc.ac.uk</URL>
194                                <Description>The NDG service for browsing metadata.</Description>
195                        </Related_URL>
196                       
197                        <!-- work out what, if any, A service is available. Have to look at 'scheme' part if datasetID -->
198                        <xsl:for-each select="//dgMetadataRecord/dgDataEntity/dgDataGranule">
199                                <xsl:choose>
200                                        <xsl:when test="starts-with(./dataModelID, '/NDG_A_')">
201                                                <Related_URL>
202                                                        <URL_Content_Type>NDG_A_SERVICE</URL_Content_Type>
203                                                        <URL>http://dmgdev1.esc.rl.ac.uk/cgi-bin/ndgDataAccess?datasetSource=dmgdev1.esc.rl.ac.uk&amp;datasetID=</URL>
204                                                        <Description>The NDG service delivering data via NDG A metadata.</Description>
205                                                </Related_URL>
206                                        </xsl:when>
207                                        <xsl:when test="starts-with(./dataModelID, '/CDML_')">
208                                                <Related_URL>
209                                                        <URL_Content_Type>NDG_A_SERVICE</URL_Content_Type>
210                                                        <URL>http://cdat.badc.nerc.ac.uk/cgi-bin/dxui.py?datasetURI_1=/</URL>
211                                                        <Description>The NDG service delivering data via NDG CDML.</Description>
212                                                </Related_URL>
213                                        </xsl:when>
214                                </xsl:choose>
215                        </xsl:for-each>
216        </xsl:template>
217        <xsl:template match="dgDataProvenance">
218                <xsl:if test="./RecordCreation">
219                        <DIF_Creation_Date>
220                                <xsl:value-of select="./RecordCreation/CreatedDate"></xsl:value-of>
221                        </DIF_Creation_Date>
222                </xsl:if>
223                <xsl:if test="./RecordUpdate">
224                        <Last_DIF_Revision_Date>
225                        <xsl:value-of select="./RecordUpdate[last()]/UpdateDate[last()]"></xsl:value-of>
226                        </Last_DIF_Revision_Date>
227                        <DIF_Revision_History>
228                        <xsl:for-each select="./RecordUpdate"> 
229                                        <xsl:value-of select="./UpdateDate"></xsl:value-of>
230                                        <xsl:for-each select="./UpdateSummary">
231                                                        <xsl:value-of select="."></xsl:value-of>
232                                        </xsl:for-each>
233                        </xsl:for-each>
234                        </DIF_Revision_History>
235                </xsl:if>
236               
237
238        </xsl:template>
239</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.