source: CommonItems/trunk/XSLT/one-off_XSLT/ndg_to_dif.xsl @ 1364

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/CommonItems/trunk/XSLT/one-off_XSLT/ndg_to_dif.xsl@1364
Revision 1364, 13.8 KB checked in by selatham, 14 years ago (diff)

deprecating the two stage DIF and DC production XSLs

  • 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     DEPRECATED 04/08/06 Replaced by /ndgsvn/TI07-MOLES/trunk/DIF/XQuery/NDG-DIF.xquery
7     Author - Sue Latham 01/03/2004
8     Updated 01/09/2004 - New version(1.1) of NDG_B schema and change to using B-stub.
9     Updated 01/09/2004 - generalise the NDG_B service URL.
10     Updated 01/02/2005 - New version(1.02 aka 1.2) of NDG_B schema. Plus add spatio and temporal fields.
11     Updated 24/03/2005 - Bug fix for Listlevel, include 'B, no A' situation.
12     Updated 15/04/2005 - Use correct schemeIdentifier of 'DIF'
13     Updated 29/04/2005 - Create DIF V9 records (rather than V8 as before).
14     Updated 18/05/2005 - Insert our agreed DIFV9.4 schema namespace and location.
15
16    Copyright (C) 2005 CCLRC & NERC( Natural Environment Research Council ).
17    This software may be distributed under the terms of the
18    Q Public License, version 1.0 or later. http://ndg.nerc.ac.uk/public_docs/QPublic_license.txt
19-->
20<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://go-essp.org/dif_v9.4">
21        <xsl:output method="xml" encoding="UTF-8"  indent="yes"/>
22
23        <!-- Keys not really needed when using B-Stub as input. So comment this bit out.
24        <xsl:key name="dgMetadatakey" match="//dgMetadata/dgMetadataRecord" use="concat(dgMetadataID/repositoryIdentifier, dgMetadataID/localIdentifier)"/>
25        <xsl:key name="dgOrganisationkey" match="//dgMetadata/dgOrganisation" use="dgMetadataID/localIdentifier"/>
26        <xsl:key name="dgPersonkey" match="//dgMetadata/dgPerson" use="dgMetadataID/localIdentifier"/> -->
27
28        <xsl:template match="/">
29                <xsl:apply-templates/>
30        </xsl:template>
31        <xsl:template match="dgMetadata">
32                <xsl:apply-templates select="dgMetadataRecord"/>
33        </xsl:template>
34        <xsl:template match="dgMetadataRecord">
35                <DIF xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://go-essp.org/dif_v9.4 http://ndg.nerc.ac.uk/schemas/dif_v9.4.xsd">
36                        <!--<xsl:attribute name="xmlns:xsi">"http://www.w3.org/2001/XMLSchema-instance"</xsl:attribute>
37                        <xsl:attribute name="xsi:schemaLocation">"http://go-essp.org/dif_v9.4 http://ndg.nerc.ac.uk/schemas/dif_v9.4.xsd"</xsl:attribute> -->
38                        <xsl:apply-templates select="dgDataEntity"/>
39                        <xsl:apply-templates select="DataProvenance"/>
40                </DIF>
41        </xsl:template>
42        <xsl:template match="dgDataEntity">
43                <xsl:variable name="Nameofdataset" select="preceding-sibling::name"/>
44                <xsl:variable name="DataEntityID" select="concat(preceding-sibling::dgMetadataID/repositoryIdentifier,':', 'DIF',':', preceding-sibling::dgMetadataID/localIdentifier)"/>
45                        <Entry_ID>
46                                <xsl:value-of select="$DataEntityID"/>
47                        </Entry_ID>
48                        <Entry_Title>
49                                <xsl:value-of select="preceding-sibling::name"/>
50                        </Entry_Title>
51                        <xsl:for-each select="dgDataRoles/dgDataCreator/dgRoleHolder">
52                                <xsl:choose>
53                                        <xsl:when test="endDate">
54                                                <!-- if the RoleHolder has an end date ignore it. There should be only one RoleHolder  that is current -->
55                                        </xsl:when>
56                                        <xsl:otherwise>
57                                                <Data_Set_Citation>
58                                                        <xsl:choose>
59                                                                <xsl:when test="dgOrganisation">
60                                                                <!--    <xsl:variable name="Orgkey" select="dgOrganisationID/localIdentifier"/>
61                                                                        <xsl:for-each select="key('dgOrganisationkey', $Orgkey)"> -->
62                                                                                <Dataset_Creator>
63                                                                                        <xsl:value-of select="dgOrganisation/name"/>
64                                                                                </Dataset_Creator>
65                                                                </xsl:when>
66                                                                <xsl:when test="dgPerson">
67                                                                <!--    <xsl:variable name="Personkey" select="dgPersonID/localIdentifier"/>
68                                                                        <xsl:for-each select="key('dgPersonkey', $Personkey)"> -->
69                                                                                <Dataset_Creator>
70                                                                                        <xsl:value-of select="concat(dgPerson/name/initials,' ',dgPerson/name/familyName)"/>
71                                                                                </Dataset_Creator>
72                                                                </xsl:when>
73                                                        </xsl:choose>
74                                                        <Dataset_Title>
75                                                                <xsl:value-of select="$Nameofdataset"/>
76                                                        </Dataset_Title>
77                                                </Data_Set_Citation>
78                                        </xsl:otherwise>
79                                </xsl:choose>
80                        </xsl:for-each>
81
82                        <!-- Pick out only hierarchy's of the GCMD terms. Only created if a top level GCMD term appears first. -->
83                        <xsl:for-each select="dgDataSummary/dgParameterSummary/dgStdParameterMeasured">
84                                        <xsl:if test="(./ListLevel = 0 ) and (./dgValidTermID/ParentListID = 'http://gcmd.gsfc.nasa.gov/Resources/valids/gcmd_parameters.html' )">
85                                                <Parameters>
86                                                <Category>      <xsl:value-of select="./dgValidTerm"/></Category>       
87                                                <Topic>
88                                                        <xsl:choose>
89                                                        <xsl:when test="(./dgValidSubterm/ListLevel = 1 ) and
90                                                        (./dgValidSubterm/dgValidTermID/ParentListID = 'http://gcmd.gsfc.nasa.gov/Resources/valids/gcmd_parameters.html' )">
91                                                                <xsl:value-of select="./dgValidSubterm/dgValidTerm"/>
92                                                        </xsl:when>
93                                                        <xsl:otherwise>Unknown Topic</xsl:otherwise>
94                                                        </xsl:choose>
95                                                </Topic>
96                                                <Term>
97                                                        <xsl:choose>
98                                                        <xsl:when test="(./dgValidSubterm/dgValidSubterm/ListLevel = 2 ) and
99                                                        (./dgValidSubterm/dgValidSubterm/dgValidTermID/ParentListID = 'http://gcmd.gsfc.nasa.gov/Resources/valids/gcmd_parameters.html' )">
100                                                                <xsl:value-of select="./dgValidSubterm/dgValidSubterm/dgValidTerm"/>
101                                                        </xsl:when>
102                                                        <xsl:otherwise>Unknown Term</xsl:otherwise>
103                                                        </xsl:choose>
104                                                </Term> 
105                                                <xsl:if test="./dgValidSubterm/dgValidSubterm/dgValidSubterm">
106                                                        <Variable>
107                                                                <xsl:value-of select="./dgValidSubterm/dgValidSubterm/dgValidSubterm/dgValidTerm"/>
108                                                        </Variable>
109                                                        <Detailed_Variable>
110                                                                <xsl:value-of select="../ParameterName"/>
111                                                        </Detailed_Variable>
112                                                </xsl:if>       
113                                                </Parameters>
114                                        </xsl:if>
115                        </xsl:for-each>
116                       
117                        <!-- Get the ISO topic category stuff out -->
118                        <xsl:for-each select="following-sibling::dgStructuredKeyword">
119                                        <xsl:if test="./dgValidTermID/ParentListID = 'ISO 19115 Topic Category'">
120                                                        <ISO_Topic_Category>
121                                                                <xsl:value-of select="./dgValidTerm"/>
122                                                        </ISO_Topic_Category>
123                                        </xsl:if>
124                        </xsl:for-each>
125
126                        <xsl:for-each select="dgDataSummary/dgDataCoverage/dgTemporalCoverage/DateRange">
127                                        <Temporal_Coverage>
128                                        <Start_Date><xsl:value-of select="./DateRangeStart"></xsl:value-of></Start_Date>
129                                        <Stop_Date><xsl:value-of select="./DateRangeEnd"></xsl:value-of></Stop_Date>
130                                </Temporal_Coverage>
131                        </xsl:for-each>
132                        <xsl:for-each select="dgDataSummary/dgDataCoverage/dgSpatioTemporalCoverage/dgSpatioTemporalRange/dgTemporalCoverage/DateRange">
133                                        <Temporal_Coverage>
134                                        <Start_Date><xsl:value-of select="./DateRangeStart"></xsl:value-of></Start_Date>
135                                        <Stop_Date><xsl:value-of select="./DateRangeEnd"></xsl:value-of></Stop_Date>
136                                </Temporal_Coverage>
137                        </xsl:for-each>
138                       
139                        <!-- Put in temporal and spatial coverage-->
140                        <xsl:for-each select="dgDataSummary/dgDataCoverage/dgSpatialCoverage/BoundingBox">
141                                <Spatial_Coverage>
142                                        <Southernmost_Latitude><xsl:value-of select="./LimitSouth"></xsl:value-of></Southernmost_Latitude>
143                                        <Northernmost_Latitude><xsl:value-of select="./LimitNorth"></xsl:value-of></Northernmost_Latitude>
144                                        <Westernmost_Longitude><xsl:value-of select="./LimitWest"></xsl:value-of></Westernmost_Longitude>
145                                        <Easternmost_Longitude><xsl:value-of select="./LimitEast"></xsl:value-of></Easternmost_Longitude>
146                                </Spatial_Coverage>                     
147                        </xsl:for-each>
148                        <xsl:for-each select="dgDataSummary/dgDataCoverage/dgSpatioTemporalCoverage/dgSpatioTemporalRange/dgSpatialCoverage/BoundingBox">
149                                <Spatial_Coverage>
150                                        <Southernmost_Latitude><xsl:value-of select="./LimitSouth"></xsl:value-of></Southernmost_Latitude>
151                                        <Northernmost_Latitude><xsl:value-of select="./LimitNorth"></xsl:value-of></Northernmost_Latitude>
152                                        <Westernmost_Longitude><xsl:value-of select="./LimitWest"></xsl:value-of></Westernmost_Longitude>
153                                        <Easternmost_Longitude><xsl:value-of select="./LimitEast"></xsl:value-of></Easternmost_Longitude>
154                                </Spatial_Coverage>                     
155                        </xsl:for-each>
156
157
158                        <xsl:for-each select="RelatedDeployment">
159                        <!-- following not needed with everything already in b-stub record
160                                <xsl:variable name="RDkey" select="concat( activity/ActivityID/repositoryIdentifier, ActivityID/localIdentifier)"/>
161                                <xsl:for-each select="key('dgMetadatakey', $RDkey)"> -->
162                                        <Project>
163                                                <Short_Name>
164                                                        <xsl:value-of select="activity/abbreviation"/>
165                                                </Short_Name>
166                                                <Long_Name>
167                                                        <xsl:value-of select="activity/name"/>
168                                                </Long_Name>
169                                        </Project>
170                        </xsl:for-each>
171
172                        <xsl:for-each select="dgDataRoles/dgDataCurator/dgRoleHolder">
173                                <xsl:choose>
174                                        <xsl:when test="endDate" >
175                                                <!-- if the RoleHolder has an end date ignore it. There should be only one RoleHolder  that is current -->
176                                        </xsl:when>
177                                        <xsl:when test="dgRoleID" >
178                                                <!-- if the RoleHolder is not a dgPerson or dgOrganisation ignore it.  -->
179                                        </xsl:when>
180                                        <xsl:otherwise>
181                                                <Data_Center>
182                                                        <xsl:choose>
183                                                                <xsl:when test="dgOrganisation">
184                                                                <!--    <xsl:variable name="Orgkey" select="dgOrganisationID/localIdentifier"/>
185                                                                        <xsl:for-each select="key('dgOrganisationkey', $Orgkey)"> -->
186                                                                                <Data_Center_Name>
187                                                                                        <Short_Name>
188                                                                                                <xsl:value-of select="dgOrganisation/abbreviation"/>
189                                                                                        </Short_Name>
190                                                                                        <Long_Name>
191                                                                                                <xsl:value-of select="dgOrganisation/name"/>
192                                                                                        </Long_Name>
193                                                                                </Data_Center_Name>
194                                                                                <Data_Center_URL>
195                                                                                        <xsl:value-of select="dgOrganisation/contactDetails/URI"/>
196                                                                                </Data_Center_URL>
197                                                                </xsl:when>
198                                                                <xsl:when test="dgPerson">
199                                                                <!--    <xsl:variable name="Personkey" select="dgPersonID/localIdentifier"/>
200                                                                        <xsl:for-each select="key('dgPersonkey', $Personkey)"> -->
201                                                                                <Data_Center_Name>
202                                                                                        <Short_Name>
203                                                                                                <xsl:value-of select="dgPerson/abbreviation"/>
204                                                                                        </Short_Name>
205                                                                                        <Long_Name>
206                                                                                                <xsl:value-of select="dgPerson/name"/>
207                                                                                        </Long_Name>
208                                                                                </Data_Center_Name>
209                                                                                <Data_Center_URL>
210                                                                                        <xsl:value-of select="dgPerson/contactDetails/URI"/>
211                                                                                </Data_Center_URL>
212                                                                </xsl:when>
213                                                                <xsl:otherwise>
214                                                                        <Data_Center_Name>
215                                                                                <Short_Name>Unknown Data Centre</Short_Name>
216                                                                        </Data_Center_Name>
217                                                                </xsl:otherwise>
218                                                        </xsl:choose>
219                                                        <xsl:for-each select="//dgMetadataRecord/dgDataEntity/dgDataGranule">
220                                                                <Data_Set_ID>
221                                                                        <xsl:value-of select="concat(./dataModelID/repositoryIdentifier, ':', ./dataModelID/schemeIdentifier, ':', ./dataModelID/localIdentifier)"/>
222                                                                </Data_Set_ID>
223                                                        </xsl:for-each>
224                                                        <Personnel>
225                                                                <Role>Data Center Contact</Role>
226                                                                <First_Name></First_Name>
227                                                                <Last_Name></Last_Name>
228                                                                <Email><xsl:value-of select="preceding-sibling::contactDetails/eMail"/></Email>
229                                                                <Phone><xsl:value-of select="preceding-sibling::contactDetails/telephone"/></Phone>
230                                                                <FAX><xsl:value-of select="preceding-sibling::contactDetails/fax"/></FAX>
231                                                                <Contact_Address>
232                                                                        <xsl:for-each select="preceding-sibling::contactDetails/address/addressline">
233                                                                                <Address><xsl:value-of select="."/></Address>
234                                                                        </xsl:for-each>
235                                                                        <City><xsl:value-of select="preceding-sibling::contactDetails/address/city"/></City>
236                                                                        <Postal_Code><xsl:value-of select="preceding-sibling::contactDetails/address/postcode"/></Postal_Code>
237                                                                        <Country><xsl:value-of select="preceding-sibling::contactDetails/address/country"/></Country>
238                                                                </Contact_Address>                                                     
239                                                        </Personnel>
240                                                </Data_Center>
241                                        </xsl:otherwise>
242                                </xsl:choose>
243                        </xsl:for-each>
244                       
245                        <Summary>
246                                <xsl:value-of select="preceding-sibling::dgMetadataDescription/abstract/abstractText"/>
247                        </Summary>
248                       
249                        <Related_URL>
250                                <URL_Content_Type>NDG_B_SERVICE</URL_Content_Type>
251                                <URL>
252                                <xsl:value-of select="//dgMetadataRecord/dgMetadataID/repositoryIdentifier"/>
253                                </URL>
254                                <Description>The NDG service for browsing metadata.</Description>
255                        </Related_URL>
256                       
257                        <!-- work out what, if any, A service is available. Have to look at 'scheme' part if datasetID -->
258                        <xsl:for-each select="//dgMetadataRecord/dgDataEntity/dgDataGranule">
259                                <xsl:choose>
260                                        <xsl:when test="./dataModelID/schemeIdentifier='NDG-A0'">
261                                                <Related_URL>
262                                                        <URL_Content_Type>NDG_A_SERVICE</URL_Content_Type>
263                                                        <URL>http://dmgdev1.esc.rl.ac.uk/cgi-bin/ndgDataAccess?datasetSource=dmgdev1.esc.rl.ac.uk&amp;datasetID=</URL>
264                                                        <Description>The NDG service delivering data via NDG A metadata.</Description>
265                                                </Related_URL>
266                                        </xsl:when>
267                                        <xsl:when test="./dataModelID/schemeIdentifier= 'CDML-0'">
268                                                <Related_URL>
269                                                        <URL_Content_Type>NDG_A_SERVICE</URL_Content_Type>
270                                                        <URL>http://cdat.badc.nerc.ac.uk/cgi-bin/dxui.py?datasetURI_1=/</URL>
271                                                        <Description>The NDG service delivering data via NDG CDML.</Description>
272                                                </Related_URL>
273                                        </xsl:when>
274                                        <xsl:when test="./dataModelID/schemeIdentifier= 'URI'">
275                                                <Related_URL>
276                                                        <URL>
277                                                                <xsl:value-of select="./instance/URI"></xsl:value-of>
278                                                        </URL>
279                                                </Related_URL>
280                                        </xsl:when>
281
282                                </xsl:choose>
283                        </xsl:for-each>
284                        <Metadata_Name>CEOS IDN DIF</Metadata_Name>
285                        <Metadata_Version>9.4</Metadata_Version>
286        </xsl:template>
287
288       
289        <xsl:template match="DataProvenance">
290                <xsl:if test="./RecordCreation">
291                        <DIF_Creation_Date>
292                                <xsl:value-of select="./RecordCreation/CreatedDate"></xsl:value-of>
293                        </DIF_Creation_Date>
294                </xsl:if>
295                <xsl:if test="./RecordUpdate">
296                        <Last_DIF_Revision_Date>
297                        <xsl:value-of select="./RecordUpdate[last()]/UpdateDate[last()]"></xsl:value-of>
298                        </Last_DIF_Revision_Date>
299                        <DIF_Revision_History>
300                        <xsl:for-each select="./RecordUpdate">
301                                        <xsl:value-of select="concat(./UpdateDate, ' ')"></xsl:value-of>
302                                        <xsl:for-each select="./UpdateSummary">
303                                                        <xsl:value-of select="concat(., ' ')"></xsl:value-of>
304                                        </xsl:for-each>
305                        </xsl:for-each>
306                        </DIF_Revision_History>
307                </xsl:if>
308        </xsl:template>
309</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.