Changeset 4425


Ignore:
Timestamp:
12/11/08 10:42:25 (11 years ago)
Author:
cbyrom
Message:

Fix problem with 'where' element name (conflicting with xquery definition) +
stop duplication of deployments data + adjust namespaces + fix variable values.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • exist/trunk/xquery/atom2DIF.xq

    r4421 r4425  
    1 declare default element namespace 'http://www.w3.org/2005/Atom'; 
     1declare default element namespace 'http://gcmd.gsfc.nasa.gov/Aboutus/xml/dif/'; 
     2declare namespace atom = 'http://www.w3.org/2005/Atom'; 
    23declare namespace dif = 'http://gcmd.gsfc.nasa.gov/Aboutus/xml/dif/'; 
    34declare namespace xsi='http://www.w3.org/2001/XMLSchema-instance';  
     
    2324:) 
    2425 
    25 declare variable $targetCollection as xs:string := '/db/atoms'; 
     26declare variable $targetCollection as xs:string := 'TargetCollection'; 
    2627declare variable $deploymentsCollection as xs:string := '/db/atoms'; 
    27 declare variable $repositoryIdentifier as xs:string := 'badc.nerc.ac.uk'; 
    28 declare variable $localIdentifier as xs:string := 'dataent_WLSTA'; 
     28declare variable $repositoryIdentifier as xs:string := 'RepositoryID'; 
     29declare variable $localIdentifier as xs:string := 'LocalID'; 
    2930declare variable $dptTerm as xs:string := 'DPT - NOT YET SET UP/None/DPT'; 
    3031declare variable $obsTerm as xs:string :=  'OBS - NOT YET SET UP/None/OBS'; 
    31 declare variable $activityTerm as xs:string :=  'ACTIVITY - NOT YET SET UP/None/OBS'; 
     32declare variable $activityTerm as xs:string :=  'Activity - NOT YET SET UP/None/ACTIVITY'; 
    3233declare variable $granuleTerm as xs:string :=  'GRAN - NOT YET SET UP/None/GRANULE'; 
     34declare variable $deploymentTerm as xs:string := 'NOT YET SET UP/None/Deployment'; 
    3335declare variable $uriTerm as xs:string :=  'URI'; 
    3436 
    35 for $DE in collection($targetCollection)/entry[matches(id, concat('__ATOM__',$localIdentifier,'$'))]  
     37for $DE in collection($targetCollection)/atom:entry[matches(atom:id, concat('__ATOM__',$localIdentifier,'$'))]  
    3638return  
    3739element DIF { 
    3840        attribute xsi:schemaLocation {'http://gcmd.gsfc.nasa.gov/Aboutus/xml/dif/ http://gcmd.gsfc.nasa.gov/Aboutus/xml/dif/dif_v9.4.xsd'}, 
    39         element Entry_ID {concat(string($DE/moles:entity/moles:molesISO/moles:providerID),':DIF:', tokenize(string($DE/id), '__ATOM__')[2])}, 
    40         element Entry_Title {string($DE/title)}, 
     41        element Entry_ID {concat(string($DE/moles:entity/moles:molesISO/moles:providerID),':DIF:', tokenize(string($DE/atom:id), '__ATOM__')[2])}, 
     42        element Entry_Title {string($DE/atom:title)}, 
    4143        element Data_Set_Citation { 
    42             element Dataset_Creator {string($DE/author/name)}, 
    43             element Dataset_Title {string($DE/title)} 
     44            element Dataset_Creator {string($DE/atom:author/atom:name)}, 
     45            element Dataset_Title {string($DE/atom:title)} 
    4446        }, 
    4547        element Personnel { 
     
    5052        element Parameters { element Category {''}, element Topic {''}, element Term {''} }, 
    5153 
    52            for $deploymentID in ($DE/link[@rel = 'ActivityDeployment']) 
    53                return 
    54                for $atom in ($deploymentsCollection/entry[link[@href = $deploymentID] and category[@label = 'Deployment']]) 
    55                return 
    56                    for $dpt in ($atom[link[@rel = $dptTerm]]) 
    57                        return 
    58                     element Sensor_Name { 
    59                            element Long_Name {data($dpt[title])} 
    60                     }, 
    61            for $deploymentID in ($DE/link[@rel = 'ActivityDeployment']) 
    62                return 
    63                for $atom in ($deploymentsCollection/entry[link[@href = $deploymentID] and category[@label = 'Deployment']]) 
    64                return 
    65                    for $obs in ($atom[link[@rel =$obsTerm]]) 
    66                        return 
    67                     element Source_Name { 
    68                            element Long_Name {data($obs[title])} 
    69                     }, 
    70            for $deploymentID in ($DE/link[@rel = 'ActivityDeployment']) 
    71                return 
    72                for $atom in ($deploymentsCollection/entry[link[@href = $deploymentID] and category[@label = 'Deployment']]) 
    73                return 
    74                    for $activity in ($atom[link[@rel =$activityTerm]]) 
    75                        return 
    76                     element Project { 
    77                            element Long_Name {data($activity[title])} 
    78                     }, 
    79  
    80            for $TemporalRange in $DE/moles:temporalRange 
     54   (:Top level loop over all link data in the atom that refers to deployment atoms:) 
     55   (: NB, slightly convoluted way of doing things to avoid item duplication :) 
     56        for $val in distinct-values( 
     57                for $deploymentID in data($DE/atom:link[@rel = $deploymentTerm]/@href) 
     58        return 
     59        (:Now look up these deployment atoms and retrieve their links - removing duplicates:) 
     60                for $title in (data(collection($deploymentsCollection)/atom:entry[atom:link[@href = $deploymentID] and atom:category[@label = 'Deployment']]/atom:link[@rel = $dptTerm]/@title)) 
     61                return 
     62                                $title 
     63                        ) 
     64        return  
     65                element Sensor_Name { 
     66                element Long_Name {$val} 
     67        }, 
     68         
     69        for $val in distinct-values( 
     70                for $deploymentID in data($DE/atom:link[@rel = $deploymentTerm]/@href) 
     71        return 
     72                for $title in (data(collection($deploymentsCollection)/atom:entry[atom:link[@href = $deploymentID] and atom:category[@label = 'Deployment']]/atom:link[@rel = $obsTerm]/@title)) 
     73                return 
     74                                $title 
     75                        ) 
     76    return 
     77            element Source_Name { 
     78           element Long_Name {$val} 
     79            }, 
     80   for $TemporalRange in $DE/moles:temporalRange 
    8181        return 
    82             element Temporal_Coverage 
    83                         { 
    84                         element Start_Date {tokenize(string($DE/moles:temporalRange), '/')[0]}, 
    85                         element Stop_Date {tokenize(string($DE/moles:temporalRange), '/')[1]} 
    86                         }, 
     82        element Temporal_Coverage 
     83        { 
     84        element Start_Date {tokenize(string($DE/moles:temporalRange), '/')[1]}, 
     85        element Stop_Date {tokenize(string($DE/moles:temporalRange), '/')[2]} 
     86        }, 
    8787            
    88         for $BoundingBox in $DE//georss:where/gml:Envelope 
     88        for $BoundingBox in $DE//../gml:Envelope 
    8989        return  
    9090            element Spatial_Coverage { 
    91                     element Southernmost_Latitude {data($BoundingBox/gml:lowerCorner)}, 
    92                     element Northernmost_Latitude {tokenize(string($BoundingBox/gml:upperCorner), '')[1]}, 
    93                     element Westernmost_Longitude {tokenize(string($BoundingBox/gml:lowerCorner), '')[0]}, 
    94                     element Easternmost_Longitude {tokenize(string($BoundingBox/gml:upperCorner), '')[0]} 
     91                    element Southernmost_Latitude {tokenize(string($BoundingBox/gml:lowerCorner), ' ')[2]}, 
     92                    element Northernmost_Latitude {tokenize(string($BoundingBox/gml:upperCorner), ' ')[2]}, 
     93                    element Westernmost_Longitude {tokenize(string($BoundingBox/gml:lowerCorner), ' ')[1]}, 
     94                    element Easternmost_Longitude {tokenize(string($BoundingBox/gml:upperCorner), ' ')[1]} 
    9595                }, 
    9696          
    9797        element Data_Resolution {''}, 
     98         
     99        for $val in distinct-values( 
     100                for $deploymentID in data($DE/atom:link[@rel = $deploymentTerm]/@href) 
     101        return 
     102                for $title in (data(collection($deploymentsCollection)/atom:entry[atom:link[@href = $deploymentID] and atom:category[@label = 'Deployment']]/atom:link[@rel = $activityTerm]/@title)) 
     103                return 
     104                                $title 
     105                        ) 
     106    return 
     107            element Project { 
     108           element Long_Name {$val} 
     109            }, 
    98110        element Quality {''}, 
    99111        element Use_Constraints {''}, 
     
    102114        element Multimedia_Sample {''}, 
    103115        element Reference {''}, 
    104         element Summary {string($DE/summary)}, 
    105            for $link in ($DE/link[@rel = $granuleTerm]) 
    106                return 
    107                     element Related_URL { 
    108                             element URL {data($link[@href])}, 
    109                                element Description {data($link[@title])}  
    110                                }, 
     116        element Summary {string($DE/atom:summary)}, 
     117    for $link in ($DE/atom:link[@rel = $granuleTerm]) 
     118       return 
     119            element Related_URL { 
     120                    element URL {data($link[@href])}, 
     121                       element Description {data($link[@title])}  
     122                       }, 
    111123 
    112            for $link in ($DE/link[@rel = $uriTerm]) 
    113                return 
    114                     element Related_URL { 
    115                             element URL {data($link[@href])}, 
    116                                element Description {data($link[@title])} 
    117                                }, 
     124   for $link in ($DE/atom:link[@rel = $uriTerm]) 
     125       return 
     126            element Related_URL { 
     127                    element URL {data($link[@href])}, 
     128                       element Description {data($link[@title])} 
     129                       }, 
    118130        element Parent_DIF {''}, 
    119131        element IDN_Node { element Short_Name {''} }, 
     
    124136                element DIF_Creation_Date {data($DE/moles:entity/moles:molesISO/moles:created)} 
    125137        else (), 
    126         if  (exists($DE/updated)) then  
    127                 element DIF_Revision_History {data($DE/updated)} (: missing updator + summary... :) 
     138        if  (exists($DE/atom:updated)) then  
     139                element DIF_Revision_History {data($DE/atom:updated)}  
    128140        else () 
    129141        }  
Note: See TracChangeset for help on using the changeset viewer.