source: Document_handling/trunk/XSLT/siva_oneoff_ndg_to_dif_2.xsl @ 228

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

Amended for V1.02 of NDB MetadataModel? schema and some extra fields.
New one-off xsls plus scripts to run them.

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