Ignore:
Timestamp:
22/08/07 11:50:27 (12 years ago)
Author:
mpritcha
Message:

Probably no change but re-synced DIF and DC xqueries to current versions and added correct revision labels.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI01-discovery/trunk/ws-Discovery2/src/ndg/services/discovery/PresentAgent.java

    r2628 r2839  
    184184                                else if ( this.format.equals("DC") ) 
    185185                                { 
    186                                         //1. Check to see if a dc-format document exists for this name 
     186                                        // Implements revision @2575 of TI07-MOLES/trunk/DublinCore/XQuery/NDG-DublinCore.xquery 
    187187                                        Vector queryParams = new Vector(); 
    188                                         String xqueryStr = "import module namespace voclib='http://ndg.nerc.ac.uk/xquery/lib/vocab' at 'xmldb:exist:///db/xqueryLib/Vocabs/vocab_xquery_lib.xquery'; import module namespace utillib='http://ndg.nerc.ac.uk/xquery/lib/utilities' at 'xmldb:exist:///db/xqueryLib/Utilities/utility_xquery_lib.xquery'; declare default element namespace 'http://ndg.nerc.ac.uk/moles'; declare namespace xsi='http://www.w3.org/2001/XMLSchema-instance';  declare namespace dc='http://purl.org/dc/elements/1.1/'; declare namespace oai_dc='http://www.openarchives.org/OAI/2.0/oai_dc/'; declare namespace dummy='http://ndg.nerc.ac.uk/dummy'; declare variable $targetCollection as xs:string {'/db/discovery/moles'}; declare variable $repositoryIdentifier as xs:string {'RepositoryID'}; declare variable $localIdentifier as xs:string {'LocalID'}; declare function local:docExists($coll as xs:string, $doc as xs:string) as item()* {    let $testset := collection($coll)//root()       let $matches :=                 for $i in $testset              where util:document-name($i) = $doc             return  document-uri($i)        return $matches }; let $i := local:docExists('/db/discovery/original/"+this.format+"', '"+thisdoc+"') return if ( fn:empty($i) ) then ( for $DE in collection($targetCollection)/dgMetadata/dgMetadataRecord[ exists('dgDataEntity')  and dgMetadataID/schemeIdentifier='NDG-B0'  ] where util:document-name($DE)='"+thisdoc+"' return  element dummy:container { element oai_dc:dc {   attribute xsi:schemaLocation {'http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd'},    element dc:title {string($DE/name)},    element dc:type {'Dataset'},    element dc:identifier {concat($DE/dgMetadataID/repositoryIdentifier, $utillib:moles_id_separator, 'DC', $utillib:moles_id_separator, $DE/dgMetadataID/localIdentifier)},        element dc:description {string($DE/dgMetadataDescription/abstract/abstractText)},       element dc:date                 {               if (exists($DE/(dgMetadataProvenance | DataProvenance)/RecordUpdate/UpdateDate)) then                   for $updatedate in ($DE/(dgMetadataProvenance | DataProvenance)/RecordUpdate/UpdateDate)                                order by xs:dateTime($updatedate)                       return data($updatedate[1])             else                    string($DE/(dgMetadataProvenance | DataProvenance)/RecordCreation/CreatedDate)                  },      for $StructuredKeyword in distinct-values($DE/dgStructuredKeyword[      voclib:spot-vocab($voclib:cf_standard_names, dgValidTermID/ParentListID)        or voclib:spot-vocab($voclib:gcmd_science_valids, dgValidTermID/ParentListID)   or voclib:spot-vocab($voclib:gcmd_project_valids, dgValidTermID/ParentListID)   or voclib:spot-vocab($voclib:iso_topic_list, dgValidTermID/ParentListID)        or voclib:spot-vocab($voclib:bodc_parameter_usage_vocab, dgValidTermID/ParentListID)    or voclib:spot-vocab($voclib:bodc_parameter_discovery_vocab, dgValidTermID/ParentListID)        ]/dgValidTerm)          order by $StructuredKeyword     return                  element dc:subject {string($StructuredKeyword)},                for $StructuredKeyword1 in distinct-values($DE/dgDataEntity/dgDataSummary/dgParameterSummary/dgStdParameterMeasured[    voclib:spot-vocab($voclib:gcmd_science_valids, dgValidTermID/ParentListID)      or voclib:spot-vocab($voclib:gcmd_project_valids, dgValidTermID/ParentListID)   or voclib:spot-vocab($voclib:bodc_parameter_usage_vocab, dgValidTermID/ParentListID)    or voclib:spot-vocab($voclib:bodc_parameter_discovery_vocab, dgValidTermID/ParentListID)        ]/dgValidTerm)                  order by $StructuredKeyword1    return                  element dc:subject  {string($StructuredKeyword1)},      for $DataCreatorRole in $DE/dgDataEntity/dgDataRoles/dgDataCreator/dgRoleHolder                 order by $DataCreatorRole/startDate empty least         return                  for $DataCreatorRoleHolder in collection($targetCollection)/dgMetadata/(dgOrganisation | dgPerson)                      [(dgMetadataID/schemeIdentifier='NDG-B0'                        and dgMetadataID/repositoryIdentifier=$DataCreatorRole/(dgOrganisationID | dgPersonID)/repositoryIdentifier                     and dgMetadataID/localIdentifier=$DataCreatorRole/(dgOrganisationID | dgPersonID)/localIdentifier)]             return                          element dc:creator {                            if (string(local-name($DataCreatorRoleHolder))='dgOrganisation') then                                   (string($DataCreatorRoleHolder/name))                           else if (string(local-name($DataCreatorRoleHolder))='dgPerson') then                                    (string(concat(string($DataCreatorRoleHolder/name/initials), ' ', string($DataCreatorRoleHolder/name/familyName))))                             else ('empty content')                  },      for $DataCuratorRole in $DE/dgDataEntity/dgDataRoles/dgDataCurator/dgRoleHolder[not(exists(endDate)) or endDate='']             order by $DataCuratorRole/startDate empty least         return                  for $DataCuratorRoleHolder in collection($targetCollection)/dgMetadata/(dgOrganisation | dgPerson)                      [(dgMetadataID/schemeIdentifier='NDG-B0'                        and dgMetadataID/repositoryIdentifier=$DataCuratorRole/(dgOrganisationID | dgPersonID)/repositoryIdentifier                     and dgMetadataID/localIdentifier=$DataCuratorRole/(dgOrganisationID | dgPersonID)/localIdentifier)]             return                          element dc:publisher {                          if (string(local-name($DataCuratorRoleHolder))='dgOrganisation') then                                   (string($DataCuratorRoleHolder/name))                           else if (string(local-name($DataCuratorRoleHolder))='dgPerson') then                                    (string(concat(string($DataCuratorRoleHolder/name/initials), ' ', string($DataCuratorRoleHolder/name/familyName))))                             else ('empty content')                  } }  (: </oai_dc:dc> :) } (: dummy:container :) ) else (        element dummy:container { doc(fn:item-at($i, 1)) } )"; 
     188                                        String xqueryStr = "import module namespace voclib='http://ndg.nerc.ac.uk/xquery/lib/vocab' at 'xmldb:exist:///db/xqueryLib/Vocabs/vocab_xquery_lib.xquery'; import module namespace utillib='http://ndg.nerc.ac.uk/xquery/lib/utilities' at 'xmldb:exist:///db/xqueryLib/Utilities/utility_xquery_lib.xquery'; declare default element namespace 'http://ndg.nerc.ac.uk/moles'; declare namespace xsi='http://www.w3.org/2001/XMLSchema-instance';  declare namespace dc='http://purl.org/dc/elements/1.1/'; declare namespace oai_dc='http://www.openarchives.org/OAI/2.0/oai_dc/'; declare namespace dummy='http://ndg.nerc.ac.uk/dummy'; declare variable $targetCollection as xs:string {'/db/discovery/moles'}; declare variable $repositoryIdentifier as xs:string {'RepositoryID'}; declare variable $localIdentifier as xs:string {'LocalID'}; declare function local:docExists($coll as xs:string, $doc as xs:string) as item()* {    let $testset := collection($coll)//root()       let $matches :=                 for $i in $testset              where util:document-name($i) = $doc             return  document-uri($i)        return $matches }; let $i := local:docExists('/db/discovery/original/"+this.format+"', '"+thisdoc+"') return if ( fn:empty($i) ) then ( for $DE in collection($targetCollection)/dgMetadata/dgMetadataRecord[ exists('dgDataEntity')  and dgMetadataID/schemeIdentifier='NDG-B0'  ] where util:document-name($DE)='"+thisdoc+"' return  element dummy:container { element oai_dc:dc {   attribute xsi:schemaLocation {'http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd'},    element dc:title {string($DE/name)},    element dc:type {'Dataset'},    element dc:identifier {concat($DE/dgMetadataID/repositoryIdentifier, $utillib:moles_id_separator, 'DC', $utillib:moles_id_separator, $DE/dgMetadataID/localIdentifier)},        for $identifiers in $DE/(dgMetadataDescription/descriptionSection/descriptionOnlineReference | abstract/abstractOnlineReference)[               exists(dgReferenceClass/dgValidTermID/ParentListID)             and             voclib:spot-vocab($voclib:ndg_online_reference_classes_vocab, dgReferenceClass/dgValidTermID/ParentListID)              and             dgReferenceClass/dgValidTerm='DataPage']        return element dc:identifier {data($identifiers/dgSimpleLink/URI)},     element dc:description {string($DE/dgMetadataDescription/abstract/abstractText)},       element dc:date                 {               if (exists($DE/(dgMetadataProvenance | DataProvenance)/RecordUpdate/UpdateDate)) then                   for $updatedate in ($DE/(dgMetadataProvenance | DataProvenance)/RecordUpdate/UpdateDate)                                order by xs:date($updatedate)                   return data($updatedate[1])             else                    string($DE/(dgMetadataProvenance | DataProvenance)/RecordCreation/CreatedDate)                  },      for $StructuredKeyword in distinct-values($DE/dgStructuredKeyword[      voclib:spot-vocab($voclib:cf_standard_names, dgValidTermID/ParentListID)        or voclib:spot-vocab($voclib:gcmd_science_valids, dgValidTermID/ParentListID)   or voclib:spot-vocab($voclib:gcmd_project_valids, dgValidTermID/ParentListID)   or voclib:spot-vocab($voclib:iso_topic_list, dgValidTermID/ParentListID)        or voclib:spot-vocab($voclib:bodc_parameter_usage_vocab, dgValidTermID/ParentListID)    or voclib:spot-vocab($voclib:bodc_parameter_discovery_vocab, dgValidTermID/ParentListID)        ]/dgValidTerm)          order by $StructuredKeyword     return                  element dc:subject {string($StructuredKeyword)},                for $StructuredKeyword1 in distinct-values($DE/dgDataEntity/dgDataSummary/dgParameterSummary/dgStdParameterMeasured[    voclib:spot-vocab($voclib:gcmd_science_valids, dgValidTermID/ParentListID)      or voclib:spot-vocab($voclib:gcmd_project_valids, dgValidTermID/ParentListID)   or voclib:spot-vocab($voclib:bodc_parameter_usage_vocab, dgValidTermID/ParentListID)    or voclib:spot-vocab($voclib:bodc_parameter_discovery_vocab, dgValidTermID/ParentListID)        ]/dgValidTerm)                  order by $StructuredKeyword1    return                  element dc:subject  {string($StructuredKeyword1)},      for $DataCreatorRole in $DE/dgDataEntity/dgDataRoles/dgDataCreator/dgRoleHolder                 order by $DataCreatorRole/startDate empty least         return                  for $DataCreatorRoleHolder in collection($targetCollection)/dgMetadata/(dgOrganisation | dgPerson)                      [(dgMetadataID/schemeIdentifier='NDG-B0'                        and dgMetadataID/repositoryIdentifier=$DataCreatorRole/(dgOrganisationID | dgPersonID)/repositoryIdentifier                     and dgMetadataID/localIdentifier=$DataCreatorRole/(dgOrganisationID | dgPersonID)/localIdentifier)]             return                          element dc:creator {                            if (string(local-name($DataCreatorRoleHolder))='dgOrganisation') then                                   (string($DataCreatorRoleHolder/name))                           else if (string(local-name($DataCreatorRoleHolder))='dgPerson') then                                    (string(concat(string($DataCreatorRoleHolder/name/initials), ' ', string($DataCreatorRoleHolder/name/familyName))))                             else ('empty content')                  },      for $DataCuratorRole in $DE/dgDataEntity/dgDataRoles/dgDataCurator/dgRoleHolder[not(exists(endDate)) or endDate='']             order by $DataCuratorRole/startDate empty least         return                  for $DataCuratorRoleHolder in collection($targetCollection)/dgMetadata/(dgOrganisation | dgPerson)                      [(dgMetadataID/schemeIdentifier='NDG-B0'                        and dgMetadataID/repositoryIdentifier=$DataCuratorRole/(dgOrganisationID | dgPersonID)/repositoryIdentifier                     and dgMetadataID/localIdentifier=$DataCuratorRole/(dgOrganisationID | dgPersonID)/localIdentifier)]             return                          element dc:publisher {                          if (string(local-name($DataCuratorRoleHolder))='dgOrganisation') then                                   (string($DataCuratorRoleHolder/name))                           else if (string(local-name($DataCuratorRoleHolder))='dgPerson') then                                    (string(concat(string($DataCuratorRoleHolder/name/initials), ' ', string($DataCuratorRoleHolder/name/familyName))))                             else ('empty content') } }  (: </oai_dc:dc> :) } (: dummy:container :) ) else (         element dummy:container { doc(fn:item-at($i, 1)) } )"; 
    189189 
    190190                                        queryParams.addElement( xqueryStr.getBytes("UTF-8") );  
     
    238238 
    239239                                        Vector queryParams = new Vector(); 
    240                                         // Implements revision #2358 of TI07-MOLES/trunk/DIF/XQuery/NDG-MDIP.xquery 
    241                                         String xqueryStr = "import module namespace voclib='http://ndg.nerc.ac.uk/xquery/lib/vocab' at 'xmldb:exist:///db/xqueryLib/Vocabs/vocab_xquery_lib.xquery'; import module namespace utillib='http://ndg.nerc.ac.uk/xquery/lib/utilities' at 'xmldb:exist:///db/xqueryLib/Utilities/utility_xquery_lib.xquery'; declare default element namespace 'http://gcmd.gsfc.nasa.gov/Aboutus/xml/dif/'; declare namespace xsi='http://www.w3.org/2001/XMLSchema-instance';  declare namespace moles='http://ndg.nerc.ac.uk/moles'; declare namespace dummy='http://ndg.nerc.ac.uk/dummy';  declare variable $targetCollection as xs:string {'/db/discovery/moles'}; declare variable $repositoryIdentifier as xs:string {'RepositoryID'}; declare variable $localIdentifier as xs:string {'LocalID'}; declare function local:docExists($coll as xs:string, $doc as xs:string) as item()* {      let $testset := collection($coll)//root()       let $matches :=                 for $i in $testset              where util:document-name($i) = $doc             return  document-uri($i)        return $matches };  let $i := local:docExists('/db/discovery/original/"+this.format+"', '"+thisdoc+"') return if ( fn:empty($i) ) then ( for $DE in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[      exists('moles:dgDataEntity')    and moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'  ]       where util:document-name($DE)='"+thisdoc+"' return element dummy:container { element DIF {      attribute xsi:schemaLocation {'http://gcmd.gsfc.nasa.gov/Aboutus/xml/dif/ http://gcmd.gsfc.nasa.gov/Aboutus/xml/dif/dif_v9.4.xsd'},     element Entry_ID {concat($DE/moles:dgMetadataID/moles:repositoryIdentifier, $utillib:moles_id_separator, 'DIF', $utillib:moles_id_separator, $DE/moles:dgMetadataID/moles:localIdentifier)},    element Entry_Title {string($DE/moles:name)},   element Data_Set_Citation {                 for $DataCreatorRole in $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:dgRoleHolder[not(exists(moles:endDate)) or moles:endDate=''][1]          return                      for $DataCreatorRoleHolder in collection($targetCollection)/moles:dgMetadata/*[(moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'                         and moles:dgMetadataID/moles:repositoryIdentifier=$DataCreatorRole/*/moles:repositoryIdentifier                         and moles:dgMetadataID/moles:localIdentifier=$DataCreatorRole/*/moles:localIdentifier)]                  return                              element Dataset_Creator {                           if (exists($DataCreatorRoleHolder/moles:name/moles:initials)) then                                  string(concat(string($DataCreatorRoleHolder/moles:name/moles:initials), ' ', string($DataCreatorRoleHolder/moles:name/moles:familyName)))                           else                               string($DataCreatorRoleHolder/moles:abbreviation)                            },          element Dataset_Title {string($DE/moles:name)}      },      for $StructuredKeyword in ($DE//(moles:dgStructuredKeyword | moles:dgStdParameterMeasured)[(voclib:spot-vocab($voclib:gcmd_science_valids, moles:dgValidTermID/moles:ParentListID) or voclib:spot-vocab($voclib:gcmd_science_valids_correct, moles:dgValidTermID/moles:ParentListID) or voclib:spot-vocab($voclib:gcmd_science_valids_categories, moles:dgValidTermID/moles:ParentListID))]     )               return if (exists($StructuredKeyword/*/moles:dgValidTerm)) then                     element Parameters {                        element Category {string($StructuredKeyword/*/moles:dgValidTerm)},                      if (exists($StructuredKeyword//moles:dgValidSubterm)                            and $StructuredKeyword//moles:dgValidSubterm != ''                              and $StructuredKeyword//moles:dgValidSubterm != ' ') then                       for $Subterm in $StructuredKeyword//moles:dgValidSubterm[exists(moles:dgValidTerm)]                         where exists($Subterm/moles:dgValidSubterm)                             order by $Subterm/moles:ListLevel                           return                                          if ($Subterm/moles:ListLevel=1) then element Topic {string($Subterm/moles:dgValidSubterm/moles:dgValidTerm)}                                    else if ($Subterm/moles:ListLevel=2) then element Term {string($Subterm/moles:dgValidSubterm/moles:dgValidTerm)}                                        else if ($Subterm/moles:ListLevel=3) then element Variable {string($Subterm/moles:dgValidSubterm/moles:dgValidTerm)}                                    else if ($Subterm/moles:ListLevel=4) then element Detailed_Variable {string($Subterm/moles:dgValidSubterm/moles:dgValidTerm)}                                   else element GCMD_Science_Valid {string($Subterm/moles:dgValidSubterm/moles:dgValidTerm)}                       else()                      }           else(),         for $StructuredKeyword in ($DE//(moles:dgStructuredKeyword | moles:dgDataEntity/moles:dgDataSummary/moles:dgParameterSummary/moles:dgStdParameterMeasured)[voclib:spot-vocab($voclib:gcmd_science_valids, moles:dgValidTermID/moles:ParentListID) or voclib:spot-vocab($voclib:gcmd_science_valids_correct, moles:dgValidTermID/moles:ParentListID) or voclib:spot-vocab($voclib:gcmd_science_valids_deprecated, moles:dgValidTermID/moles:ParentListID) and (not(exists(moles:ListLevel)) or moles:ListLevel=0)])      return          element Parameters {data($StructuredKeyword/moles:dgValidTerm)},        for $ISOTopicCategory in ($DE/moles:dgStructuredKeyword[voclib:spot-vocab($voclib:iso_topic_list, moles:dgValidTermID/moles:ParentListID)])         return              element ISO_Topic_Category {string($ISOTopicCategory/moles:dgValidTerm)},       for $Keyword in distinct-values($DE//moles:dgStructuredKeyword[         not (voclib:spot-vocab($voclib:iso_topic_list, moles:dgValidTermID/moles:ParentListID)  or voclib:spot-vocab($voclib:gcmd_science_valids, moles:dgValidTermID/moles:ParentListID)       or voclib:spot-vocab($voclib:gcmd_science_valids_correct, moles:dgValidTermID/moles:ParentListID)       )]/moles:dgValidTerm)   return element Keyword {string($Keyword)},      for $DepDPT in ($DE/moles:dgDataEntity/moles:RelatedDeployment/moles:DataProductionToolID)      return              element Sensor_Name {               for $DepDPTAbbrev in ((collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[moles:dgMetadataID[moles:schemeIdentifier='NDG-B0' and moles:repositoryIdentifier=$DepDPT/moles:repositoryIdentifier and moles:localIdentifier=$DepDPT/moles:localIdentifier]]/moles:abbreviation))                    return element Short_Name {data($DepDPTAbbrev)},            for $DepDPTName in ((collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[moles:dgMetadataID[moles:schemeIdentifier='NDG-B0' and moles:repositoryIdentifier=$DepDPT/moles:repositoryIdentifier and moles:localIdentifier=$DepDPT/moles:localIdentifier]]/moles:name))              return element Long_Name {data($DepDPTName)}                },      for $DepObsStn in ($DE/moles:dgDataEntity/moles:RelatedDeployment/moles:ObservationStationID)   return              element Source_Name {               for $DepObsStnAbbrev in ((collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[moles:dgMetadataID[moles:schemeIdentifier='NDG-B0' and moles:repositoryIdentifier=$DepObsStn/moles:repositoryIdentifier and moles:localIdentifier=$DepObsStn/moles:localIdentifier]]/moles:abbreviation))                   return element Short_Name {data($DepObsStnAbbrev)},                 for $DepObsStnName in ((collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[moles:dgMetadataID[moles:schemeIdentifier='NDG-B0' and moles:repositoryIdentifier=$DepObsStn/moles:repositoryIdentifier and moles:localIdentifier=$DepObsStn/moles:localIdentifier]]/moles:name))                     return element Long_Name {data($DepObsStnName)}             },      for $TemporalRange in ($DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDataCoverage//moles:dgDateRange)              return                      element Temporal_Coverage                   {                       element Start_Date {data($TemporalRange/moles:DateRangeStart)},                         element End_Date {data($TemporalRange/moles:DateRangeEnd)}                      },      for $TemporalTerm in ($DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDataCoverage//moles:dgArea[voclib:spot-vocab($voclib:gcmd_chronostratigraphic_valids, moles:dgValidTermID/moles:ParentListID)]/moles:dgValidTerm)              return element Paleo_Temporal_Coverage {element Chronostratigraphic_Unit {data($TemporalTerm)}},        for $Data_Set_Progress in ($DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDataStatus/moles:dgDatasetClosure)                return element Data_Set_Progress {data($Data_Set_Progress)},    for $BoundingBox in ($DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDataCoverage//moles:BoundingBox)        return              element Spatial_Coverage {              element Southernmost_Latitude {data($BoundingBox/moles:LimitSouth)},                    element Northernmost_Latitude {data($BoundingBox/moles:LimitNorth)},                    element Westernmost_Longitude {data($BoundingBox/moles:LimitWest)},                     element Easternmost_Longitude {data($BoundingBox/moles:LimitEast)}          },      for $Location in ($DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDataCoverage//moles:dgArea[voclib:spot-vocab($voclib:gcmd_location_valids, moles:dgValidTermID/moles:ParentListID)])               return element Location {data($Location/moles:dgValidTerm)},    for $DepAct in ($DE/moles:dgDataEntity/moles:RelatedDeployment/moles:ActivityID)        return              element Project {           for $DepActAbbrev in (collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[moles:dgMetadataID[moles:schemeIdentifier='NDG-B0' and moles:repositoryIdentifier=$DepAct/moles:repositoryIdentifier and moles:localIdentifier=$DepAct/moles:localIdentifier]]/moles:abbreviation)              return                      element Short_Name {data($DepActAbbrev)},               for $DepActName in (collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[moles:dgMetadataID[moles:schemeIdentifier='NDG-B0' and moles:repositoryIdentifier=$DepAct/moles:repositoryIdentifier and moles:localIdentifier=$DepAct/moles:localIdentifier]]/moles:name)                return                      element Long_Name {data($DepActName)}           },      if (exists($DE/moles:dgDataEntity/moles:dgDataGranule/moles:accessControlPolicy)) then                  for $DG in $DE/moles:dgDataEntity/moles:dgDataGranule               return                                      element Access_Constraints {                            if (exists($DG/moles:dgGranuleSummary/moles:dgGranuleName)) then                                    concat('For data granule ', $DG/moles:dgGranuleSummary/moles:dgGranuleName, ': ')                           else (),                                if (exists($DG/moles:accessControlPolicy/moles:accessControlPolicyURL)) then                                concat('See access control policy at ', escape-uri($DG/moles:accessControlPolicy/moles:accessControlPolicyURL, true()))                             else if (exists($DG/moles:accessControlPolicy/moles:accessControlPolicyText)) then                                  data($DG/moles:accessControlPolicy/moles:accessControlPolicyText)                            else                                for $securityCondition in $DG/moles:accessControlPolicy/moles:dgSecurityCondition                               return                                      if (exists($securityCondition/moles:conditionExplanationText)) then                                         concat('Effect: ', data($securityCondition/moles:effect), ' - ', data($securityCondition/moles:conditionExplanationText))                                   else concat('Effect: ', data($securityCondition/moles:effect), 'needs ', data($securityCondition/moles:attauthRole), ' from ', data($securityCondition/moles:dgAttributeAuthority))                        }                 else (),  if (exists($DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:dgRoleHolder)) then               for $DataCreatorRole in $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:dgRoleHolder                     order by $DataCreatorRole/moles:startDate empty least                           return                              for $DataCreatorRoleHolder in collection($targetCollection)/moles:dgMetadata/(moles:dgOrganisation | moles:dgPerson)                                                    [(moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'                                                    and moles:dgMetadataID/moles:repositoryIdentifier=$DataCreatorRole/*/moles:repositoryIdentifier                                                 and moles:dgMetadataID/moles:localIdentifier=$DataCreatorRole/*/moles:localIdentifier)]                                 return                                          element Originating_Center {                                    if (string(local-name($DataCreatorRoleHolder))='dgOrganisation') then                                           (string($DataCreatorRoleHolder/moles:name))                                     else if (string(local-name($DataCreatorRoleHolder))='dgPerson') then                                            (string(concat(string($DataCreatorRoleHolder/moles:name/moles:initials), ' ', string($DataCreatorRoleHolder/moles:name/moles:familyName))))                                     else ('empty content')                          }       else (),        for $DataCuratorRole in $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:dgRoleHolder         [not(exists(moles:endDate)) or moles:endDate='']        return          for $DataCuratorRoleHolder in collection($targetCollection)/moles:dgMetadata/(moles:dgOrganisation | moles:dgPerson)    [(moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'    and moles:dgMetadataID/moles:repositoryIdentifier=$DataCuratorRole/*/moles:repositoryIdentifier         and moles:dgMetadataID/moles:localIdentifier=$DataCuratorRole/*/moles:localIdentifier)]         return          element Data_Center {   element Data_Center_Name {      element Short_Name {    if (exists($DataCuratorRoleHolder/moles:name/moles:initials)) then      string(concat(string($DataCuratorRoleHolder/moles:name/moles:initials), ' ', string($DataCuratorRoleHolder/moles:name/moles:familyName)))       else    string($DataCuratorRoleHolder/moles:abbreviation)       },      element Long_Name {     if (exists($DataCuratorRoleHolder/moles:name/moles:initials)) then      string(concat(string($DataCuratorRoleHolder/moles:name/moles:initials), ' ', string($DataCuratorRoleHolder/moles:name/moles:familyName)))       else string($DataCuratorRoleHolder/moles:name)  }       },      if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:URI)) then         element Data_Center_URL {data($DataCuratorRoleHolder/moles:contactDetails/moles:URI)}   else (),        for $DGID in $DE/moles:dgDataEntity/moles:dgDataGranule/moles:dataModelID       return          element Data_Set_ID {concat($DGID/moles:repositoryIdentifier, $utillib:moles_id_separator, $DGID/moles:schemeIdentifier, $utillib:moles_id_separator, $DGID/moles:localIdentifier)},    element  Personnel {    element Role {'Data Center Contact'},   if (exists($DataCuratorRoleHolder/name/knownAs)) then   element First_Name {string($DataCuratorRoleHolder/moles:name/moles:knownAs)}    else if (exists($DataCuratorRoleHolder/moles:name/moles:initials)) then         element First_Name {string($DataCuratorRoleHolder/moles:name/moles:initials)}   else (),                                                element Last_Name {     if (exists($DataCuratorRoleHolder/moles:name/moles:familyName)) then    string($DataCuratorRoleHolder/moles:name/moles:familyName)      else string($DataCuratorRoleHolder/moles:name)  },      if (exists($DataCuratorRole/moles:contactDetails/moles:eMail)) then     element Email {string($DataCuratorRole/moles:contactDetails/moles:eMail)}       else    if (exists($DataCuratorRoleHolder/contactDetails/eMail)) then   (element Email {string($DataCuratorRoleHolder/moles:contactDetails/moles:eMail)})       else (),        if (exists($DataCuratorRole/moles:contactDetails/moles:telephone)) then         element Phone {string($DataCuratorRole/moles:contactDetails/moles:telephone)}   else if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:telephone)) then      element Phone {string($DataCuratorRoleHolder/moles:contactDetails/moles:telephone)}     else (),        if (exists($DataCuratorRole/moles:contactDetails/moles:fax)) then       element Fax {string($DataCuratorRole/moles:contactDetails/moles:fax)}   else if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:fax)) then    element Fax {string($DataCuratorRoleHolder/moles:contactDetails/moles:fax)}     else (),        if (exists($DataCuratorRole/moles:contactDetails/moles:address)) then   element Contact_Address {       for $addressline in $DataCuratorRole/moles:contactDetails/moles:address/moles:addressline       return element Address {data($addressline)},    if (exists($DataCuratorRole/moles:contactDetails/moles:address/moles:city)) then        element City {string($DataCuratorRole/moles:contactDetails/moles:address/moles:city)}   else (),        if (exists($DataCuratorRole/moles:contactDetails/moles:address/moles:postcode)) then    element Postal_Code {string($DataCuratorRole/moles:contactDetails/moles:address/moles:postcode)}        else (),        if (exists($DataCuratorRole/moles:contactDetails/moles:address/moles:country)) then     element Country {string($DataCuratorRole/moles:contactDetails/moles:address/moles:country)}     else ()         }       else if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:address)) then        element Contact_Address {       for $addressline in $DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:addressline         return element Address {data($addressline)},    if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:city)) then          element City {string($DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:city)}     else (),        if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:postcode)) then      element Postal_Code {string($DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:postcode)}  else (),        if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:country)) then       element Country {string($DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:country)}       else ()         }       else ()         }       },      element Summary {string($DE/moles:dgMetadataDescription/moles:abstract/moles:abstractText)},    for $DG in $DE/moles:dgDataEntity/moles:dgDataGranule       return              if ($DG/moles:dataModelID/moles:schemeIdentifier='NDG-A0') then                             (element Related_URL {                                  element URL_Content_Type {'NDG_A_SERVICE'},                             if (exists($DG/instance/URI)) then                                  element URL {escape-uri($DG/instance/URI, true())}                                  else if ($DG/moles:dataModelID/moles:repositoryIdentifier='badc.nerc.ac.uk') then                                   element URL {escape-uri('http://dmgdev1.esc.rl.ac.uk/cgi-bin/ndgDataAccess?datasetSource=dmgdev1.esc.rl.ac.uk&amp;datasetID=', true())}                             else ($DG/moles:dataModelID/moles:repositoryIdentifier),                                element Description {'The NDG service delivering data via NDG A metadata.'}                         },                         element Related_URL {                                    element URL_Content_Type {'GET DATA > CSML'},                                   if (exists($DG/instance)) then                                      element URL {escape-uri($DG/instance/URI, true())}                                  else if ($DG/moles:dataModelID/moles:repositoryIdentifier='badc.nerc.ac.uk') then                                   element URL {escape-uri('http://dmgdev1.esc.rl.ac.uk/cgi-bin/ndgDataAccess?datasetSource=dmgdev1.esc.rl.ac.uk&amp;datasetID=', true())}                             else (),                                element Description {'The NDG service delivering data via NDG A metadata. Additional tag to be more in line with latest version of GCMD valids'}                            })              else if ($DG/moles:dataModelID/moles:schemeIdentifier='CDML-0') then                            (element Related_URL {                                     element URL_Content_Type {'NDG_A_SERVICE'},                              if (exists($DG/instance)) then                                      element URL {escape-uri($DG/instance/URI, true())}                                  else if ($DG/moles:dataModelID/moles:repositoryIdentifier='badc.nerc.ac.uk') then                                   element URL {escape-uri('http://cdat.badc.nerc.ac.uk/cgi-bin/dxui.py?datasetURI_1=/', true())}                              else (),                                element Description {'The NDG service delivering data via Data extractor. Additional tag to be more in line with latest version of GCMD valids'}                                },                          element Related_URL {                               element URL_Content_Type {'GET DATA > DX'},                             if (exists($DG/instance)) then                                      element URL {escape-uri($DG/instance/URI, true())}                                  else if ($DG/moles:dataModelID/moles:repositoryIdentifier='badc.nerc.ac.uk') then                                   element URL {escape-uri('http://cdat.badc.nerc.ac.uk/cgi-bin/dxui.py?datasetURI_1=/', true())}                              else (),                                element Description {'The NDG service delivering data via Data extractor. Additional tag to be more in line with latest version of GCMD valids'}                                })          else if ($DG/moles:dataModelID/moles:schemeIdentifier='URI') then                           element Related_URL {                           element URL {data($DG/moles:instance/moles:URI)},                               if (exists($DG/moles:instance/moles:instanceComment)) then                                      element Description {data($DG/moles:instance/moles:instanceComment)}                                            else                                    element Description {'URL to aid in delivering data. Note that this may point directly to the data or, more likely, point to the web site of the curator.'}                             }       else (),        for $RelURL_Desc in ($DE/moles:dgMetadataDescription/moles:descriptionSection/moles:descriptionOnlineReference)         return                          if (exists($RelURL_Desc/moles:dgSimpleLink)) then                       element Related_URL {                           element URL {data($RelURL_Desc/moles:dgSimpleLink/URI)},                        element Description {concat(data($RelURL_Desc/dgSimpleLink/moles:name), ' - ', data($RelURL_Desc/dgSimpleLink/moles:notes))}                            }                       else (),    element Metadata_Name {'[CEOS IDN DIF]'},       element Metadata_Version {'9.4'},       if  (exists($DE/moles:dgMetadataProvenance/moles:RecordCreation)) then                  element DIF_Creation_Date {data($DE/moles:dgMetadataProvenance/moles:RecordCreation/moles:CreatedDate)}         else (),        for $MDUpdt in $DE/moles:dgMetadataProvenance/moles:RecordUpdate        return              element DIF_Revision_History {concat(data($MDUpdt/moles:UpdateDate), ' - ', data($MDUpdt/moles:UpdateSummary), ' - ', data($MDUpdt/moles:UpdatedBy))},      if  (exists($DE/moles:dgMetadataProvenance/moles:RecordReview)) then            element Future_DIF_Review_Date {data($DE/moles:dgMetadataProvenance/moles:RecordReview/moles:ReviewDate)}       else ()         } } ) else (    element dummy:container { doc(fn:item-at($i, 1)) } )"; 
     240                                        // Implements revision @2575 of TI07-MOLES/trunk/DIF/XQuery/NDG-DIF.xquery 
     241                                        String xqueryStr = "import module namespace voclib='http://ndg.nerc.ac.uk/xquery/lib/vocab' at 'xmldb:exist:///db/xqueryLib/Vocabs/vocab_xquery_lib.xquery'; import module namespace utillib='http://ndg.nerc.ac.uk/xquery/lib/utilities' at 'xmldb:exist:///db/xqueryLib/Utilities/utility_xquery_lib.xquery'; declare default element namespace 'http://gcmd.gsfc.nasa.gov/Aboutus/xml/dif/'; declare namespace xsi='http://www.w3.org/2001/XMLSchema-instance';  declare namespace moles='http://ndg.nerc.ac.uk/moles'; declare namespace dummy='http://ndg.nerc.ac.uk/dummy';  declare variable $targetCollection as xs:string {'/db/discovery/moles'}; declare variable $repositoryIdentifier as xs:string {'RepositoryID'}; declare variable $localIdentifier as xs:string {'LocalID'}; declare function local:docExists($coll as xs:string, $doc as xs:string) as item()* {      let $testset := collection($coll)//root()       let $matches :=                 for $i in $testset              where util:document-name($i) = $doc             return  document-uri($i)        return $matches };  let $i := local:docExists('/db/discovery/original/"+this.format+"', '"+thisdoc+"') return if ( fn:empty($i) ) then ( for $DE in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[      exists('moles:dgDataEntity')    and moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'  ]       where util:document-name($DE)='"+thisdoc+"' return element dummy:container { element DIF {      attribute xsi:schemaLocation {'http://gcmd.gsfc.nasa.gov/Aboutus/xml/dif/ http://gcmd.gsfc.nasa.gov/Aboutus/xml/dif/dif_v9.4.xsd'},     element Entry_ID {concat($DE/moles:dgMetadataID/moles:repositoryIdentifier, $utillib:moles_id_separator, 'DIF', $utillib:moles_id_separator, $DE/moles:dgMetadataID/moles:localIdentifier)},    element Entry_Title {string($DE/moles:name)},   element Data_Set_Citation {                 for $DataCreatorRole in $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:dgRoleHolder[not(exists(moles:endDate)) or moles:endDate=''][1]          return                      for $DataCreatorRoleHolder in collection($targetCollection)/moles:dgMetadata/(dgOrganisation | dgPerson)[(                         moles:dgMetadataID/moles:localIdentifier=$DataCreatorRole/(moles:dgOrganisationID | moles:dgPersonID)/moles:repositoryIdentifier                                and moles:dgMetadataID/moles:repositoryIdentifier=$DataCreatorRole/(moles:dgOrganisationID | moles:dgPersonID)/moles:localIdentifier)]                   return                              element Dataset_Creator {                           if (exists($DataCreatorRoleHolder/moles:name/moles:initials)) then                                  string(concat(string($DataCreatorRoleHolder/moles:name/moles:initials), ' ', string($DataCreatorRoleHolder/moles:name/moles:familyName)))                           else                               string($DataCreatorRoleHolder/moles:abbreviation)                            },          element Dataset_Title {string($DE/moles:name)}      },      for $StructuredKeyword in ($DE/(moles:dgStructuredKeyword | moles:dgDataEntity/moles:dgDataSummary/moles:dgParameterSummary/moles:dgStdParameterMeasured)[(voclib:spot-vocab($voclib:gcmd_science_valids, moles:dgValidTermID/moles:ParentListID) or voclib:spot-vocab($voclib:gcmd_science_valids_correct, moles:dgValidTermID/moles:ParentListID) or voclib:spot-vocab($voclib:gcmd_science_valids_categories, moles:dgValidTermID/moles:ParentListID))]      )               return if (exists($StructuredKeyword/*/moles:dgValidTerm)) then                     element Parameters {                        element Category {string($StructuredKeyword/*/moles:dgValidTerm)},                      if (exists($StructuredKeyword/*/moles:dgValidSubterm)                           and $StructuredKeyword/*/moles:dgValidSubterm != ''                             and $StructuredKeyword/*/moles:dgValidSubterm != ' ') then                      for $Subterm in $StructuredKeyword//moles:dgValidSubterm[exists(moles:dgValidTerm)]                         where exists($Subterm/moles:dgValidSubterm)                             order by $Subterm/moles:ListLevel                           return                                          if ($Subterm/moles:ListLevel=1) then element Topic {string($Subterm/moles:dgValidSubterm/moles:dgValidTerm)}                                    else if ($Subterm/moles:ListLevel=2) then element Term {string($Subterm/moles:dgValidSubterm/moles:dgValidTerm)}                                        else if ($Subterm/moles:ListLevel=3) then element Variable {string($Subterm/moles:dgValidSubterm/moles:dgValidTerm)}                                    else if ($Subterm/moles:ListLevel=4) then element Detailed_Variable {string($Subterm/moles:dgValidSubterm/moles:dgValidTerm)}                                   else element GCMD_Science_Valid {data($Subterm/moles:dgValidSubterm/moles:dgValidTerm)}                         else()                      }           else(),         for $StructuredKeyword in ($DE/(moles:dgStructuredKeyword | moles:dgDataEntity/moles:dgDataSummary/moles:dgParameterSummary/moles:dgStdParameterMeasured)[voclib:spot-vocab($voclib:gcmd_science_valids, moles:dgValidTermID/moles:ParentListID) or voclib:spot-vocab($voclib:gcmd_science_valids_correct, moles:dgValidTermID/moles:ParentListID) or voclib:spot-vocab($voclib:gcmd_science_valids_deprecated, moles:dgValidTermID/moles:ParentListID) and (not(exists(moles:ListLevel)) or moles:ListLevel=0)])       return          element Parameters {data($StructuredKeyword/moles:dgValidTerm)},        for $ISOTopicCategory in ($DE/moles:dgStructuredKeyword[voclib:spot-vocab($voclib:iso_topic_list, moles:dgValidTermID/moles:ParentListID)])         return              element ISO_Topic_Category {string($ISOTopicCategory/moles:dgValidTerm)},       for $Keyword in distinct-values($DE/moles:dgStructuredKeyword[  not (voclib:spot-vocab($voclib:iso_topic_list, moles:dgValidTermID/moles:ParentListID)  or voclib:spot-vocab($voclib:gcmd_science_valids, moles:dgValidTermID/moles:ParentListID)       or voclib:spot-vocab($voclib:gcmd_science_valids_correct, moles:dgValidTermID/moles:ParentListID)       or voclib:spot-vocab($voclib:iso_topic_list, moles:dgValidTermID/moles:ParentListID)    )]/moles:dgValidTerm)   return element Keyword {string($Keyword)},      for $DepDPTRepository in distinct-values($DE/moles:dgDataEntity/moles:RelatedDeployment/moles:DataProductionToolID/moles:repositoryIdentifier)          for $DepDPTLocal in distinct-values($DE/moles:dgDataEntity/moles:RelatedDeployment/moles:DataProductionToolID[moles:repositoryIdentifier=$DepDPTRepository]/moles:localIdentifier)      let $DepDPTRecord := collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[moles:dgMetadataID[moles:schemeIdentifier='NDG-B0' and moles:repositoryIdentifier=$DepDPTRepository  and moles:localIdentifier=$DepDPTLocal]]                    return                          element Sensor_Name {                   element Short_Name {data($DepDPTRecord/moles:abbreviation)},                    element Long_Name {data($DepDPTRecord/moles:name)}          },      for $DepObsStnRepository in distinct-values($DE/moles:dgDataEntity/moles:RelatedDeployment/moles:ObservationStationID/moles:repositoryIdentifier)       for $DepObsStnLocal in distinct-values(($DE/moles:dgDataEntity/moles:RelatedDeployment/moles:ObservationStationID[moles:repositoryIdentifier=$DepObsStnRepository]/moles:localIdentifier))      let $DepObsStnRecord := collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[moles:dgMetadataID[moles:repositoryIdentifier=$DepObsStnRepository  and moles:localIdentifier=$DepObsStnLocal]]               return element Source_Name {                    element Short_Name {data($DepObsStnRecord/moles:abbreviation)},                 element Long_Name {data($DepObsStnRecord/moles:name)}               },      for $TemporalRange in $DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDataCoverage/(moles:dgTemporalCoverage | moles:dgSpatioTemporalCoverage/moles:dgSpatioTemporalRange/moles:dgTemporalCoverage)/moles:DateRange          return                      element Temporal_Coverage                   {                       element Start_Date {data($TemporalRange/moles:DateRangeStart)},                         element End_Date {data($TemporalRange/moles:DateRangeEnd)}                      },      for $TemporalTerm in $DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDataCoverage/(moles:dgTemporalCoverage | moles:dgSpatioTemporalCoverage/moles:dgSpatioTemporalRange/moles:dgTemporalCoverage)/moles:dgChronostratigraphicTerm[voclib:spot-vocab($voclib:gcmd_chronostratigraphic_valids, moles:dgValidTermID/moles:ParentListID)]/moles:dgValidTerm             return element Paleo_Temporal_Coverage {element Chronostratigraphic_Unit {data($TemporalTerm)}},        for $Data_Set_Progress in ($DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDataStatus/moles:dgDatasetClosure)                return element Data_Set_Progress {data($Data_Set_Progress)},    for $BoundingBox in $DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDataCoverage/(moles:dgSpatialCoverage | moles:dgSpatioTemporalCoverage/moles:dgSpatioTemporalRange/moles:dgSpatialCoverage)/moles:BoundingBox    return              element Spatial_Coverage {              element Southernmost_Latitude {data($BoundingBox/moles:LimitSouth)},                    element Northernmost_Latitude {data($BoundingBox/moles:LimitNorth)},                    element Westernmost_Longitude {data($BoundingBox/moles:LimitWest)},                     element Easternmost_Longitude {data($BoundingBox/moles:LimitEast)}          },      for $Location in ($DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDataCoverage/(moles:dgSpatialCoverage | moles:dgSpatioTemporalCoverage/moles:dgSpatioTemporalRange/moles:dgSpatialCoverage)/moles:dgArea[voclib:spot-vocab($voclib:gcmd_location_valids, moles:dgValidTermID/moles:ParentListID)])                 return element Location {data($Location/moles:dgValidTerm)},    for $DepActRepository in distinct-values($DE/moles:dgDataEntity/moles:RelatedDeployment/moles:ActivityID/moles:repositoryIdentifer)     for $DepActLocal in  distinct-values($DE/moles:dgDataEntity/moles:RelatedDeployment/moles:ActivityID[moles:repositoryIdentifer=$DepActRepository]/moles:localIdentifer)         let $DepActRecord := collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[moles:dgMetadataID[moles:repositoryIdentifier=$DepActRepository and moles:localIdentifier=$DepActLocal]]     return              element Project {                   element Short_Name {data($DepActRecord/abbreviation)},                  element Long_Name {data($DepActRecord/name)}            },      if (exists($DE/moles:dgDataEntity/moles:dgDataGranule/moles:accessControlPolicy)) then                  for $DG in $DE/moles:dgDataEntity/moles:dgDataGranule               return                                      element Access_Constraints {                            if (exists($DG/moles:dgGranuleSummary/moles:dgGranuleName)) then                                    concat('For data granule ', $DG/moles:dgGranuleSummary/moles:dgGranuleName, ': ')                           else (),                                if (exists($DG/moles:accessControlPolicy/moles:accessControlPolicyURL)) then                                concat('See access control policy at ', escape-uri($DG/moles:accessControlPolicy/moles:accessControlPolicyURL, true()))                             else if (exists($DG/moles:accessControlPolicy/moles:accessControlPolicyText)) then                                  data($DG/moles:accessControlPolicy/moles:accessControlPolicyText)                            else                                for $securityCondition in $DG/moles:accessControlPolicy/moles:dgSecurityCondition                               return                                      if (exists($securityCondition/moles:conditionExplanationText)) then                                         concat('Effect: ', data($securityCondition/moles:effect), ' - ', data($securityCondition/moles:conditionExplanationText))                                   else concat('Effect: ', data($securityCondition/moles:effect), 'needs ', data($securityCondition/moles:attauthRole), ' from ', data($securityCondition/moles:dgAttributeAuthority))                        }                 else (),  if (exists($DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:dgRoleHolder)) then               for $DataCreatorRole in $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:dgRoleHolder                     order by $DataCreatorRole/moles:startDate empty least                           return                              for $DataCreatorRoleHolder in collection($targetCollection)/moles:dgMetadata/(moles:dgOrganisation | moles:dgPerson)                                                    [(moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'                                                    and moles:dgMetadataID/moles:repositoryIdentifier=$DataCreatorRole/*/moles:repositoryIdentifier                                                 and moles:dgMetadataID/moles:localIdentifier=$DataCreatorRole/*/moles:localIdentifier)]                                 return                                          element Originating_Center {                                    if (string(local-name($DataCreatorRoleHolder))='dgOrganisation') then                                           (string($DataCreatorRoleHolder/moles:name))                                     else if (string(local-name($DataCreatorRoleHolder))='dgPerson') then                                            (string(concat(string($DataCreatorRoleHolder/moles:name/moles:initials), ' ', string($DataCreatorRoleHolder/moles:name/moles:familyName))))                                     else ('empty content')                          }       else (),        for $DataCuratorRole in $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:dgRoleHolder         [not(exists(moles:endDate)) or moles:endDate='']        return          for $DataCuratorRoleHolder in collection($targetCollection)/moles:dgMetadata/(moles:dgOrganisation | moles:dgPerson)    [(moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'    and moles:dgMetadataID/moles:repositoryIdentifier=$DataCuratorRole/*/moles:repositoryIdentifier         and moles:dgMetadataID/moles:localIdentifier=$DataCuratorRole/*/moles:localIdentifier)]         return          element Data_Center {   element Data_Center_Name {      element Short_Name {    if (exists($DataCuratorRoleHolder/moles:name/moles:initials)) then      string(concat(string($DataCuratorRoleHolder/moles:name/moles:initials), ' ', string($DataCuratorRoleHolder/moles:name/moles:familyName)))       else    string($DataCuratorRoleHolder/moles:abbreviation)       },      element Long_Name {     if (exists($DataCuratorRoleHolder/moles:name/moles:initials)) then      string(concat(string($DataCuratorRoleHolder/moles:name/moles:initials), ' ', string($DataCuratorRoleHolder/moles:name/moles:familyName)))       else string($DataCuratorRoleHolder/moles:name)  }       },      if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:URI)) then         element Data_Center_URL {data($DataCuratorRoleHolder/moles:contactDetails/moles:URI)}   else (),        for $DGID in $DE/moles:dgDataEntity/moles:dgDataGranule/moles:dataModelID       return          element Data_Set_ID {concat($DGID/moles:repositoryIdentifier, $utillib:moles_id_separator, $DGID/moles:schemeIdentifier, $utillib:moles_id_separator, $DGID/moles:localIdentifier)},    element  Personnel {    element Role {'Data Center Contact'},   if (exists($DataCuratorRoleHolder/name/knownAs)) then   element First_Name {string($DataCuratorRoleHolder/moles:name/moles:knownAs)}    else if (exists($DataCuratorRoleHolder/moles:name/moles:initials)) then         element First_Name {string($DataCuratorRoleHolder/moles:name/moles:initials)}   else (),                                                element Last_Name {     if (exists($DataCuratorRoleHolder/moles:name/moles:familyName)) then    string($DataCuratorRoleHolder/moles:name/moles:familyName)      else string($DataCuratorRoleHolder/moles:name)  },      if (exists($DataCuratorRole/moles:contactDetails/moles:eMail)) then     element Email {string($DataCuratorRole/moles:contactDetails/moles:eMail)}       else    if (exists($DataCuratorRoleHolder/contactDetails/eMail)) then   (element Email {string($DataCuratorRoleHolder/moles:contactDetails/moles:eMail)})       else (),        if (exists($DataCuratorRole/moles:contactDetails/moles:telephone)) then         element Phone {string($DataCuratorRole/moles:contactDetails/moles:telephone)}   else if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:telephone)) then      element Phone {string($DataCuratorRoleHolder/moles:contactDetails/moles:telephone)}     else (),        if (exists($DataCuratorRole/moles:contactDetails/moles:fax)) then       element Fax {string($DataCuratorRole/moles:contactDetails/moles:fax)}   else if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:fax)) then    element Fax {string($DataCuratorRoleHolder/moles:contactDetails/moles:fax)}     else (),        if (exists($DataCuratorRole/moles:contactDetails/moles:address)) then   element Contact_Address {       for $addressline in $DataCuratorRole/moles:contactDetails/moles:address/moles:addressline       return element Address {data($addressline)},    if (exists($DataCuratorRole/moles:contactDetails/moles:address/moles:city)) then        element City {string($DataCuratorRole/moles:contactDetails/moles:address/moles:city)}   else (),        if (exists($DataCuratorRole/moles:contactDetails/moles:address/moles:postcode)) then    element Postal_Code {string($DataCuratorRole/moles:contactDetails/moles:address/moles:postcode)}        else (),        if (exists($DataCuratorRole/moles:contactDetails/moles:address/moles:country)) then     element Country {string($DataCuratorRole/moles:contactDetails/moles:address/moles:country)}     else ()         }       else if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:address)) then        element Contact_Address {       for $addressline in $DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:addressline         return element Address {data($addressline)},    if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:city)) then          element City {string($DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:city)}     else (),        if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:postcode)) then      element Postal_Code {string($DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:postcode)}  else (),        if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:country)) then       element Country {string($DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:country)}       else ()         }       else ()         }       },      element Summary {string($DE/moles:dgMetadataDescription/moles:abstract/moles:abstractText)},    for $DG in $DE/moles:dgDataEntity/moles:dgDataGranule       return              if ($DG/moles:dataModelID/moles:schemeIdentifier='NDG-A0') then                             (element Related_URL {                                  element URL_Content_Type {'NDG_A_SERVICE'},                             if (exists($DG/instance/URI)) then                                  element URL {escape-uri($DG/instance/URI, true())}                                  else if ($DG/moles:dataModelID/moles:repositoryIdentifier='badc.nerc.ac.uk') then                                   element URL {escape-uri('http://dmgdev1.esc.rl.ac.uk/cgi-bin/ndgDataAccess?datasetSource=dmgdev1.esc.rl.ac.uk&amp;datasetID=', true())}                             else ($DG/moles:dataModelID/moles:repositoryIdentifier),                                element Description {'The NDG service delivering data via NDG A metadata.'}                         },                         element Related_URL {                                    element URL_Content_Type {'GET DATA > CSML'},                                   if (exists($DG/instance)) then                                      element URL {escape-uri($DG/instance/URI, true())}                                  else if ($DG/moles:dataModelID/moles:repositoryIdentifier='badc.nerc.ac.uk') then                                   element URL {escape-uri('http://dmgdev1.esc.rl.ac.uk/cgi-bin/ndgDataAccess?datasetSource=dmgdev1.esc.rl.ac.uk&amp;datasetID=', true())}                             else (),                                element Description {'The NDG service delivering data via NDG A metadata. Additional tag to be more in line with latest version of GCMD valids'}                            })              else if ($DG/moles:dataModelID/moles:schemeIdentifier='CDML-0') then                            (element Related_URL {                                     element URL_Content_Type {'NDG_A_SERVICE'},                              if (exists($DG/instance)) then                                      element URL {escape-uri($DG/instance/URI, true())}                                  else if ($DG/moles:dataModelID/moles:repositoryIdentifier='badc.nerc.ac.uk') then                                   element URL {escape-uri('http://cdat.badc.nerc.ac.uk/cgi-bin/dxui.py?datasetURI_1=/', true())}                              else (),                                element Description {'The NDG service delivering data via Data extractor. Additional tag to be more in line with latest version of GCMD valids'}                                },                          element Related_URL {                               element URL_Content_Type {'GET DATA > DX'},                             if (exists($DG/instance)) then                                      element URL {escape-uri($DG/instance/URI, true())}                                  else if ($DG/moles:dataModelID/moles:repositoryIdentifier='badc.nerc.ac.uk') then                                   element URL {escape-uri('http://cdat.badc.nerc.ac.uk/cgi-bin/dxui.py?datasetURI_1=/', true())}                              else (),                                element Description {'The NDG service delivering data via Data extractor. Additional tag to be more in line with latest version of GCMD valids'}                                })          else if ($DG/moles:dataModelID/moles:schemeIdentifier='URI') then                           element Related_URL {                           element URL {data($DG/moles:instance/moles:URI)},                               if (exists($DG/moles:instance/moles:instanceComment)) then                                      element Description {data($DG/moles:instance/moles:instanceComment)}                                            else                                    element Description {'URL to aid in delivering data. Note that this may point directly to the data or, more likely, point to the web site of the curator.'}                             }       else (),        for $RelURL_Desc in ($DE/moles:dgMetadataDescription/moles:descriptionSection/moles:descriptionOnlineReference)         return                          if (exists($RelURL_Desc/moles:dgSimpleLink)) then                       element Related_URL {                           element URL {data($RelURL_Desc/moles:dgSimpleLink/URI)},                        element Description {concat(data($RelURL_Desc/dgSimpleLink/moles:name), ' - ', data($RelURL_Desc/dgSimpleLink/moles:notes))}                            }                       else (),    element Metadata_Name {'[CEOS IDN DIF]'},       element Metadata_Version {'9.4'},       if  (exists($DE/moles:dgMetadataProvenance/moles:RecordCreation)) then                  element DIF_Creation_Date {data($DE/moles:dgMetadataProvenance/moles:RecordCreation/moles:CreatedDate)}         else (),        for $MDUpdt in $DE/moles:dgMetadataProvenance/moles:RecordUpdate        return              element DIF_Revision_History {concat(data($MDUpdt/moles:UpdateDate), ' - ', data($MDUpdt/moles:UpdateSummary), ' - ', data($MDUpdt/moles:UpdatedBy))},      if  (exists($DE/moles:dgMetadataProvenance/moles:RecordReview)) then            element Future_DIF_Review_Date {data($DE/moles:dgMetadataProvenance/moles:RecordReview/moles:ReviewDate)}       else ()         } } ) else (    element dummy:container { doc(fn:item-at($i, 1)) } )"; 
    242242                                        queryParams.addElement( xqueryStr.getBytes("UTF-8") );  
    243243                                        queryParams.addElement( 1 ); 
Note: See TracChangeset for help on using the changeset viewer.