source: ndgCommon/trunk/ndg/common/xmldb/xquery/atom2NERCiso.xq @ 7670

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/ndgCommon/trunk/ndg/common/xmldb/xquery/atom2NERCiso.xq@7670
Revision 7670, 30.7 KB checked in by sdonegan, 9 years ago (diff)

First draft of CEDA MOLES ATOM to NERC DMS ISO19115 profile - this is in accordance with DMS v0.7 and successfully produces metadata for ingestion into NERC DWS (revitalised).

Line 
1(: CEDA ATOM to NERC Discovery Metadata Standard conversion :)
2
3(: Converts to DMS v0.6 October 2010:)
4
5(:
6Steve Donegan, CEDA RALSpace, 20/10/2010
7
8Notes:
9    1. Note georss and gml namespaces changed to match those present in CEDA ATOMs in bora.badc.rl.ac.uk eXist database
10:)
11
12(:import module namespace datefuncs='http://ndg.nerc.ac.uk/xquery/lib/datefuncs' at 'iso19115_Functions.xquery';:)
13
14declare default element namespace 'http://www.isotc211.org/2005/gmd';
15
16declare namespace atom = 'http://www.w3.org/2005/Atom';
17declare namespace moles="http://ndg.nerc.ac.uk/schema/moles2beta";
18declare namespace f='http://ndg.nerc.ac.uk/moles/localfunctions';
19declare namespace georss = "http://www.georss.org/georss/10";
20declare namespace fn = "http://www.w3.org/2005/02/xpath-functions";
21declare namespace xhtml="http://www.w3.org/1999/xhtml";
22
23 
24
25(: other NS we need to produce the NERC  ISO :)
26declare namespace gmd='http://www.isotc211.org/2005/gmd';
27declare namespace xsi='http://www.w3.org/2001/XMLSchema-instance';
28declare namespace gco='http://www.isotc211.org/2005/gco';
29declare namespace gmx='http://www.isotc211.org/2005/gmx';
30declare namespace gml='http://www.opengis.net/gml';
31declare namespace xlink='http://www.w3.org/1999/xlink';
32
33(: Keep this in official lib version
34declare variable $targetCollection as xs:string := '/db/atoms/Published';
35declare variable $deploymentsDir as xs:string := '/deployments';
36declare variable $dataEntitiesDir as xs:string := '/data_entities';
37declare variable $repositoryIdentifier as xs:string := 'badc.nerc.ac.uk';
38declare variable $localIdentifier as xs:string := 'badc.nerc.ac.uk__ATOM__dataent_active';
39declare variable $dptTerm as xs:string := 'DPTTerm';
40declare variable $obsTerm as xs:string :=  'OBSTerm';
41declare variable $activityTerm as xs:string :=  'ACTIVITYTerm';
42declare variable $uriTerm as xs:string :=  'URITerm';
43declare variable $granuleTerm as xs:string :=  'GranuleTerm';
44:)
45
46
47(: Define the name of the metadata standard to be used in converted document :)
48declare variable $MetadataStandardName as xs:string := 'NERC Discovery Metadata Standard';
49declare variable $MetadataStandardCEDAPrefix as xs:string := 'NERC_DMS_0.7';
50declare variable $MetadataStandardVersion as xs:string := '0.7';
51
52declare variable $targetCollection as xs:string := '/db/atoms/published/';
53declare variable $repositoryIdentifier as xs:string := 'neodc.nerc.ac.uk';
54declare variable $localIdentifier as xs:string := 'tag:badc.nerc.ac.uk,2009-12-10:/view/neodc.nerc.ac.uk__ATOM__dataent_12447304699327717';
55
56declare variable $dptTerm as xs:string := 'DPT - NOT YET SET UP/None/DPT';
57declare variable $obsTerm as xs:string :=  'OBS - NOT YET SET UP/None/OBS';
58declare variable $activityTerm as xs:string :=  'Activity - NOT YET SET UP/None/ACTIVITY';
59declare variable $granuleTerm as xs:string :=  'GRAN - NOT YET SET UP/None/GRANULE';
60declare variable $deploymentTerm as xs:string := 'NOT YET SET UP/None/Deployment';
61declare variable $uriTerm as xs:string :=  'URI';
62
63(: These two are unlikely to change :)
64declare variable $dataEntitiesDir as xs:string := 'data_entities';
65declare variable $deploymentsDir as xs:string := 'deployments';
66declare variable $deploymentDataDir as xs:string := 'deployment_data';
67
68(:declare variable $atomCollection as xs:string := concat('TargetCollection', $dataEntitiesDir, '/', 'RepositoryID'); :)
69declare variable $atomCollection as xs:string := concat($targetCollection, $dataEntitiesDir, '/', $repositoryIdentifier    );
70
71declare variable $currentDate as xs:string := substring(current-date() cast as xs:string,1,10);
72
73
74(: Development Functions :)
75
76(: ISO dates etc :)
77declare function local:dateType ($date as xs:string, $dateType)
78{
79    element gmd:date {
80        element gmd:CI_Date {
81            element gmd:date {
82                element gco:Date { data($date)}                               
83            },
84            (: TODO: get ATOM/MOLES values to take these from published codelist/vocab :)
85            element gmd:dateType {
86                element gmd:CI_DateTypeCode {
87                    attribute codeList {"http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/Codelist/gmxCodelists.xml#CI_DateTypeCode"},
88                    attribute codeListValue {data($dateType)},
89                    data($dateType)
90                    }
91                }
92            }
93        }
94};
95
96(: contactInfo - this gets replicated a lot! :)
97declare function local:contactInfo ($phone as xs:string, $deliveryPoint as xs:string, $city as xs:string, $postalCode as xs:string, $electronicalMailAddress as xs:string)
98{
99    element gmd:contactInfo
100    {
101        element gmd:CI_Contact
102        {
103            element gmd:phone {
104                element gmd:CI_Telephone {
105                    element gmd:voice {
106                        element gco:CharacterString {data ($phone)}
107                    }
108                }
109            },       
110            element gmd:address
111            {
112                element gmd:CI_Address
113                {
114                    element gmd:deliveryPoint
115                    {
116                        element gco:CharacterString { data($deliveryPoint)}
117                    },
118                    element gmd:city
119                    {
120                        element gco:CharacterString { data($city)}
121                    },
122                    element gmd:postalCode
123                    {
124                        element gco:CharacterString { data($postalCode)}
125                    },
126                    element gmd:electronicMailAddress {
127                        element gco:CharacterString { data($electronicalMailAddress)}
128                    }
129                }
130            }
131        }
132    }
133};
134
135(:pointOfContact - also gets called a lot :)
136declare function local:pointOfContact ($organisationName as xs:string, $individualName as xs:string, $positionName as xs:string, $role as xs:string, $phone as xs:string, $deliveryPoint as xs:string, $city as xs:string, $postalCode as xs:string, $electronicalMailAddress as xs:string)
137{
138   
139        element gmd:CI_ResponsibleParty
140        {
141           
142            (: work out whether individual or organisation name :)
143            if (string-length($individualName) > 0) then
144                element gmd:individualName
145                {
146                    element gco:CharacterString { data($individualName)}
147                }
148            else
149                element gmd:organisationName
150                {
151                    element gco:CharacterString { data($organisationName)}
152                },
153           
154            (:work out whether positionName is required:)
155            if (string-length($positionName) > 0) then
156                element gmd:positionName
157                {
158                    element gco:CharacterString {data($positionName)}
159                }
160             else (),
161                           
162            (: include contactInfo :)
163            local:contactInfo($phone, $deliveryPoint, $city, $postalCode, $electronicalMailAddress),
164           
165            element gmd:role
166            {
167                element gmd:CI_RoleCode {
168                    attribute codeList {"http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/Codelist/gmxCodelists.xml#CI_RoleCode"},
169                    attribute codeListValue {data($role)},
170                    data($role)
171                }
172            }
173        }           
174};
175
176declare function local:CI_Citation($title as xs:string, $dateVal as xs:string, $identifier as xs:string, $codeSpace as xs:string)
177(:
178
179NOTE: As CI_Citation can have multiple date elements.  This is dealt with here by supplying the variable dateVal with pairs of "date=dateTypeCode" separated by comma's. 
180
181I.e. 2002-10-02T11:23:23=revision,2002-10-02T11:23:23=publication
182:)
183{
184    element gmd:CI_Citation {
185        element gmd:title {
186            element gco:CharacterString{ data($title)}
187        },
188       
189        (: Loop through different date=dateTypeCode pairs :)
190        for $val in tokenize($dateVal,",")
191        return
192            local:dateType(data(substring-before($val,"=")),data(data(substring-after($val,"=")))),
193       
194     
195      (: if identifier is supplied then include here :)
196      if (string-length($identifier) > 0) then
197         
198        (: Identifier - Element 6 :)
199        element gmd:identifier {
200            element gmd:RS_Identifier {
201                element gmd:code {
202                    element gco:CharacterString {data($identifier)}
203                },
204                element gmd:codeSpace {
205                    (: TODO: ensure that CEDA provider ID is entered as a namespace here - looks good so far :)
206                    element gco:CharacterString {data($codeSpace)}
207                }
208            }
209        }
210        else ()
211    }
212};
213
214(: --------------------------------------------------------------------------------------------------  Let the Xquery proper Begin ... ---------------------------------------------------------------------------------------------------- :)
215
216for $DE in collection($atomCollection)/atom:entry[matches(atom:id, $localIdentifier)]
217
218(:sort out complex variables here as easier to do here than embedded in the xQuery! :)
219
220(: set unique identifier as a variable :)   
221let $identifier := concat(string($DE/moles:entity/moles:molesISO/moles:providerID),':',$MetadataStandardCEDAPrefix,':', tokenize(string($DE/atom:id), '__ATOM__')[2])
222
223(:define string variable for publication and creation dates comprised of comma delimited list from ATOM elements:)
224let $publicationCreationDates := concat(data($DE/atom:published),"=",string('publication'),",",data($DE/moles:entity/moles:molesISO/moles:created),"=",string("creation"))
225
226return
227
228element gmd:MD_Metadata {
229
230    element gmd:fileIdentifier {
231        element gco:CharacterString {
232            (: for CEDA purposes use main unique resource identifier here - element 6
233            concat(string($DE/moles:entity/moles:molesISO/moles:providerID),':NERC_v0.6:', tokenize(string($DE/atom:id), '__ATOM__')[2]):)
234            data($identifier)
235        }       
236     },
237     
238     (:Metadata_Language element 29:)
239     element gmd:language {
240     
241         (: TODO: CEDA supports some iso elements in atom, but needs provision for codelist values.  In this case "eng" :)
242         element gmd:LanguageCode {
243             attribute codeList {'http://www.loc.gov/standards/iso639-2/php/code_list.php'},
244             attribute codeListValue {'eng'},
245             data($DE/moles:entity/moles:molesISO/moles:metadataLanguage)         
246         }
247     },
248     
249     (: Resource Type element 4 :)
250     element gmd:hierarchyLevel {
251         element gmd:MD_ScopeCode {         
252             attribute codeList {'http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/Codelist/gmxCodelists.xml#MD_ScopeCode'},
253             attribute codeListValue {'series'},
254             string('series')
255         
256         }
257     },
258
259    (: Element 22 Responsible Party - Metadata point of contact.  For CEDA purposes this will be the relevent helpdesk contact :)
260   
261     (: TODO: get this info from ATOM :)
262   
263    element gmd:contact
264    {
265        local:pointOfContact (string("CEDA"), string(""), string("CEDA Data Scientist"), string("pointOfContact"), string("01235 778123"), string("RALSpace, HSIC, Rutherford Appleton Laboratory"), string("Didcot"), string("OX11 0QX"), string("ceda@stfc.ac.uk"))       
266    },
267   
268    (: Date of update of metadata - Element 26 :)
269    (: For CEDA this translates to the timestamp of the last update in the MOLES db, rather than the datestamp of the application of this conversion... :)
270    element gmd:dateStamp {
271        element gco:Date {
272            data($DE/moles:entity/moles:molesISO/moles:created)
273        }
274    },
275   
276    (: Metadata Standard Name - Element  27 :)
277    (: For CEDA, this means the version of the NERC Discovery Metadata Standard this conversion is mapped to :)
278    element gmd:metadataStandardName {
279        element gco:CharacterString { data($MetadataStandardName)}
280    },
281   
282    (: Metadata Standard Version - Element 28 :)
283    element gmd:metadataStandardVersion {
284        element gco:CharacterString { data($MetadataStandardVersion)}
285    },
286   
287    (: Spatial Reference System - Element 15 :)
288    (: TODO: does CEDA need to include this in MOLES database? :)
289    element gmd:referenceSystemInfo {
290        element gmd:MD_ReferenceSystem {
291            element gmd:referenceSystemIdentifier {
292                element gmd:RS_Identifier {
293                    element gmd:code {
294                        (: TODO: find correct code! :)
295                        element gco:CharacterString { string("urn:ogc:def:crs:EPSG::27700")}
296                    }
297                }
298            }
299        }
300    },
301   
302    (: identificationInfo :)
303    element gmd:identificationInfo {
304        element gmd:MD_DataIdentification {
305            element gmd:citation {
306           
307                (: NOTE following elements handled by CI_Citation function :)
308           
309                (: Resource Title - Element 1 :)
310                (: Temporal Reference Date - Element 16 :)
311                (: TODO: check CEDA ATOM publication date has the same definition :)
312                (:Publication - Element 16.2 :)
313                (:Creation - Element 16.4 :)
314                (: Identifier - Element 6 :)
315                local:CI_Citation(data($DE/atom:title),$publicationCreationDates,$identifier,$DE/moles:entity/moles:molesISO/moles:providerID)
316               
317            },
318           
319            (: Abstract - Element 3 :)
320            element gmd:abstract {
321                element gco:CharacterString {data($DE/atom:summary)}                   
322            },
323           
324            (: Responsible party - Element 22 :)
325           
326            (: TODO: CEDA will need to better delineate this info as may need "originator" in addition to "dataPointOfContact" & metadataPointOfContact :)
327           
328            (:TODO: for CEDA purposes is organisationName sufficient?  Depends on type of pointOfContact as well as whats available :)
329           
330            (:local:pointOfContact ($organisationName, $individualName, $positionName, $role, $phone, $deliveryPoint, $city, $postalCode, $electronicalMailAddress):)
331           
332            (:
333            element gmd:pointOfContact
334            {
335                local:pointOfContact (string("CEDA"), string(""), string("CEDA Data Scientist"), string("pointOfContact"), string("01235 778123"), string("RALSpace, HSIC, Rutherford Appleton Laboratory"), string("Didcot"), string("OX11 0QX"), string("ceda@stfc.ac.uk"))
336            },               
337            :)
338            (:dataPointOfContact:)
339           
340            (:metadataDataPointOfContact:)
341           
342            (:distributor - NOTE - goes in distributionInfo bit :)
343           
344            (:originator:)
345            element gmd:pointOfContact
346            {
347                local:pointOfContact (string("CEDA"), string(""), string("CEDA Data Scientist"), string("originator"), string("01235 778123"), string("RALSpace, HSIC, Rutherford Appleton Laboratory"), string("Didcot"), string("OX11 0QX"), string("ceda@stfc.ac.uk"))
348            },
349           
350            (:resourceMaintenance - Element # :)
351           
352            (:TODO: CEDA needs to record this resourceMaintenance info plus other INSPIRE related stuff HARDCODE for now! :)
353            element gmd:resourceMaintenance {
354                element gmd:MD_MaintenanceInformation {
355                    element gmd:maintenanceAndUpdateFrequency {
356                        element gmd:MD_MaintenanceFrequencyCode {
357                            attribute codeList {'http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/Codelist/gmxCodelists.xml#MD_MaintenanceFrequencyCode'},
358                            attribute codeListValue {'annually'},
359                            string('annually')                         
360                        }                   
361                    }
362                }
363            },
364           
365            (: Data Format :- Element #:)
366            (:TODO: need to get CEDA to evaluate this properly - codelist/vocab?  :)
367            element gmd:resourceFormat {
368                element gmd:MD_Format {
369                    element gmd:name {
370                        element gco:CharacterString { string("Dataset") }
371                    }
372                }
373            },
374           
375            (: Keywords - Element 11 :)
376           
377            (: Ensure NERC_DDC is in there :)
378           
379            (: TODO: CEDA/NERC - is this keyword in a vocab or codelist?/ :)
380            element gmd:descriptiveKeywords {
381                element gmd:MD_Keywords {
382                    element gmd:keyword {
383                        element gco:CharacterString { string("NERC_DDC") }
384                    }
385                }
386            },
387           
388            (: Vertical Extent - Element 14:)
389           
390            (: TODO - CEDA have to implement vertical extent keywords - must take from L131 list on NDG vocab server.  Optional element so can leave for now :)
391           
392            (: INSPIRE keywords :)
393           
394            (: TODO: CEDA - need to have info on INSPIRE themes available in the CEDA MOLES db - hardwire for now :)
395           
396            element gmd:descriptiveKeywords {
397                element gmd:MD_Keywords {
398                    element gmd:keyword {
399                        element gco:CharacterString { string("Elevation") }
400                    },
401                    element gmd:thesaurusName {                   
402                        local:CI_Citation(string('GEMET - INSPIRE themes, version 1.0'),concat($currentDate,"=",string('publication')),string(""),string(""))
403                    }
404                }
405            },
406           
407            (: TODO: CEDA - need to properly quantify keywords/parameters to actual vocabs.  For now map category attribute "label" to  keyword value in gmx:anchor and the scheme to xlink:href attritubte and term to title. 
408            follow medin example for nerc harvesting keyword.  This seriously needs tidying up :)
409            for $keyword in $DE/atom:category
410            return
411            element gmd:descriptiveKeywords {
412                element gmd:MD_Keywords {
413                    element gmd:keyword{
414                        element gmx:Anchor {
415                            attribute xlink:href {data($keyword/@scheme)},
416                            attribute xlink:title {data($keyword/@term)},
417                            data($keyword/@label)
418                        }                           
419                    }
420                }
421            },
422           
423            (: Conditions applying to access and use - Element 21 :)
424            (: TODO: CEDA doesnt record this in ATOM & its Mandatory.  Hardcode for now :)
425            element gmd:resourceConstraints {
426                element gmd:MD_Constraints {
427                    element gmd:useLimitation {
428                        (:TODO: CEDA - this is free text :)
429                        element gco:CharacterString { string("Information not yet available in this format.  Please contact ceda@stfc.ac.uk")}
430                    }
431                }
432            },
433           
434            (: Limitations on Public Access - Element 20 :)           
435            (: TODO: CEDA doesnt record this in ATOM - & its Mandatory.  Hardcode for now :)
436            element gmd:resourceConstraints {
437                element gmd:MD_LegalConstraints {
438                    element gmd:accessConstraints {
439                        element gmd:MD_RestrictionCode {
440                           
441                             (:TODO: CEDA will need link to this codelist for this element :)
442                            attribute codeList {'http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/Codelist/gmxCodelists.xml#MD_RestrictionCode'},
443                            attribute codeListValue {'TBA'},
444                            string("TO BE FINALISED (contact ceda@stfc.ac.uk)")
445                       
446                        }
447                    }
448                }
449            },
450           
451            (: Spatial Resolution - Element 18 :)
452           
453            (: TODO: CEDA doesnt record this in ATOM yet & its Mandatory: Hardcode for now to value of "0"... :)
454            element gmd:spatialResolution {
455                element gmd:MD_Resolution {
456                    element gmd:distance {
457                        element gco:Distance {
458                            string("0")
459                        }
460                    }
461                }           
462            },
463           
464            (: Resource Langauge - Element 8 :)
465            (:TODO: CEDA will need to include this element if any textual resource for the dataset - hardcode to english for now :)
466            element gmd:language {
467                element gmd:LanguageCode {
468                    attribute codeList {'http://www.loc.gov/standards/iso639-2/php/code_list.php'},
469                    attribute codeListValue {'eng'},
470                    string("English")
471                }
472            },
473           
474            (: Topic Category - Element 9:)
475            (:TODO: CEDA will also need to include this information as mandatory for datasets.  For now, hardcoded to "Geoscientific Information" :)
476            element gmd:topicCategory {
477                element gmd:MD_TopicCategoryCode {string("GeoscientificInformation")}
478            },
479           
480           
481           
482            (: TODO: Many CEDA datasets don't have boundingBox info - MAndatory for compliancy.. :)
483             element gmd:extent {
484                element gmd:EX_Extent {
485               
486                     (:Extent - Bounding Box - Element 12 (note difference from an actual extent - i.e. ICES sea areas:)
487               
488                    if (exists($DE/georss:where)) then
489                        for $boundingBox in $DE/georss:where
490                        return
491                            element gmd:geographicElement {
492                                element gmd:EX_GeographicBoundingBox {                                                   
493                                    element gmd:westBoundLongitude {
494                                        element gco:Decimal {
495                                            data(tokenize(string($boundingBox/gml:Envelope/gml:lowerCorner), ' ')[1])
496                                        }
497                                    },
498                                    element gmd:eastBoundLongitude {
499                                        element gco:Decimal {
500                                            data(tokenize(string($boundingBox/gml:Envelope/gml:upperCorner), ' ')[1])
501                                        }
502                                    },
503                                    element gmd:southBoundLatitude {
504                                        element gco:Decimal {
505                                            data(tokenize(string($boundingBox/gml:Envelope/gml:lowerCorner), ' ')[2])
506                                        }
507                                    },
508                                    element gmd:northBoundLatitude {
509                                        element gco:Decimal {
510                                            data(tokenize(string($boundingBox/gml:Envelope/gml:upperCorner), ' ')[2])
511                                        }
512                                    }
513                                }
514                            }
515                        else (),
516                       
517                        (: Temporal Reference - Element 16.1 :)
518                        (: TODO: CEDA - mandatory element yet not all dataEntities have this recorded...
519                            AND - ATOM doesnt distinguish a single date as either start or end!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  blimey.
520                        :)
521                       
522                        element gmd:temporalElement {
523                            element gmd:EX_TemporalExtent {
524                                if (exists($DE/moles:temporalRange)) then
525                                    for $dates in $DE/moles:temporalRange
526                                    return
527                                        element gmd:extent {
528                                            element gml:TimePeriod {
529                                                element gml:beginPosition {
530                                                    data (tokenize(string($DE/moles:temporalRange), '/')[1])
531                                                },
532                                                element gml:endPosition {
533                                                    data (tokenize(string($DE/moles:temporalRange), '/')[2])
534                                                }
535                                            }
536                                        }
537                                else ()
538                            }                       
539                        }
540                    }                       
541             } (: /extent:)
542          }   
543    },  (: /identificationInfo :)
544   
545    (: distributionInfo :)
546    element gmd:distributionInfo {
547        element gmd:MD_Distribution {
548   
549            (: The ISO 19115 Constraints require this element! :)
550            element gmd:distributionFormat {
551                attribute gco:nilReason {"inapplicable"}       
552            },
553       
554            (: Responsible Party - Element 22 - Mandatory for datasets! NOTE role=distributor so ok to hardwire as CEDA :)
555            element gmd:distributor {
556                element gmd:MD_Distributor{
557                    element gmd:distributorContact {
558                        local:pointOfContact (string("CEDA"), string(""), string("CEDA Data Scientist"), string("distributor"), string("01235 778123"), string("RALSpace, HSIC, Rutherford Appleton Laboratory"), string("Didcot"), string("OX11 0QX"), string("ceda@stfc.ac.uk"))
559                    }
560                }           
561            },
562           
563            (: Resource Locator - Element 5.  NOTE for NERC onlineResource must be provided for datasets:)
564           
565            (: TODO: For CEDA purposes - ensure link to dataset browser is explicitly included in info is in ATOM - indicated by attribute val "Data Directory" :)
566           
567            (:TODO: CEDA - must specifiy correct choice of onlineresource from vocab/codelist - hardwired for "download" right now. :)
568           
569            for $link in $DE/atom:link
570            return           
571                element gmd:transferOptions {
572                    element gmd:MD_DigitalTransferOptions {
573                        element gmd:onLine {
574                            element gmd:CI_OnlineResource {
575                                element gmd:linkage {
576                                    element gmd:URL {
577                                        data($link/@href)
578                                    }
579                                },
580                                element gmd:description {
581                                    element gco:CharacterString {data($link/@title)}
582                                },
583                                element gmd:function {
584                                   
585                                    (: For NERC DMS, download must only be used where online data is actually available.  So, until CEDA can link to the correct codelist and get these vals into the ATOM we must do this.. :)
586                                    if (data($link/@title) = "Data Directory") then
587                                        element gmd:CI_onLineFunctionCode  {                                   
588                                            attribute codeList {'http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/Codelist/gmxCodelists.xml#CI_onLineFunctionCode'},
589                                            attribute codeListValue {'download'},
590                                            string("download")
591                                        }
592                                    else
593                                        element gmd:CI_onLineFunctionCode  {                                   
594                                            attribute codeList {'http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/Codelist/gmxCodelists.xml#CI_onLineFunctionCode'},
595                                            attribute codeListValue {'information'},
596                                            string("information")
597                                        }
598                                   
599                                }
600                            }
601                        }
602                    }               
603            }
604        }, (: /distributionInfo :)
605       
606        (: Lineage and INSPIRE conformity elements - Element 25 :)
607        element gmd:dataQualityInfo {
608            element gmd:DQ_DataQuality {
609               
610                (: Scope -required by ISO19115 :)
611                element gmd:scope {
612                    element gmd:level {
613                        element gmd:MD_ScopeCode {
614                       
615                            (: TODO: as part of CEDA creep towards INSPIRE conformity, this codelist should be listed:)
616                            attribute codeList {'http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/Codelist/gmxCodelists.xml#MD_ScopeCode'},
617                            attribute codeListValue {'dataset'},
618                            string("dataset")
619                        }
620                    }
621                },
622               
623                (: Lineage - Element 17 :)
624               
625                (: TODO: CEDA : doesnt currently record this information, so hardwire for now - BUT can use ATOM content with CEDA basic strapline  :)               
626                element gmd:lineage {
627                    element gmd:LI_Lineage {
628                        element gmd:statement {
629                            element gco:CharacterString {
630                                data(concat(string("This Dataset has been acquired by CEDA and is hosted by agreement from the data originator.")," ",$DE/atom:content/xhtml:div))
631                            }
632                        }
633                    }
634                }
635               
636               
637            }       
638        } (: /dataQualityInfo :)
639    }
640    }
641   
642
Note: See TracBrowser for help on using the repository browser.