Ignore:
Timestamp:
07/03/07 14:25:05 (13 years ago)
Author:
ko23
Message:

Java D-constructors updated - slow DIF

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI07-MOLES/trunk/JavaCode/bulkdestubbxmldb/ndg/services/bulkdestubb/Main.java

    r2012 r2241  
    4848        static String MOLESQuery = "declare default element namespace 'http://ndg.nerc.ac.uk/moles';for $Moles in collection('/db/ndg_B_metadata')/dgMetadata/dgMetadataRecord[dgMetadataID/schemeIdentifier='NDG-B0' and dgMetadataID/repositoryIdentifier='RepositoryID' and dgMetadataID/localIdentifier='LocalID'] return $Moles"; 
    4949        static String DublinCoreDEQuery = "declare default element namespace 'http://ndg.nerc.ac.uk/moles'; declare namespace dc='http://purl.org/dc/elements/1.1/'; declare namespace oai_dc='http://www.openarchives.org/OAI/2.0/oai_dc'; declare variable $gcmd_science_valids as xs:string {'http://gcmd.gsfc.nasa.gov/Resources/valids/gcmd_parameters.html'}; declare variable $gcmd_project_valids as xs:string {'http://gcmd.gsfc.nasa.gov/Resources/valids/projects.html'}; declare variable $cf_standard_names as xs:string {'http://www.cgd.ucar.edu/cms/eaton/cf-metadata/standard_name.html'}; declare variable $iso_topic_list as xs:string {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_TopicCategoryCode'}; for $DE in collection('/db/ndg_B_metadata')/dgMetadata/dgMetadataRecord[dgDataEntity!='' and dgMetadataID/schemeIdentifier='NDG-B0' and dgMetadataID/repositoryIdentifier='RepositoryID' and dgMetadataID/localIdentifier='LocalID'] return <oai_dc:dc xmlns:oai_dc='http://www.openarchives.org/OAI/2.0/oai_dc/' xmlns:dc='http://purl.org/dc/elements/1.1/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 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, ':DC:', $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) descending return xs:dateTime($updatedate[1]) else string($DE/(dgMetadataProvenance | DataProvenance)/RecordCreation/CreatedDate) }, for $StructuredKeyword in distinct-values($DE/dgStructuredKeyword [dgValidTermID/ParentListID=$cf_standard_names or dgValidTermID/ParentListID=$gcmd_science_valids or dgValidTermID/ParentListID=$gcmd_project_valids or dgValidTermID/ParentListID=$iso_topic_list ]//dgValidTerm) order by $StructuredKeyword return element dc:subject {string($StructuredKeyword)}, for $StructuredKeyword1 in distinct-values($DE/dgDataEntity/dgDataSummary/dgParameterSummary/dgStdParameterMeasured[dgValidTermID/ParentListID=$cf_standard_names or dgValidTermID/ParentListID=$gcmd_science_valids or dgValidTermID/ParentListID=$gcmd_project_valids]//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('/db/ndg_B_metadata')/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('/db/ndg_B_metadata')/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>"; 
    50         static String DIFQuery = "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 f='http://ndg.nerc.ac.uk/moles/localfunctions';for $DE in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[exists('moles:dgDataEntity')  and moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'  and moles:dgMetadataID/moles:repositoryIdentifier='RepositoryID'  and moles:dgMetadataID/moles:localIdentifier='LocalID'] return 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, ':DIF:', $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('/db/ndg_B_metadata')/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 Data_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)[moles:dgValidTermID/moles:ParentListID='http://gcmd.gsfc.nasa.gov/Resources/valids/gcmd_parameters.html' and moles:ListLevel = 0]) 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 $ISOTopicCategory in ($DE/moles:dgStructuredKeyword[moles:dgValidTermID/moles:ParentListID='http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_TopicCategoryCode']) return  element ISO_Topic_Category {string($ISOTopicCategory/moles:dgValidTerm)},for $Keyword in distinct-values($DE//moles:dgStructuredKeyword[ moles:dgValidTermID/moles:ParentListID!='http://gcmd.gsfc.nasa.gov/Resources/valids/gcmd_parameters.html'  and  moles:dgValidTermID/moles:ParentListID!='http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_TopicCategoryCode'  ]/moles:dgValidTerm) return element Keyword {string($Keyword)},  for $DepDPT in ($DE/moles:dgDataEntity/moles:RelatedDeployment/moles:DataProductionToolID)  return  element Sensor_Name {for $DepDPTAbbrev in distinct-values((collection('/db/ndg_B_metadata')/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 distinct-values((collection('/db/ndg_B_metadata')/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 distinct-values((collection('/db/ndg_B_metadata')/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 distinct-values((collection('/db/ndg_B_metadata')/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/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[moles:dgValidTermID/moles:ParentListID='http://gcmd.gsfc.nasa.gov/Resources/valids/gcmd_locations.html']) return element Location {$Location},  for $DepAct in ($DE/moles:dgDataEntity/moles:RelatedDeployment/moles:ActivityID) return  element Project {for $DepActAbbrev in distinct-values(collection('/db/ndg_B_metadata')/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 distinct-values(collection('/db/ndg_B_metadata')/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('/db/ndg_B_metadata')/moles:dgMetadata/(moles:dgOrganisation | moles:dgPerson) [(moles:dgMetadataID/moles:schemeIdentifier='NDG-B0' and moles:dgMetadataID/moles:repositoryIdentifier=$DataCreatorRole/(moles:dgOrganisationID | moles:dgPersonID)/moles:repositoryIdentifier and moles:dgMetadataID/moles:localIdentifier=$DataCreatorRole/(moles:dgOrganisationID | moles:dgPersonID)/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('/db/ndg_B_metadata')/moles:dgMetadata/*[(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, ':', $DGID/moles:schemeIdentifier, ':', $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($DataCuratorRole/moles:contactDetails/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)},element Related_URL {element URL_Content_Type {'NDG_B_SERVICE'},element URL {data($DE/moles:dgMetadataID/moles:repositoryIdentifier)},element Description {'The NDG service for browsing metadata.'}},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 element Related_URL {element URL {data($RelURL_Desc)},element Description {concat(data($RelURL_Desc/moles:name), ' - ', data($RelURL_Desc/moles:notes))} },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 ()}"; 
     50        static String DIFQuery = "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 variable $targetCollection as xs:string {'TargetCollection'};declare variable $repositoryIdentifier as xs:string {'RepositoryID'};declare variable $localIdentifier as xs:string {'LocalID'};for $DE in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[exists('moles:dgDataEntity') and moles:dgMetadataID/moles:schemeIdentifier='NDG-B0' and moles:dgMetadataID/moles:repositoryIdentifier=$repositoryIdentifier and moles:dgMetadataID/moles:localIdentifier=$localIdentifier] return 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 Data_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))]) 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 {$Location},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:dgOrganisationID | moles:dgPersonID)/moles:repositoryIdentifier and moles:dgMetadataID/moles:localIdentifier=$DataCreatorRole/(moles:dgOrganisationID | moles:dgPersonID)/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: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, '__', $DGID/moles:schemeIdentifier, '__', $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($DataCuratorRole/moles:contactDetails/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)},element Related_URL { element URL_Content_Type {'NDG_B_SERVICE'},element URL {data($DE/moles:dgMetadataID/moles:repositoryIdentifier)},element Description {'The NDG service for browsing metadata.'} },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 element Related_URL { element URL {data($RelURL_Desc)},element Description {concat(data($RelURL_Desc/moles:name), ' - ', data($RelURL_Desc/moles:notes))} },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 ()}"; 
    5151        static String ISO19139Query = "declare default element namespace 'http://www.isotc211.org/2005/gmd'; declare namespace moles='http://ndg.nerc.ac.uk/moles'; declare namespace gco='http://www.isotc211.org/2005/gco'; declare namespace gmd='http://www.isotc211.org/2005/gmd'; declare namespace gml='http://www.opengis.net/gml'; declare namespace xlink='http://www.w3.org/1999/xlink'; declare namespace xsi='http://www.w3.org/2001/XMLSchema-instance'; declare namespace f='http://ndg.nerc.ac.uk/moles/localfunctions'; for $DE in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[ exists(moles:dgDataEntity) and moles:dgMetadataID/moles:schemeIdentifier='NDG-B0' and moles:dgMetadataID/moles:repositoryIdentifier='RepositoryID' and moles:dgMetadataID/moles:localIdentifier='LocalID'] return element MD_Metadata {attribute xsi:schemaLocation {'http://www.isotc211.org/2005/gmd http://www.isotc211.org/2005/gmd/metadataEntity.xsd'}, element fileIdentifier {element gco:CharacterString {concat($DE/moles:dgMetadataID/moles:repositoryIdentifier, ':ISO19115:', $DE/moles:dgMetadataID/moles:localIdentifier)}}, element language {element gmd:LanguageCode {attribute codeList {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#LanguageCode'}, attribute codeListValue {'eng'}, 'English'}}, element hierarchyLevel {element MD_ScopeCode {attribute codeList {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_ScopeCode'}, attribute codeListValue {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_ScopeCode_dataset'}, 'dataset'}}, for $parent in $DE/moles:dgRelatedDataEntity[moles:RelationID/moles:dgValidTerm='is-part-of'] return element parentIdentifier {element gco:CharacterString {concat($DE/moles:dgMetadataID/moles:repositoryIdentifier, ':', $DE/moles:dgMetadataID/moles:localIdentifier, ':', $DE/moles:dgMetadataID/moles:localIdentifier)}}, for $DataCuratorRole in $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:dgRoleHolder[not(exists(moles:endDate)) or moles:endDate=''] return for $DataCuratorRoleHolder in collection('/db/ndg_B_metadata')/moles:dgMetadata/(moles:dgPerson | moles:dgOrganisation)[ moles:dgMetadataID/moles:schemeIdentifier='NDG-B0' and moles:dgMetadataID/moles:repositoryIdentifier=$DataCuratorRole/(moles:dgPersonID | moles:dgOrganisationID)/moles:repositoryIdentifier and moles:dgMetadataID/moles:localIdentifier=$DataCuratorRole/(moles:dgPersonID | moles:dgOrganisationID)/moles:localIdentifier] return element contact {element CI_ResponsibleParty {if (string(local-name($DataCuratorRoleHolder))='dgOrganisation') then element organisationName {element gco:CharacterString {string($DataCuratorRoleHolder/moles:name)}}else if (string(local-name($DataCuratorRoleHolder))='dgPerson') then element individualName {element gco:CharacterString {string(concat(string($DataCuratorRoleHolder/moles:name/moles:initials), ' ', string($DataCuratorRoleHolder/moles:name/moles:familyName)))}}else ('empty content') , element positionName {if (exists($DataCuratorRoleHolder/moles:localName)) then element gco:CharacterString {$DataCuratorRoleHolder/moles:localName}else if (exists($DataCuratorRole/moles:roleName)) then element gco:CharacterString {$DataCuratorRole/moles:roleName}else element gco:CharacterString {'Curator'}}, element contactInfo {element gmd:CI_Contact {if (exists($DataCuratorRole/moles:contactDetails/moles:telephone or $DataCuratorRole/moles:contactDetails/moles:fax or $DataCuratorRoleHolder/moles:contactDetails/moles:telephone or $DataCuratorRoleHolder/moles:contactDetails/moles:fax)) then element phone {element gmd:CI_Telephone {if (exists($DataCuratorRole/moles:contactDetails/moles:telephone)) then element voice {element gco:CharacterString {data($DataCuratorRole/moles:contactDetails/moles:telephone)}}else if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:telephone)) then element voice {element gco:CharacterString {data($DataCuratorRoleHolder/moles:contactDetails/moles:telephone)}}else (), if (exists($DataCuratorRole/moles:contactDetails/moles:fax)) then element facsimile {element gco:CharacterString {data($DataCuratorRoleHolder/moles:contactDetails/moles:fax)}}else if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:telephone)) then element facsimile {element gco:CharacterString {data($DataCuratorRoleHolder/moles:contactDetails/moles:fax)}}else () }} else (), element address {element gmd:CI_Address {if (exists($DataCuratorRole/moles:contactDetails/moles:address/moles:addressline)) then for $addressline in $DataCuratorRole/moles:contactDetails/moles:address/moles:addressline return element deliveryPoint {element gco:CharacterString {data($addressline)}}else if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:addressline)) then for $addressline in $DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:addressline return element deliveryPoint {element gco:CharacterString {data($addressline)}}else (), if (exists($DataCuratorRole/moles:contactDetails/moles:address/moles:city)) then element city {element gco:CharacterString {data($DataCuratorRole/moles:contactDetails/moles:address/moles:city)}}else if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:city)) then element city {element gco:CharacterString {data($DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:city)}}else (), if (exists($DataCuratorRole/moles:contactDetails/moles:eMail)) then element electronicMailAddress {element gco:CharacterString {data($DataCuratorRole/moles:contactDetails/moles:eMail)}}else if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:postcode)) then element electronicMailAddress {element gco:CharacterString {data($DataCuratorRoleHolder/moles:contactDetails/moles:eMail)}}else () }}}}, element role {element CI_RoleCode {attribute codeList {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode'}, attribute codeListValue {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode_custodian'}, if (exists($DataCuratorRole/moles:localName)) then data($DataCuratorRole/moles:localName) else if (exists($DataCuratorRoleHolder/moles:localName)) then data($DataCuratorRoleHolder/moles:localName) else 'Curator' }}}}, element dateStamp {element gco:Date {adjust-date-to-timezone(current-date())}}, element metadataStandardName {element gco:CharacterString {'ISO 19115:2003'}}, element metadataStandardVersion {element gco:CharacterString {'2003'}}, element identificationInfo {element gmd:MD_DataIdentification {element citation {element gmd:CI_Citation {element title {element gco:CharacterString {data($DE/moles:name)}}, if (exists($DE/moles:abbreviation) and not(empty($DE/moles:abbreviation))) then element alternateTitle {element gco:CharacterString {data($DE/moles:abbreviation)}}else (), element date {if (exists($DE/(moles:DataProvenance | moles:dgMetadataProvenance)/moles:RecordCreation/moles:CreatedDate)) then element gmd:CI_Date {element date {element gco:Date {adjust-date-to-timezone(data($DE/(moles:DataProvenance | moles:dgMetadataProvenance)/moles:RecordCreation/moles:CreatedDate))}}, element dateType {element CI_DateTypeCode {attribute codeList {'http://www.isotc211.org/2005/resources/Codelist/moles:gmxCodelists.xml#CI_DateTypeCode'}, attribute codeListValue {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_DateTypeCode_creation' }, 'Creation'}}}else attribute gco:nilReason {'unknown'}}}}, element abstract {element gco:CharacterString {data($DE/moles:dgMetadataDescription/moles:abstract/moles:abstractText)}}, element language {element gmd:LanguageCode {attribute codeList {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#LanguageCode'}, attribute codeListValue {'eng'}, 'English' }}, for $ISOTopicCategory in ($DE/moles:dgStructuredKeyword[dgValidTermID/moles:ParentListID='http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_TopicCategoryCode']) return element topicCategory {element gmd:MD_TopicCategoryCode {attribute codeList {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_TopicCategoryCode'}, attribute codeListValue {string($ISOTopicCategory/moles:dgValidTerm)}, string($ISOTopicCategory/moles:dgValidTerm)}}, if (exists($DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDataCoverage)) then element extent {element gmd:EX_Extent {(: add bounding boxes:) for $geoBBox in $DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDataCoverage//moles:BoundingBox return element geographicElement {element EX_GeographicBoundingBox {element westBoundLongitude {element gco:Decimal {data($geoBBox/moles:LimitWest)}}, element eastBoundLongitude {element gco:Decimal {data($geoBBox/moles:LimitEast)}}, element southBoundLatitude {element gco:Decimal {data($geoBBox/moles:LimitSouth)}}, element northBoundLatitude {element gco:Decimal {data($geoBBox/moles:LimitNorth)}}}}, for $geoArea in $DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDataCoverage//moles:dgArea return element geographicElement {element EX_GeographicDescription {element geographicIdentifier {element gmd:RS_Identifier {element gco:CharacterString {element code {data(dgArea/dgValidTerm)}}, element gco:CharacterString {element codeSpace {data(dgArea/dgValidTermID/ParentListID)}}}}}}}}else()}}}"; 
    5252 
    53         static String ListDEQuery = "declare default element namespace 'http://ndg.nerc.ac.uk/moles';for $DE in collection('/db/ndg_B_metadata')/dgMetadata/dgMetadataRecord[exists(dgDataEntity)] return <dgMetadataRecord>{$DE/dgMetadataID/repositoryIdentifier}{$DE/dgMetadataID/localIdentifier}<fileName>{util:document-name($DE)}</fileName></dgMetadataRecord>"; 
    54         static String ListMOLESQuery = "declare default element namespace 'http://ndg.nerc.ac.uk/moles';for $DE in collection('/db/ndg_B_metadata')/dgMetadata/dgMetadataRecord return <dgMetadataRecord>{$DE/dgMetadataID/repositoryIdentifier}{$DE/dgMetadataID/localIdentifier}<fileName>{util:document-name($DE)}</fileName></dgMetadataRecord>"; 
     53        static String ListDEQuery = "declare default element namespace 'http://ndg.nerc.ac.uk/moles';declare variable $targetCollection as xs:string {'TargetCollection'};for $DE in collection($targetCollection)/dgMetadata/dgMetadataRecord[exists(dgDataEntity)] return <dgMetadataRecord>{$DE/dgMetadataID/repositoryIdentifier}{$DE/dgMetadataID/localIdentifier}<fileName>{util:document-name($DE)}</fileName></dgMetadataRecord>"; 
     54        static String ListMOLESQuery = "declare default element namespace 'http://ndg.nerc.ac.uk/moles';declare variable $targetCollection as xs:string {'TargetCollection'};for $DE in collection($targetCollection)/dgMetadata/dgMetadataRecord return <dgMetadataRecord>{$DE/dgMetadataID/repositoryIdentifier}{$DE/dgMetadataID/localIdentifier}<fileName>{util:document-name($DE)}</fileName></dgMetadataRecord>"; 
    5555        static String test = "declare default element namespace 'http://ndg.nerc.ac.uk/moles';for $DE in collection('/db/ndg_B_metadata')/dgMetadata/dgMetadataRecord[dgDataEntity!='' and dgMetadataID[schemeIdentifier='NDG-B0' and repositoryIdentifier='RepositoryID' and localIdentifier='LocalID']] return <empty/>"; 
    5656        static String RawDEMoles = "declare default element namespace 'http://ndg.nerc.ac.uk/moles';for $DE in collection('/db/ndg_B_metadata')/dgMetadata/dgMetadataRecord[dgDataEntity!='' and dgMetadataID[schemeIdentifier='NDG-B0' and repositoryIdentifier='RepositoryID' and localIdentifier='LocalID']] return $DE"; 
     
    188188                xquery = ListDEQuery;  
    189189                // Point at collection 
    190                 xquery = xquery.replaceAll("/db/ndg_B_metadata", targetCollection); 
     190                xquery = xquery.replaceFirst("TargetCollection", targetCollection); 
    191191 
    192192                if (debug) { 
     
    322322                                        xquery = xquery.replaceFirst("RepositoryID", repositoryID); 
    323323                                        xquery = xquery.replaceFirst("LocalID", localID); 
    324                                         xquery = xquery.replaceAll("/db/ndg_B_metadata", targetCollection); 
     324                                        xquery = xquery.replaceFirst("TargetCollection", targetCollection); 
    325325                                        if (trace) {System.out.println("Set " + outputType + " query");} 
    326326                                        if (debug){System.out.println(xquery);} 
Note: See TracChangeset for help on using the changeset viewer.