source: Document_handling/trunk/XSLT/dif_to_ndg.xsl @ 230

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

Added license info.

  • 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 a skeleton NDG MetadataModel DataEntity document from an existing GCMD DIF record.
3      Do not run this if an NDG MDM document already exists!
4       If the original document contains just "DIF" a skeleton NDG MDM document is created with all mandatory fields but no content.
5      Author - Sue Latham 01/06/2004
6      Version 1.1 01/08/04 amended for changes to MDM schema as at v1.1.
7                         09/08/04 amended to split address lines, use GCMD level 4 name as ParameterName if GCMD detailed parameter doesn't exist.
8                         26/08/04 amended to collect metadataID from DIF if it exists splitting on new format with slashes instead of colons.
9
10    Copyright (C) 2005 CCLRC & NERC( Natural Environment Research Council ).
11    This software may be distributed under the terms of the
12    Q Public License, version 1.0 or later. http://ndg.nerc.ac.uk/public_docs/QPublic_license.txt
13-->
14<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
15        <xsl:output method="xml" encoding="UTF-8"  indent="yes" />
16       
17      <xsl:template match="/">
18                <xsl:apply-templates/>
19        </xsl:template>
20       
21        <!-- This template is for splitting a text element which contains (unix) line breaks into separate text elements.
22              Here it is used to split an address element into separate address lines elements. -->
23        <xsl:template match="node()" mode="replaceLineBreaks"
24              name="replaceLineBreaks">
25          <xsl:param name="string" select="." />
26          <xsl:choose>
27             <!-- if the string starts with a line break... -->
28            <xsl:when test="starts-with($string, '&#x000A;')">
29                      <!-- and then call the template recursively on the rest of the string after the line break-->
30              <xsl:call-template name="replaceLineBreaks">
31                <xsl:with-param name="string"
32                                select="substring-after($string, '&#x000A;')" />
33              </xsl:call-template>
34            </xsl:when>
35            <!-- if the string contains a line break... -->
36            <xsl:when test="contains($string, '&#x000A;')">
37              <!-- give the part before the line break in an addressline element... -->
38              <addressline><xsl:value-of select="substring-before($string, '&#x000A;')" />
39              </addressline>
40              <!-- and then call the template recursively on the rest of the string -->
41              <xsl:call-template name="replaceLineBreaks">
42                <xsl:with-param name="string"
43                                select="substring-after($string, '&#x000A;')" />
44              </xsl:call-template>
45            </xsl:when>
46            <!-- if the string doesn't contain a line break, and its not an empty field,
47                   just put its value into an addressline element. -->
48            <xsl:otherwise>
49              <xsl:if test="$string !=''">       
50                  <addressline><xsl:value-of select="$string" /></addressline>
51              </xsl:if>
52            </xsl:otherwise>
53          </xsl:choose>
54        </xsl:template>
55       
56        <!-- This is the main template which takes content from a DIF record and formats into NDG_B records. -->
57        <xsl:template match="DIF">
58                 <dgMetadata>
59                         <dgMetadataRecord>
60                                     <dgMetadataID>
61                                     <!-- split up Entry_ID into correct parts for NDG_B. Rather messy. -->
62                                         <repositoryIdentifier> 
63                                                <xsl:value-of  select="substring-before(substring-after(Entry_ID,'/'),'/')"/>
64                                         </repositoryIdentifier>
65                                         <localIdentifier>     
66                                                <xsl:value-of select="substring-before(substring-after(substring-after(Entry_ID,'/'),'/'),'/')"/>
67                                         </localIdentifier>                                             
68                                     </dgMetadataID>
69                                     <dgMetadataDescription>
70                                                <metadataDescriptionID>
71                                                         <repositoryIdentifier> 
72                                                         </repositoryIdentifier>
73                                                         <localIdentifier>     
74                                                         </localIdentifier>                                             
75                                                </metadataDescriptionID>
76                                                <metadataDescriptionLastUpdated>
77                                                        <xsl:choose>
78                                                                <xsl:when test="count(Last_DIF_Revision_Date)=0">1900-01-01T12:00:00</xsl:when>
79                                                                <xsl:otherwise>
80                                                                        <xsl:value-of  select="concat(Last_DIF_Revision_Date,'T12:00:00')"/>
81                                                                </xsl:otherwise>
82                                                        </xsl:choose>
83                                                </metadataDescriptionLastUpdated>
84                                                <abstract>
85                                                        <abstractText>
86                                                                <xsl:value-of select="Summary"></xsl:value-of>
87                                                        </abstractText> 
88                                               </abstract>
89                                </dgMetadataDescription>
90                             <name>
91                                        <xsl:value-of select="Entry_Title"/>
92                             </name>
93                             <abbreviation>     
94                             </abbreviation>
95                             <dgDataEntity>
96                                <dgDataSetType>
97                                        <dgMeasurement>
98                                        </dgMeasurement>       
99                                </dgDataSetType>
100                                <dgDataObjectType>
101                                        <dgBasicData>
102                                                <dgN-DimensionalDataset>
103                                                </dgN-DimensionalDataset>
104                                        </dgBasicData> 
105                                </dgDataObjectType>
106                                <dgDataGranule> 
107                                        <dataModelID>
108                                                <xsl:value-of select="Data_Center/Data_Set_ID"/>
109                                        </dataModelID>
110                                </dgDataGranule>
111                                <dgDataSummary> 
112                                        <xsl:for-each select="Parameters">
113                                                <dgParameterSummary>   
114                                                        <IsOutput>true</IsOutput>
115                                                        <dgRangeDataParameter> 
116                                                                <HighValue></HighValue>
117                                                                <LowValue></LowValue>           
118                                                                <dgStandardUnit>       
119                                                                        <dgValidTerm>   
120                                                                        </dgValidTerm>
121                                                                        <dgValidTermID>
122                                                                                <ParentListID>
123                                                                                </ParentListID>
124                                                                                <TermID><xsl:number  value="1"/></TermID>
125                                                                        </dgValidTermID>
126                                                                </dgStandardUnit>
127                                                        </dgRangeDataParameter>                                         
128                                                        <dgStdParameterMeasured>
129                                                                <dgValidTerm>   
130                                                                        <xsl:value-of select="Category"/>
131                                                                </dgValidTerm>
132                                                                <dgValidTermID>
133                                                                        <ParentListID>http://gcmd.gsfc.nasa.gov/Resources/valids/gcmd_parameters.html</ParentListID>
134                                                                        <TermID><xsl:number  value="1"/></TermID>
135                                                                </dgValidTermID>
136                                                                <dgValidSubterm>
137                                                                        <dgValidTerm>   
138                                                                                <xsl:value-of select="Topic"/>
139                                                                        </dgValidTerm>
140                                                                        <dgValidTermID>
141                                                                                <ParentListID>http://gcmd.gsfc.nasa.gov/Resources/valids/gcmd_parameters.html</ParentListID>
142                                                                                <TermID><xsl:number  value="1"/></TermID>
143                                                                        </dgValidTermID>
144                                                                                <dgValidSubterm>
145                                                                                        <dgValidTerm>   
146                                                                                                <xsl:value-of select="Term"/>
147                                                                                        </dgValidTerm>
148                                                                                        <dgValidTermID>
149                                                                                                <ParentListID>http://gcmd.gsfc.nasa.gov/Resources/valids/gcmd_parameters.html</ParentListID>
150                                                                                                <TermID><xsl:number  value="1"/></TermID>
151                                                                                        </dgValidTermID>
152                                                                                        <dgValidSubterm>
153                                                                                                <dgValidTerm>   
154                                                                                                        <xsl:value-of select="Variable"/>
155                                                                                                </dgValidTerm>
156                                                                                                <dgValidTermID>
157                                                                                                        <ParentListID>http://gcmd.gsfc.nasa.gov/Resources/valids/gcmd_parameters.html</ParentListID>
158                                                                                                        <TermID><xsl:number  value="1"/></TermID>
159                                                                                                </dgValidTermID>                                                                                                                               
160                                                                                                <ListLevel>4</ListLevel>
161                                                                                        </dgValidSubterm>                                                                               
162                                                                                        <ListLevel>3</ListLevel>
163                                                                                </dgValidSubterm>
164                                                                        <ListLevel>2</ListLevel>
165                                                                </dgValidSubterm>
166                                                                <ListLevel>1</ListLevel>
167                                                        </dgStdParameterMeasured>
168                                                        <ParameterName>
169                                                                <xsl:choose>
170                                                                        <xsl:when  test="count(Detailed_Variable)=0">
171                                                                                <xsl:value-of select="Variable"/>
172                                                                        </xsl:when>
173                                                                        <xsl:otherwise>
174                                                                                <xsl:value-of select="Detailed_Variable"/>
175                                                                        </xsl:otherwise>
176                                                                </xsl:choose>
177                                                        </ParameterName>
178                                                        <ParameterAbbreviation>
179                                                                <xsl:choose>
180                                                                        <xsl:when  test="count(Detailed_Variable)=0">
181                                                                                <xsl:value-of select="Variable"/>
182                                                                        </xsl:when>
183                                                                        <xsl:otherwise>
184                                                                                <xsl:value-of select="Detailed_Variable"/>
185                                                                        </xsl:otherwise>
186                                                                </xsl:choose>
187                                                        </ParameterAbbreviation>
188                                                        <ParameterLevel>0</ParameterLevel>
189                                                </dgParameterSummary>
190                                        </xsl:for-each> 
191                                        <!-- where there are no parameters in the DIF create one empty dgParameterSummary -->
192                                        <xsl:if test="count(Parameters)=0">
193                                                <dgParameterSummary>   
194                                                        <IsOutput>true</IsOutput>
195                                                        <dgRangeDataParameter> 
196                                                                <HighValue></HighValue>
197                                                                <LowValue></LowValue>   
198                                                                <dgStandardUnit>       
199                                                                        <dgValidTerm>   
200                                                                        </dgValidTerm>
201                                                                        <dgValidTermID>
202                                                                                <ParentListID>
203                                                                                </ParentListID>
204                                                                                <TermID><xsl:number  value="1"/></TermID>
205                                                                        </dgValidTermID>
206                                                                </dgStandardUnit>
207                                                        </dgRangeDataParameter> 
208                                                        <dgStdParameterMeasured>
209                                                                <dgValidTerm>   
210                                                                        <xsl:value-of select="Category"/>
211                                                                </dgValidTerm>
212                                                                <dgValidTermID>
213                                                                        <ParentListID>http://gcmd.gsfc.nasa.gov/Resources/valids/gcmd_parameters.html</ParentListID>
214                                                                        <TermID><xsl:number  value="1"/></TermID>
215                                                                </dgValidTermID>
216                                                        </dgStdParameterMeasured>
217                                                        <ParameterName></ParameterName>
218                                                        <ParameterAbbreviation></ParameterAbbreviation>
219                                                        <ParameterLevel>0</ParameterLevel>
220                                                </dgParameterSummary>                           
221                                        </xsl:if>
222                                        <xsl:if test="count(Temporal_Coverage) != 0 or count(Spatial_Coverage) !=0">
223                                                <dgDataCoverage>
224                                                <xsl:if test="count(Spatial_Coverage/Southernmost_Latitude) != 0">
225                                                        <dgSpatialCoverage>
226                                                                <BoundingBox>
227                                                                        <LimitNorth><xsl:value-of select="Spatial_Coverage/Northernmost_Latitude" ></xsl:value-of></LimitNorth>
228                                                                        <LimitSouth><xsl:value-of select="Spatial_Coverage/Southernmost_Latitude" ></xsl:value-of></LimitSouth>
229                                                                        <LimitWest><xsl:value-of select="Spatial_Coverage/Westernmost_Longitude" ></xsl:value-of></LimitWest>
230                                                                        <LimitEast><xsl:value-of select="Spatial_Coverage/Easternmost_Longitude" ></xsl:value-of></LimitEast>
231                                                                </BoundingBox>
232                                                        </dgSpatialCoverage>
233                                                </xsl:if>                                                                                               
234                                                <xsl:if test="count(Temporal_Coverage) != 0">
235                                                        <dgTemporalCoverage>
236                                                                <DateRange>
237                                                                        <DateRangeStart><xsl:value-of select="Temporal_Coverage/Start_Date" ></xsl:value-of></DateRangeStart>
238                                                                        <DateRangeEnd><xsl:value-of select="Temporal_Coverage/Stop_Date" ></xsl:value-of></DateRangeEnd>
239                                                                </DateRange>
240                                                        </dgTemporalCoverage>
241                                                </xsl:if>
242                                                </dgDataCoverage>
243                                        </xsl:if>
244                                </dgDataSummary>
245                                <dgDataRoles>
246                                        <dgDataCurator> 
247                                                <dgMetadataID> 
248                                                         <repositoryIdentifier> 
249                                                        </repositoryIdentifier>
250                                                        <localIdentifier>       
251                                                        </localIdentifier>     
252                                                </dgMetadataID>
253                                                <roleName>Data Curator</roleName>
254                                                <abbreviation>DC</abbreviation>
255                                                <contactDetails>
256                                                        <eMail><xsl:value-of select="Data_Center/Personnel/Email"></xsl:value-of></eMail>
257                                                        <fax><xsl:value-of select="Data_Center/Personnel/Fax"></xsl:value-of></fax>
258                                                        <telephone><xsl:value-of select="Data_Center/Personnel/Phone"></xsl:value-of></telephone>
259                                                        <address>
260                                                                <xsl:apply-templates select="Data_Center/Personnel/Address" mode="replaceLineBreaks" />
261                                                                <city></city>
262                                                                <postcode></postcode>
263                                                                <country></country>                                                             
264                                                        </address>
265                                                        <URI><xsl:value-of select="Data_Center/Data_Center_URL"></xsl:value-of></URI>
266                                                </contactDetails>
267                                        </dgDataCurator>
268                                </dgDataRoles>
269                             </dgDataEntity>
270                             <xsl:for-each select="Keyword">
271                                     <dgStructuredKeyword>     
272                                        <dgValidTerm><xsl:value-of select="."/>
273                                        </dgValidTerm>
274                                        <dgValidTermID>
275                                                <ParentListID>http://gcmd.gsfc.nasa.gov/Resources/valids/keyword_list.html</ParentListID>
276                                                <TermID><xsl:number  value="1"/></TermID>
277                                        </dgValidTermID>       
278                                     </dgStructuredKeyword>                 
279                                </xsl:for-each>
280                                <xsl:if test="count(Keyword) = 0">
281                                         <dgStructuredKeyword> 
282                                                <dgValidTerm></dgValidTerm>
283                                                <dgValidTermID>
284                                                        <ParentListID></ParentListID>
285                                                        <TermID>1</TermID>
286                                                </dgValidTermID>       
287                                         </dgStructuredKeyword>         
288                                </xsl:if>                     
289                         </dgMetadataRecord>
290                   </dgMetadata>
291        </xsl:template>   
292<!--    <xsl:apply-templates select="Entry_ID"/>
293        </xsl:template>
294        <xsl:template match="Entry_ID">
295       </xsl:template> -->
296</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.