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

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

adding dif_v9 agreed namespace.

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