Changeset 6648 for ndgCommon


Ignore:
Timestamp:
26/02/10 14:11:50 (9 years ago)
Author:
sdonegan
Message:

Updated xqueries to handle MEDIN profile better and for producing valid GCMD DIF from MEDIN ISO

Location:
ndgCommon/trunk/ndg/common/xmldb/xquery
Files:
3 edited

Legend:

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

    r6500 r6648  
    2222declare variable $localIdentifier as xs:string := 'LocalID'; 
    2323 
    24 for $MD_Metadata in collection($targetCollection)/gmd:MD_Metadata[gmd:fileIdentifier/gco:CharacterString=$localIdentifier] return  
     24for $MD_Metadata in collection($targetCollection)/gmd:MD_Metadata[gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:identifier/gmd:RS_Identifier/gmd:code/gco:CharacterString=$localIdentifier] return  
    2525 
    2626    element oai_dc:dc { 
  • ndgCommon/trunk/ndg/common/xmldb/xquery/ISO2DIF.xq

    r6500 r6648  
    55 
    66SJD 04/02/2010 - basic ISO to DIF conversion for MEDIN API database 
     7    26/02/2010 - Now generate a quasi full valid GCMD DIF that should render useful info when used with the NDG Discovery Service 
    78:) 
    89 
     
    2021declare variable $localIdentifier as xs:string := 'LocalID'; 
    2122 
    22 for $MD_Metadata in collection($targetCollection)/gmd:MD_Metadata[gmd:fileIdentifier/gco:CharacterString=$localIdentifier] return  
     23for $MD_Metadata in collection($targetCollection)/gmd:MD_Metadata[gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:identifier/gmd:RS_Identifier/gmd:code/gco:CharacterString=$localIdentifier] return  
    2324 
    2425    element ns0:DIF { 
     
    2627        attribute xsi:schemaLocation {'http://gcmd.gsfc.nasa.gov/Aboutus/xml/dif/ http://gcmd.gsfc.nasa.gov/Aboutus/xml/dif/dif_v9.4.xsd'}, 
    2728         
    28         element ns0:Entry_ID {data (concat($repositoryIdentifier,':DIF:',$MD_Metadata/gmd:fileIdentifier/gco:CharacterString))}, 
    29         element ns0:Entry_Title {data ($MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:title/gco:CharacterString)},         
     29        element ns0:Entry_ID {data (concat($repositoryIdentifier,':DIF:',$MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:identifier/gmd:RS_Identifier/gmd:code/gco:CharacterString))}, 
     30         
     31        element ns0:Entry_Title {data ($MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:title/gco:CharacterString)},  
     32         
     33        (: At least in MEDIN profile there is no direct comparison to the mandatory DIF paramters - so replicate gmd:descriptive keywords here but use the extra info present to fill out the dif parameters :)        
     34        for $MD_Parameter in $MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:descriptiveKeywords return 
     35                element ns0:Parameters { 
     36                    if (exists($MD_Parameter/gmd:MD_Keywords/gmd:keyword/gmx:Anchor)) then 
     37                        element ns0:Category { string('')}, 
     38                        element ns0:Topic { string('')}, 
     39                        element ns0:Term { data($MD_Parameter/gmd:MD_Keywords/gmd:keyword/gmx:Anchor) } 
     40                     
     41                   else (), 
     42             
     43                   if (exists($MD_Parameter/gmd:MD_Keywords/gmd:keyword/gco:CharacterString )) then 
     44                        element ns0:Category { data( $MD_Parameter/gmd:MD_Keywords/gmd:thesaurusName/gmd:CI_Citation/gmd:title/gco:CharacterString )}, 
     45                        element ns0:Topic { string('')}, 
     46                        element ns0:Term { data($MD_Parameter/gmd:MD_Keywords/gmd:keyword/gco:CharacterString) } 
     47                     
     48                   else () 
     49           } , 
     50         
     51         
     52        (: Topic Category if its in there.. :) 
     53        if (exists($MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:topicCategory)) then 
     54         
     55            for $MD_TopicCategory in $MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:topicCategory return 
     56                element ns0:ISO_Topic_Category { data($MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:topicCategory/gmd:MD_TopicCategoryCode)} 
     57         
     58        else (), 
     59         
     60        (: keywords - take info from gmd:descriptive keywords :) 
     61        for $MD_keyword in $MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:descriptiveKeywords return 
     62        element ns0:Keyword { 
     63            if (exists($MD_keyword/gmd:MD_Keywords/gmd:keyword/gmx:Anchor)) then 
     64                data($MD_keyword/gmd:MD_Keywords/gmd:keyword/gmx:Anchor) 
     65           else (), 
     66             
     67            if (exists($MD_keyword/gmd:MD_Keywords/gmd:keyword/gco:CharacterString)) then 
     68                data($MD_keyword/gmd:MD_Keywords/gmd:keyword/gco:CharacterString) 
     69            else () 
     70        }, 
     71         
     72        (: Need to put a note in here (seems best place) that this DIF is a "lite" one, converted from ISO19139 via xquery :) 
     73        element Source_Name { 
     74            element Short_Name { string('NOTE! This GCMD DIF has been produced automatically from ISO19139 MEDIN v2.3 profile.  Not all MEDIN info is reproduced here - this conversion is intended to provide basic information to be reproduced in the NDG/MEDIN discovery service')} 
     75        }, 
     76         
     77        (: Temporal Coverage here :) 
     78        if (exists($MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod)) then 
     79         
     80            for $MD_temporal in $MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent return 
     81             
     82                element ns0:Temporal_Coverage { 
     83                    element ns0:Start_Date { data( $MD_temporal/gmd:EX_Extent/gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:beginPosition) }, 
     84                    element ns0:Stop_Date { data( $MD_temporal/gmd:EX_Extent/gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:endPosition ) } 
     85                } 
     86                 
     87        else (), 
     88         
     89        (: Spatial Coverage - remember there might be multiple bboxes! :) 
     90        if (exists($MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox)) then 
     91         
     92            for $MD_Extent in $MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent return 
     93             
     94                element ns0:Spatial_Coverage { 
     95                    element ns0:Southernmost_Latitude { data($MD_Extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox/gmd:southBoundLatitude/gco:Decimal)}, 
     96                    element ns0:Northernmost_Latitude { data($MD_Extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox/gmd:northBoundLatitude/gco:Decimal)}, 
     97                    element ns0:Westernmost_Longitude { data($MD_Extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox/gmd:westBoundLongitude/gco:Decimal)}, 
     98                    element ns0:Easternmost_Longitude { data($MD_Extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox/gmd:eastBoundLongitude/gco:Decimal)}         
     99        }         
     100        else (), 
     101         
     102        (: Info on data centre here..  - might be mulitples so catch all - from iso may be custodian, originator etc etc:) 
     103        if (exists($MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:pointOfContact)) then 
     104         
     105            for $MD_Contact in $MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:pointOfContact return 
     106                element ns0:Data_Center { 
     107                    element ns0:Data_Center_Name { 
     108                     
     109                        if (exists($MD_Contact/gmd:CI_ResponsibleParty/gmd:organisationName/gco:CharacterString)) then 
     110                            element ns0:Short_Name { data ($MD_Contact/gmd:CI_ResponsibleParty/gmd:organisationName/gco:CharacterString)} 
     111                         
     112                        else  
     113                            element ns0:Short_Name { string('Data Centre Name not entered in original ISO! (check original XML for details)')} 
     114                                                 
     115                    }, 
     116                    element ns0:Personnel { 
     117                     
     118                        (: Map this to the ISO rolecode :) 
     119                        element ns0:Role { data ($MD_Contact/gmd:CI_ResponsibleParty/gmd:role/gmd:CI_RoleCode) }, 
     120                         
     121                        (: Map this to the ISO position name :) 
     122                        if (exists($MD_Contact/gmd:CI_ResponsibleParty/gmd:individualName/gco:CharacterString)) then 
     123                            element ns0:Last_Name { data ($MD_Contact/gmd:CI_ResponsibleParty/gmd:individualName/gco:CharacterString)} 
     124                        else 
     125                            element ns0:Last_Name { data ($MD_Contact/gmd:CI_ResponsibleParty/gmd:positionName/gco:CharacterString)} 
     126                } 
     127              } 
     128         
     129        else (), 
     130         
     131        (:also catch information on data distributor from ISO :) 
     132         if (exists($MD_Metadata/gmd:distributionInfo/gmd:MD_Distribution/gmd:distributor/gmd:MD_Distributor/gmd:distributorContact/gmd:CI_ResponsibleParty/gmd:organisationName)) then 
     133             element ns0:Data_Center { 
     134                    element ns0:Data_Center_Name { 
     135                         element ns0:Short_Name { data ($MD_Metadata/gmd:distributionInfo/gmd:MD_Distribution/gmd:distributor/gmd:MD_Distributor/gmd:distributorContact/gmd:CI_ResponsibleParty/gmd:organisationName/gco:CharacterString)} 
     136                     }, 
     137                     element ns0:Personnel { 
     138                                         
     139                        (: Map this to the ISO rolecode :) 
     140                        element ns0:Role { data ($MD_Metadata/gmd:distributionInfo/gmd:MD_Distribution/gmd:distributor/gmd:MD_Distributor/gmd:distributorContact/gmd:CI_ResponsibleParty/gmd:role/gmd:CI_RoleCode) }, 
     141                         
     142                         (: Map this to the ISO position name :) 
     143                        if (exists($MD_Metadata/gmd:distributionInfo/gmd:MD_Distribution/gmd:distributor/gmd:MD_Distributor/gmd:distributorContact/gmd:CI_ResponsibleParty/gmd:individualName/gco:CharacterString)) then 
     144                            element ns0:Last_Name { data ($MD_Metadata/gmd:distributionInfo/gmd:MD_Distribution/gmd:distributor/gmd:MD_Distributor/gmd:distributorContact/gmd:CI_ResponsibleParty/gmd:individualName/gco:CharacterString)} 
     145                        else 
     146                            element ns0:Last_Name { data ($MD_Metadata/gmd:distributionInfo/gmd:MD_Distribution/gmd:distributor/gmd:MD_Distributor/gmd:distributorContact/gmd:CI_ResponsibleParty/gmd:positionName/gco:CharacterString)} 
     147                             
     148                      } 
     149                   } 
     150         else (), 
     151         
     152        (: Abstract info in here :) 
    30153        element ns0:Summary {data($MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:abstract/gco:CharacterString)}, 
     154         
     155        (: Generate list of related urls from ISO :) 
     156         
     157        (:first get basic online resource here - remember for original DIFs had proper resource handling and those original difs are kep and returned, here we're just worrying about ISO linking... so NDG services not handled :) 
     158        (: TODO - handle online resources properly when converting from CEDA ATOM2ISO ISO... see SteveWiki ! :) 
     159        if (exists($MD_Metadata/gmd:distributionInfo/gmd:MD_Distribution/gmd:transferOptions/gmd:MD_DigitalTransferOptions/gmd:onLine/gmd:CI_OnlineResource/gmd:linkage/gmd:URL)) then 
     160         
     161            for $MD_transferOptions in $MD_Metadata/gmd:distributionInfo/gmd:MD_Distribution/gmd:transferOptions             
     162                return         
     163                        element ns0:Related_URL {  
     164                            element ns0:URL { data ($MD_transferOptions/gmd:MD_DigitalTransferOptions/gmd:onLine/gmd:CI_OnlineResource/gmd:linkage/gmd:URL )} 
     165                        } 
     166        else (), 
     167         
     168         
    31169        element ns0:Metadata_Name {data('9.4')}, 
    32170        element ns0:Metadata_Version {data('[CEOS IDN DIF]')}, 
  • ndgCommon/trunk/ndg/common/xmldb/xquery/dif2stubISO.xq

    r6445 r6648  
    5454         
    5555      }, (: /gmd:fileIdentifier :) 
     56 
     57      (: Also need to put unique identifier as defined in MEDIN profile into gmd:MD_MetadataData/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:identifier/gmd:RS_Identifier/gmd:code/gco:CharacterString :) 
     58 
    5659       
    5760       (: ************* ISO Author information **************** - several places in DIF to get this :) 
     
    207210      NOTE: this is the name of the standard we have converted dif TO i.e. ndg_isoStub 
    208211       
    209       TODO: rationalise list of standards & profiles (not done 01/12/09) 
     212      (: Need to rememeber this stubSO was converted from DIF :) 
    210213       
    211214      :) 
    212215      element gmd:metadataStandardName { 
    213           element gco:CharacterString { string('NDG_StubISO19139')} 
     216          element gco:CharacterString { string('GCMD DIF')} 
    214217      },  
    215218      element gmd:metadataStandardVersion { 
    216           element gco:CharacterString { string('v0.1')} 
     219          element gco:CharacterString { string('9.4')} 
    217220      },   
    218221      (: ************* END metadataStandardName ******************* :) 
     
    282285                                                attribute codeListValue {"CI_DateTypeCode"}, 
    283286                                                string('revision')  
    284                                             } 
    285                                          
     287                                            }                                         
    286288                                 } 
    287289                            } 
    288                         } 
     290                        }, 
     291                        (: According to MEDIN profile also need to put unqiue file identifier here :) 
     292                        element gmd:identifier { 
     293                            element gmd:RS_Identifier { 
     294                                element gmd:code { 
     295                                    element gco:CharacterString { data ( $DIF/dif:Entry_ID )} 
     296                                } 
     297                            }                         
     298                        } (: /identifier :) 
    289299                   (: } :) 
    290300                } 
Note: See TracChangeset for help on using the changeset viewer.