Changeset 7728 for ndgCommon


Ignore:
Timestamp:
12/11/10 17:15:25 (9 years ago)
Author:
sdonegan
Message:

Includes updates to take relevant CEDA data center info from dif org snippets in exist..

File:
1 edited

Legend:

Unmodified
Added
Removed
  • ndgCommon/trunk/ndg/common/xmldb/xquery/atom2NERCiso.xq

    r7672 r7728  
    1 (: CEDA ATOM to NERC Discovery Metadata Standard conversion :) 
     1(: CEDA ATOM to NERC Discovery Metadata Standard conversion :) 
    22 
    33(: Converts to DMS v0.6 October 2010:) 
     
    99    1. Note georss and gml namespaces changed to match those present in CEDA ATOMs in bora.badc.rl.ac.uk eXist database 
    1010:) 
    11  
    12 (:import module namespace datefuncs='http://ndg.nerc.ac.uk/xquery/lib/datefuncs' at 'iso19115_Functions.xquery';:) 
     11(: eXist library :) 
     12import module namespace isolib='http://ndg.nerc.ac.uk/xquery/lib/iso_utilities' at 'xmldb:exist:///db/xquery/lib/Utilities/isoUtilities_xquery_lib.xquery'; 
    1313 
    1414declare default element namespace 'http://www.isotc211.org/2005/gmd'; 
     
    2121declare namespace xhtml="http://www.w3.org/1999/xhtml"; 
    2222 
    23   
     23(: need the dif namespace as we are picking up organisationInfo from dif based record currently in Bora db :) 
     24declare namespace dif = 'http://gcmd.gsfc.nasa.gov/Aboutus/xml/dif/'; 
    2425 
    2526(: other NS we need to produce the NERC  ISO :) 
     
    5051declare variable $MetadataStandardVersion as xs:string := '0.7'; 
    5152 
    52 (: 
     53(: CEDA eXist directory containing the data center organisation DIF snippets :) 
     54declare variable $organisationInfoDir as xs:string := '/db/atoms/resources';  
     55 
     56(: Development use only  
    5357declare variable $targetCollection as xs:string := '/db/atoms/published/'; 
    5458declare variable $repositoryIdentifier as xs:string := 'neodc.nerc.ac.uk'; 
    55 declare variable $localIdentifier as xs:string := 'tag:badc.nerc.ac.uk,2009-12-10:/view/neodc.nerc.ac.uk__ATOM__dataent_12447304699327717'; 
    56 :) 
    57  
     59declare variable $localIdentifier as xs:string := 'tag:badc.nerc.ac.uk,2009-12-10:/view/neodc.nerc.ac.uk__ATOM__dataent_12447304699327717'; :) 
     60 
     61(:Production use only:) 
    5862declare variable $targetCollection as xs:string := 'TargetCollection'; 
    5963declare variable $repositoryIdentifier as xs:string := 'RepositoryID'; 
    6064declare variable $localIdentifier as xs:string := 'RepositoryID__ATOM__LocalID$'; 
    61  
    6265 
    6366declare variable $dptTerm as xs:string := 'DPT - NOT YET SET UP/None/DPT'; 
     
    7881declare variable $currentDate as xs:string := substring(current-date() cast as xs:string,1,10); 
    7982 
    80  
    81 (: Development Functions :) 
    82  
    83 (: ISO dates etc :) 
    84 declare function local:dateType ($date as xs:string, $dateType) 
    85 { 
    86     element gmd:date { 
    87         element gmd:CI_Date { 
    88             element gmd:date { 
    89                 element gco:Date { data($date)}                                
    90             }, 
    91             (: TODO: get ATOM/MOLES values to take these from published codelist/vocab :) 
    92             element gmd:dateType { 
    93                 element gmd:CI_DateTypeCode { 
    94                     attribute codeList {"http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/Codelist/gmxCodelists.xml#CI_DateTypeCode"}, 
    95                     attribute codeListValue {data($dateType)}, 
    96                     data($dateType) 
    97                     } 
    98                 } 
    99             } 
    100         } 
    101 }; 
    102  
    103 (: contactInfo - this gets replicated a lot! :) 
    104 declare function local:contactInfo ($phone as xs:string, $deliveryPoint as xs:string, $city as xs:string, $postalCode as xs:string, $electronicalMailAddress as xs:string) 
    105 { 
    106     element gmd:contactInfo  
    107     { 
    108         element gmd:CI_Contact  
    109         { 
    110             element gmd:phone { 
    111                 element gmd:CI_Telephone { 
    112                     element gmd:voice { 
    113                         element gco:CharacterString {data ($phone)} 
    114                     } 
    115                 } 
    116             },         
    117             element gmd:address  
    118             { 
    119                 element gmd:CI_Address  
    120                 { 
    121                     element gmd:deliveryPoint  
    122                     { 
    123                         element gco:CharacterString { data($deliveryPoint)} 
    124                     }, 
    125                     element gmd:city  
    126                     { 
    127                         element gco:CharacterString { data($city)} 
    128                     }, 
    129                     element gmd:postalCode  
    130                     { 
    131                         element gco:CharacterString { data($postalCode)} 
    132                     }, 
    133                     element gmd:electronicMailAddress { 
    134                         element gco:CharacterString { data($electronicalMailAddress)} 
    135                     } 
    136                 } 
    137             } 
    138         } 
    139     } 
    140 }; 
    141  
    142 (:pointOfContact - also gets called a lot :) 
    143 declare 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) 
    144 { 
    145     
    146         element gmd:CI_ResponsibleParty  
    147         { 
    148              
    149             (: work out whether individual or organisation name :) 
    150             if (string-length($individualName) > 0) then 
    151                 element gmd:individualName  
    152                 { 
    153                     element gco:CharacterString { data($individualName)} 
    154                 } 
    155             else 
    156                 element gmd:organisationName 
    157                 { 
    158                     element gco:CharacterString { data($organisationName)} 
    159                 }, 
    160              
    161             (:work out whether positionName is required:) 
    162             if (string-length($positionName) > 0) then 
    163                 element gmd:positionName  
    164                 { 
    165                     element gco:CharacterString {data($positionName)} 
    166                 } 
    167              else (), 
    168                              
    169             (: include contactInfo :) 
    170             local:contactInfo($phone, $deliveryPoint, $city, $postalCode, $electronicalMailAddress), 
    171              
    172             element gmd:role 
    173             { 
    174                 element gmd:CI_RoleCode { 
    175                     attribute codeList {"http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/Codelist/gmxCodelists.xml#CI_RoleCode"}, 
    176                     attribute codeListValue {data($role)}, 
    177                     data($role) 
    178                 } 
    179             } 
    180         }            
    181 }; 
    182  
    183 declare function local:CI_Citation($title as xs:string, $dateVal as xs:string, $identifier as xs:string, $codeSpace as xs:string) 
    184 (: 
    185  
    186 NOTE: 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.   
    187  
    188 I.e. 2002-10-02T11:23:23=revision,2002-10-02T11:23:23=publication 
    189 :) 
    190 { 
    191     element gmd:CI_Citation { 
    192         element gmd:title { 
    193             element gco:CharacterString{ data($title)} 
    194         }, 
    195          
    196         (: Loop through different date=dateTypeCode pairs :) 
    197         for $val in tokenize($dateVal,",") 
    198         return 
    199             local:dateType(data(substring-before($val,"=")),data(data(substring-after($val,"=")))), 
    200          
    201        
    202       (: if identifier is supplied then include here :) 
    203       if (string-length($identifier) > 0) then 
    204            
    205         (: Identifier - Element 6 :) 
    206         element gmd:identifier { 
    207             element gmd:RS_Identifier { 
    208                 element gmd:code { 
    209                     element gco:CharacterString {data($identifier)} 
    210                 }, 
    211                 element gmd:codeSpace { 
    212                     (: TODO: ensure that CEDA provider ID is entered as a namespace here - looks good so far :) 
    213                     element gco:CharacterString {data($codeSpace)} 
    214                 } 
    215             } 
    216         } 
    217         else () 
    218     } 
    219 }; 
    220  
    221 (: --------------------------------------------------------------------------------------------------  Let the Xquery proper Begin ... ---------------------------------------------------------------------------------------------------- :) 
    222  
    22383for $DE in collection($atomCollection)/atom:entry[matches(atom:id, $localIdentifier)] 
    22484 
     
    22888let $identifier := concat(string($DE/moles:entity/moles:molesISO/moles:providerID),':',$MetadataStandardCEDAPrefix,':', tokenize(string($DE/atom:id), '__ATOM__')[2]) 
    22989 
     90(: extract the CEDA Data Center ID :) 
     91let $cedaIdentifier := $DE/moles:entity/moles:molesISO/moles:providerID 
     92 
    23093(:define string variable for publication and creation dates comprised of comma delimited list from ATOM elements:) 
    23194let $publicationCreationDates := concat(data($DE/atom:published),"=",string('publication'),",",data($DE/moles:entity/moles:molesISO/moles:created),"=",string("creation")) 
     
    23497 
    23598element gmd:MD_Metadata { 
    236  
     99     
    237100    element gmd:fileIdentifier { 
    238101        element gco:CharacterString { 
     
    270133    element gmd:contact 
    271134    { 
    272         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"))        
     135        (:isolib:CI_ResponsibleParty(string("CEDA"), element individualName {string("")}, element positionName{string("CEDA Data Scientist")}, element role {string("pointOfContact")}, element phone {string("01235 778123")}, element addressLine {string("RALSpace, HSIC, Rutherford Appleton Laboratory")}, element city {string("Didcot")}, element postCode {string("OX11 0QX")}, element email{string("ceda@stfc.ac.uk")}):) 
     136        isolib:cedaDataCenter(string("pointOfContact"), $organisationInfoDir, $cedaIdentifier)  
    273137    }, 
    274138     
     
    320184                (:Creation - Element 16.4 :) 
    321185                (: Identifier - Element 6 :) 
    322                 local:CI_Citation(data($DE/atom:title),$publicationCreationDates,$identifier,$DE/moles:entity/moles:molesISO/moles:providerID) 
     186                isolib:CI_Citation(data($DE/atom:title),$publicationCreationDates,$identifier,$DE/moles:entity/moles:molesISO/moles:providerID) 
    323187                 
    324188            }, 
     
    351215            (:originator:) 
    352216            element gmd:pointOfContact 
    353             { 
    354                 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")) 
     217            {                 
     218                (:isolib:CI_ResponsibleParty(string("CEDA"), element individualName {string("")}, element positionName{string("CEDA Data Scientist")}, element role {string("originator")}, element phone {string("01235 778123")}, element addressLine {string("RALSpace, HSIC, Rutherford Appleton Laboratory")}, element city {string("Didcot")}, element postCode {string("OX11 0QX")}, element email{string("ceda@stfc.ac.uk")}):) 
     219                isolib:cedaDataCenter(string("originator"), $organisationInfoDir, $cedaIdentifier) 
    355220            }, 
    356221             
     
    407272                    }, 
    408273                    element gmd:thesaurusName {                     
    409                         local:CI_Citation(string('GEMET - INSPIRE themes, version 1.0'),concat($currentDate,"=",string('publication')),string(""),string("")) 
     274                        isolib:CI_Citation(string('GEMET - INSPIRE themes, version 1.0'),concat($currentDate,"=",string('publication')),string(""),string("")) 
    410275                    } 
    411276                } 
     
    562427            element gmd:distributor { 
    563428                element gmd:MD_Distributor{ 
    564                     element gmd:distributorContact { 
    565                         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")) 
     429                    element gmd:distributorContact {                                                 
     430                        isolib:cedaDataCenter(string("distributor"), $organisationInfoDir, $cedaIdentifier) 
    566431                    } 
    567432                }             
     
    573438             
    574439            (:TODO: CEDA - must specifiy correct choice of onlineresource from vocab/codelist - hardwired for "download" right now. :) 
    575              
     440            
    576441            for $link in $DE/atom:link 
    577             return             
    578                 element gmd:transferOptions { 
    579                     element gmd:MD_DigitalTransferOptions { 
    580                         element gmd:onLine { 
    581                             element gmd:CI_OnlineResource { 
    582                                 element gmd:linkage { 
    583                                     element gmd:URL { 
    584                                         data($link/@href) 
    585                                     } 
    586                                 }, 
    587                                 element gmd:description { 
    588                                     element gco:CharacterString {data($link/@title)} 
    589                                 }, 
    590                                 element gmd:function { 
    591                                      
    592                                     (: 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.. :) 
    593                                     if (data($link/@title) = "Data Directory") then 
    594                                         element gmd:CI_onLineFunctionCode  {                                     
    595                                             attribute codeList {'http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/Codelist/gmxCodelists.xml#CI_onLineFunctionCode'}, 
    596                                             attribute codeListValue {'download'}, 
    597                                             string("download") 
    598                                         } 
    599                                     else  
    600                                         element gmd:CI_onLineFunctionCode  {                                     
    601                                             attribute codeList {'http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/Codelist/gmxCodelists.xml#CI_onLineFunctionCode'}, 
    602                                             attribute codeListValue {'information'}, 
    603                                             string("information") 
    604                                         } 
    605                                      
    606                                 } 
    607                             } 
    608                         } 
    609                     }                 
    610             } 
     442                let $url:= $link/@href 
     443                let $relation:= $link/@rel 
     444                let $title:= $link/@title 
     445                return                 
     446                    if ($title = "Data Directory") then 
     447                        (: 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.. :) 
     448                        isolib:transferOptions (string($url), string($relation), string($title), string("download")) 
     449                    else 
     450                        (:otherwise treat everything else as "information" now :) 
     451                        isolib:transferOptions (string($url), string($relation), string($title), string("information")) 
     452                 
    611453        }, (: /distributionInfo :) 
    612454         
Note: See TracChangeset for help on using the changeset viewer.