Ignore:
Timestamp:
14/11/06 09:58:53 (13 years ago)
Author:
ko23
Message:

Namespaced versions

Location:
TI07-MOLES/trunk/JavaCode/bulkdestubbxmldb
Files:
1 added
1 deleted
4 edited

Legend:

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

    r1547 r1695  
    3939    static String DefaultUserPW = "guest"; 
    4040 
    41         static String ListDEQuery = "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>"; 
    42         static String StubBDEQuery = "for $DE in collection('/db/ndg_B_metadata')/dgMetadata/dgMetadataRecord[exists('dgDataEntity') and dgMetadataID[schemeIdentifier='NDG-B0' and repositoryIdentifier='RepositoryID' and localIdentifier='LocalID']] return <dgMetadataRecord> <dgMetadataID> <schemeIdentifier>NDG-B1</schemeIdentifier> {$DE/dgMetadataID/repositoryIdentifier} {$DE/dgMetadataID/localIdentifier} </dgMetadataID> {$DE/dgMetadataDescription} {$DE/name} {$DE/abbreviation} <dgDataEntity> {$DE/dgDataEntity/dgDataSetType} {$DE/dgDataEntity/dgDataObjectType} {$DE/dgDataEntity/dgDataGranule} {$DE/dgDataEntity/dgDataSummary} <dgDataRoles> {if (exists($DE/dgDataEntity/dgDataRoles/dgDataCreator/dgMetadataID)) then ( <dgDataCreator> {$DE/dgDataEntity/dgDataRoles/dgDataCreator/dgMetadataID} {$DE/dgDataEntity/dgDataRoles/dgDataCreator/roleName} {$DE/dgDataEntity/dgDataRoles/dgDataCreator/abbreviation} {$DE/dgDataEntity/dgDataRoles/dgDataCreator/contactDetails} {for $DataCreatorRole in $DE/dgDataEntity/dgDataRoles/dgDataCreator/dgRoleHolder order by $DataCreatorRole/startDate empty least, $DataCreatorRole/endDate empty least return <dgRoleHolder> {if (exists($DataCreatorRole/dgOrganisationID)) then ( for $DataCreatorRoleHolder in collection('/db/ndg_B_metadata')/dgMetadata/dgOrganisation[dgMetadataID[schemeIdentifier='NDG-B0' and repositoryIdentifier=$DataCreatorRole/dgOrganisationID/repositoryIdentifier and localIdentifier=$DataCreatorRole/dgOrganisationID/localIdentifier]] return $DataCreatorRoleHolder) else () } {if (exists($DataCreatorRole/dgPersonID)) then ( for $DataCreatorRoleHolder in collection('/db/ndg_B_metadata')/dgMetadata/dgPerson[dgMetadataID[schemeIdentifier='NDG-B0' and repositoryIdentifier=$DataCreatorRole/dgPersonID/repositoryIdentifier and localIdentifier=$DataCreatorRole/dgPersonID/localIdentifier]] return $DataCreatorRoleHolder) else () } {$DataCreatorRole/startDate} {$DataCreatorRole/endDate} {$DataCreatorRole/localName} </dgRoleHolder> } </dgDataCreator>) else ()} {if (exists($DE/dgDataEntity/dgDataRoles/dgDataCurator/dgMetadataID)) then ( <dgDataCurator> {$DE/dgDataEntity/dgDataRoles/dgDataCurator/dgMetadataID} {$DE/dgDataEntity/dgDataRoles/dgDataCurator/roleName} {$DE/dgDataEntity/dgDataRoles/dgDataCurator/abbreviation} {$DE/dgDataEntity/dgDataRoles/dgDataCurator/contactDetails} {for $DataCuratorRole in $DE/dgDataEntity/dgDataRoles/dgDataCurator/dgRoleHolder order by $DataCuratorRole/startDate empty least, $DataCuratorRole/endDate empty least return <dgRoleHolder> {if (exists($DataCuratorRole/dgOrganisationID)) then ( for $DataCuratorRoleHolder in collection('/db/ndg_B_metadata')/dgMetadata/dgOrganisation[dgMetadataID[schemeIdentifier='NDG-B0' and repositoryIdentifier=$DataCuratorRole/dgOrganisationID/repositoryIdentifier and localIdentifier=$DataCuratorRole/dgOrganisationID/localIdentifier]] return $DataCuratorRoleHolder) else () } {if (exists($DataCuratorRole/dgPersonID)) then ( for $DataCuratorRoleHolder in collection('/db/ndg_B_metadata')/dgMetadata/dgPerson[dgMetadataID[schemeIdentifier='NDG-B0' and repositoryIdentifier=$DataCuratorRole/dgPersonID/repositoryIdentifier and localIdentifier=$DataCuratorRole/dgPersonID/localIdentifier]] return $DataCuratorRoleHolder) else () } {$DataCuratorRole/startDate} {$DataCuratorRole/endDate} {$DataCuratorRole/localName} </dgRoleHolder>} </dgDataCurator>) else ()} {if (exists($DE/dgDataEntity/dgDataRoles/dgDataOtherRoles/dgMetadataID)) then ( <dgDataOtherRoles> {$DE/dgDataEntity/dgDataRoles/dgDataOtherRoles/dgMetadataID} {$DE/dgDataEntity/dgDataRoles/dgDataOtherRoles/roleName} {$DE/dgDataEntity/dgDataRoles/dgDataOtherRoles/abbreviation} {$DE/dgDataEntity/dgDataRoles/dgDataOtherRoles/contactDetails} {for $DataOtherRolesRole in $DE/dgDataEntity/dgDataRoles/dgDataOtherRoles/dgRoleHolder order by $DataOtherRolesRole/startDate empty least, $DataOtherRolesRole/endDate empty least return <dgRoleHolder> {if (exists($DataOtherRolesRole/dgOrganisationID)) then ( for $DataOtherRolesRoleHolder in /dgMetadata/dgOrganisation[dgMetadataID[schemeIdentifier='NDG-B0' and repositoryIdentifier=$DataOtherRolesRole/dgOrganisationID/repositoryIdentifier and localIdentifier=$DataOtherRolesRole/dgOrganisationID/localIdentifier]] return $DataOtherRolesRoleHolder) else () } {if (exists($DataOtherRolesRole/dgPersonID)) then ( for $DataOtherRolesRoleHolder in /dgMetadata/dgPerson[dgMetadataID[schemeIdentifier='NDG-B0' and repositoryIdentifier=$DataOtherRolesRole/dgPersonID/repositoryIdentifier and localIdentifier=$DataOtherRolesRole/dgPersonID/localIdentifier]] return $DataOtherRolesRoleHolder) else () } {$DataOtherRolesRole/startDate} {$DataOtherRolesRole/endDate} {$DataOtherRolesRole/localName} </dgRoleHolder>} </dgDataOtherRoles>) else ()} </dgDataRoles> {for $RelDep in $DE/dgDataEntity/RelatedDeployment return <RelatedDeployment> {$RelDep/DateStart} {$RelDep/DateEnd} {$RelDep/dgMetadataID} {for $SRAct in collection('/db/ndg_B_metadata')/dgMetadata/dgMetadataRecord[dgMetadataID[schemeIdentifier='NDG-B0' and repositoryIdentifier=$RelDep/ActivityID/repositoryIdentifier and localIdentifier=$RelDep/ActivityID/localIdentifier]] return <activity> {$SRAct/dgMetadataID} {$SRAct/dgMetadataDescription} {$SRAct/name} {$SRAct/abbreviation} <dgActivity> {$SRAct/dgActivity/dgActivityDataCollection} {$SRAct/dgActivity/dgActivityDataProject} {$SRAct/dgActivity/dgActivityDataCampaign} {$SRAct/dgActivity/dgActivityDataInvestigation} {$SRAct/dgActivity/dgActivityCoverage} {$SRAct/dgActivity/dgActivityDuration} </dgActivity> </activity> } {for $SRDPT in collection('/db/ndg_B_metadata')/dgMetadata/dgMetadataRecord[dgMetadataID[schemeIdentifier='NDG-B0' and repositoryIdentifier=$RelDep/DataProductionToolID/repositoryIdentifier and localIdentifier=$RelDep/DataProductionToolID/localIdentifier]] return <dataproductiontool> {$SRDPT/dgMetadataID} {$SRDPT/dgMetadataDescription} {$SRDPT/name} {$SRDPT/abbreviation} <dgDataProductionTool> {$SRDPT/dgDataProductionTool/contactDetails} {$SRDPT/dgDataProductionTool/dgModel} {$SRDPT/dgDataProductionTool/dgInstrument} </dgDataProductionTool> </dataproductiontool> } {for $SRObsStn in collection('/db/ndg_B_metadata')/dgMetadata/dgMetadataRecord[dgMetadataID[schemeIdentifier='NDG-B0' and repositoryIdentifier=$RelDep/ObservationStationID/repositoryIdentifier and localIdentifier=$RelDep/ObservationStationID/localIdentifier]] return <observationstation> {$SRObsStn/dgMetadataID} {$SRObsStn/dgMetadataDescription} {$SRObsStn/name} {$SRObsStn/abbreviation} <dgObservationStation> {$SRObsStn/dgObservationStation/contactDetails} {$SRObsStn/dgObservationStation/dgStationaryPlatform} {$SRObsStn/dgObservationStation/dgMovingPlatform} </dgObservationStation> </observationstation> } {$RelDep/Coverage} </RelatedDeployment> } {for $RelatedDataGranule in collection('/db/ndg_B_metadata')/dgMetadata/dgMetadataRecord[dgMetadataID[schemeIdentifier='NDG-B0' and repositoryIdentifier=$DE/dgRelatedDataGranuleID/dgRelatedDataGranuleID/repositoryIdentifier and localIdentifier=$DE/dgRelatedDataGranuleID/RelatedDataGranuleID/localIdentifier]] return <relateddatagranule> <relation> {$RelatedDataGranule/RelationID/dgValidTerm} {$RelatedDataGranule/RelationID/dgValidTermID} </relation> {$RelatedDataGranule/dgMetadataID} {$RelatedDataGranule/dgMetadataDescription} {$RelatedDataGranule/name} {$RelatedDataGranule/abbreviation} <dgDataEntity> {$RelatedDataGranule/dgDataEntity/dgDataSetType} {$RelatedDataGranule/dgDataEntity/dgDataObjectType} {$DE/dgDataEntity/dgDataGranule} {$DE/dgDataEntity/dgDataSummary} </dgDataEntity> </relateddatagranule> } </dgDataEntity> {$DE/dgStructuredKeyword} {$DE/DataProvenance} {$DE/MetadataSecurity} </dgMetadataRecord>"; 
    43         static String test = "for $DE in collection('/db/ndg_B_metadata')/dgMetadata/dgMetadataRecord[dgDataEntity!='' and dgMetadataID[schemeIdentifier='NDG-B0' and repositoryIdentifier='RepositoryID' and localIdentifier='LocalID']] return <empty/>"; 
    44         static String RawDEMoles = "for $DE in collection('/db/ndg_B_metadata')/dgMetadata/dgMetadataRecord[dgDataEntity!='' and dgMetadataID[schemeIdentifier='NDG-B0' and repositoryIdentifier='RepositoryID' and localIdentifier='LocalID']] return $DE"; 
    45         static String DublinCoreDEQuery = "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:date($updatedate) descending return xs:date($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, $DataCreatorRole/endDate empty least return for $DataCreatorRoleHolder in collection('/db/ndg_B_metadata')/(dgOrganisation | dgPerson)[((not(exists($DataCreatorRole/endDate)) or empty($DataCreatorRole/endDate)) and dgMetadataID/schemeIdentifier='NDG-B0' and dgMetadataID/repositoryIdentifier=$DataCreatorRole/*/repositoryIdentifier and dgMetadataID/localIdentifier=$DataCreatorRole/*/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=''] return for $DataCuratorRoleHolder in collection('/db/ndg_B_metadata')/dgMetadata/*[(dgMetadataID/schemeIdentifier='NDG-B0' and dgMetadataID/repositoryIdentifier=$DataCuratorRole/*/repositoryIdentifier and dgMetadataID/localIdentifier=$DataCuratorRole/*/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>"; 
    46         static String DIFQuery = "for $DE in collection('/db/ndg_B_metadata')/dgMetadata/dgMetadataRecord[exists('dgDataEntity') and dgMetadataID/schemeIdentifier='NDG-B0' and dgMetadataID/repositoryIdentifier='RepositoryID' and dgMetadataID/localIdentifier='LocalID'] return <DIF xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://gcmd.gsfc.nasa.gov/Aboutus/xml/dif/' 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/dgMetadataID/repositoryIdentifier, ':DIF:', $DE/dgMetadataID/localIdentifier)}, element Entry_Title {string($DE/name)}, element Data_Set_Citation { for $DataCreatorRole in $DE/dgDataEntity/dgDataRoles/dgDataCreator/dgRoleHolder[not(exists(endDate)) or endDate=''][1] return  for $DataCreatorRoleHolder in collection('/db/ndg_B_metadata')/dgMetadata/*[(dgMetadataID/schemeIdentifier='NDG-B0' and dgMetadataID/repositoryIdentifier=$DataCreatorRole/*/repositoryIdentifier and dgMetadataID/localIdentifier=$DataCreatorRole/*/localIdentifier)] return  element Data_Creator  { if (exists($DataCreatorRoleHolder/name/initials)) then  (string(concat(string($DataCreatorRoleHolder/name/initials), ' ', string($DataCreatorRoleHolder/name/familyName)))) else  (string($DataCreatorRoleHolder/abbreviation)) }, element Dataset_Title {string($DE/name)} }, for $StructuredKeyword in ($DE//(dgStructuredKeyword | dgStdParameterMeasured)[dgValidTermID/ParentListID='http://gcmd.gsfc.nasa.gov/Resources/valids/gcmd_parameters.html' and ListLevel = 0]) return if (exists($StructuredKeyword/*/dgValidTerm)) then ( element Parameters { element Category {string($StructuredKeyword/*/dgValidTerm)}, if (exists($StructuredKeyword//dgValidSubterm)  and $StructuredKeyword//dgValidSubterm != ''  and $StructuredKeyword//dgValidSubterm != ' ') then ( for $Subterm in $StructuredKeyword//dgValidSubterm[exists(dgValidTerm)] where exists($Subterm/dgValidSubterm) order by $Subterm/ListLevel return  if ($Subterm/ListLevel=1) then (element Topic {string($Subterm/dgValidSubterm/dgValidTerm)})  else ( if ($Subterm/ListLevel=2) then (element Term {string($Subterm/dgValidSubterm/dgValidTerm)})  else ( if ($Subterm/ListLevel=3) then (element Variable {string($Subterm/dgValidSubterm/dgValidTerm)})  else ( if ($Subterm/ListLevel=4) then (element Detailed_Variable {string($Subterm/dgValidSubterm/dgValidTerm)})  else (element GCMD_Science_Valid {string($Subterm/dgValidSubterm/dgValidTerm)})))) ) else() } ) else(), for $ISOTopicCategory in ($DE/dgStructuredKeyword[dgValidTermID/ParentListID='http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_TopicCategoryCode']) return  element ISO_Topic_Category {string($ISOTopicCategory/dgValidTerm)}, for $Keyword in distinct-values($DE//dgStructuredKeyword[ dgValidTermID/ParentListID!='http://gcmd.gsfc.nasa.gov/Resources/valids/gcmd_parameters.html'  and  dgValidTermID/ParentListID!='http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_TopicCategoryCode'  ]/dgValidTerm) return element Keyword {string($Keyword)},  for $DepDPT in ($DE/dgDataEntity/RelatedDeployment/DataProductionToolID)  return  element Sensor_Name { for $DepDPTAbbrev in distinct-values((collection('/db/ndg_B_metadata')/dgMetadata/dgMetadataRecord[dgMetadataID[schemeIdentifier='NDG-B0' and repositoryIdentifier=$DepDPT/repositoryIdentifier and localIdentifier=$DepDPT/localIdentifier]]/abbreviation)) return element Short_Name {data($DepDPTAbbrev)}, for $DepDPTName in distinct-values((collection('/db/ndg_B_metadata')/dgMetadata/dgMetadataRecord[dgMetadataID[schemeIdentifier='NDG-B0' and repositoryIdentifier=$DepDPT/repositoryIdentifier and localIdentifier=$DepDPT/localIdentifier]]/name)) return element Long_Name {data($DepDPTName)} }, for $DepObsStn in ($DE/dgDataEntity/RelatedDeployment/ObservationStationID) return  element Source_Name { for $DepObsStnAbbrev in distinct-values((collection('/db/ndg_B_metadata')/dgMetadata/dgMetadataRecord[dgMetadataID[schemeIdentifier='NDG-B0' and repositoryIdentifier=$DepObsStn/repositoryIdentifier and localIdentifier=$DepObsStn/localIdentifier]]/abbreviation)) return element Short_Name {data($DepObsStnAbbrev)}, for $DepObsStnName in distinct-values((collection('/db/ndg_B_metadata')/dgMetadata/dgMetadataRecord[dgMetadataID[schemeIdentifier='NDG-B0' and repositoryIdentifier=$DepObsStn/repositoryIdentifier and localIdentifier=$DepObsStn/localIdentifier]]/name)) return element Long_Name {data($DepObsStnName)} }, for $TemporalRange in ($DE/dgDataEntity/dgDataSummary/dgDataCoverage/(dgTemporalCoverage | dgSpatioTemporalcoverage/dgSpatioTemporalRange/dgSpatialCoverage)/dgDateRange) return  element Temporal_Coverage { element Start_Date {data($TemporalRange/DateRangeStart)}, element End_Date {data($TemporalRange/DateRangeEnd)} }, for $TemporalTerm in ($DE/dgDataEntity/dgDataSummary/dgDataCoverage/(dgTemporalCoverage | dgSpatioTemporalcoverage/dgSpatioTemporalRange/dgSpatialCoverage)/dgArea/dgValidTerm) return element Paleo_Temporal_Coverage  { element Chronostratigraphic_Unit {data($TemporalTerm)} },  for $Data_Set_Progress in ($DE/dgDataEntity/dgDataSummary/dgDataStatus/dgDatasetClosure) return element Data_Set_Progress {$Data_Set_Progress}, for $BoundingBox in ($DE/dgDataEntity/dgDataSummary/dgDataCoverage/(dgSpatialCoverage | dgSpatioTemporalcoverage/dgSpatioTemporalRange/dgSpatialCoverage)/BoundingBox) return  element Spatial_Coverage { element Southernmost_Latitude {data($BoundingBox/LimitSouth)}, element Northernmost_Latitude {data($BoundingBox/LimitNorth)}, element Westernmost_Longitude {data($BoundingBox/LimitWest)}, element Easternmost_Longitude {data($BoundingBox/LimitEast)} }, for $Location in ($DE/dgDataEntity/dgDataSummary/dgDataCoverage/(dgSpatialCoverage | dgSpatioTemporalcoverage/dgSpatioTemporalRange/dgSpatialCoverage)/dgArea[dgValidTermID/ParentListID='http://gcmd.gsfc.nasa.gov/Resources/valids/gcmd_locations.html']) return element Location {$Location},  for $DepAct in ($DE/dgDataEntity/RelatedDeployment/ActivityID) return  element Project { for $DepActAbbrev in distinct-values((collection('/db/ndg_B_metadata')/dgMetadata/dgMetadataRecord[dgMetadataID[schemeIdentifier='NDG-B0' and repositoryIdentifier=$DepAct/repositoryIdentifier and localIdentifier=$DepAct/localIdentifier]]/abbreviation)) return  element Short_Name {data($DepActAbbrev)}, for $DepActName in distinct-values((collection('/db/ndg_B_metadata')/dgMetadata/dgMetadataRecord[dgMetadataID[schemeIdentifier='NDG-B0' and repositoryIdentifier=$DepAct/repositoryIdentifier and localIdentifier=$DepAct/localIdentifier]]/name)) return  element Long_Name {data($DepActName)} }, if (exists($DE/dgDataEntity/dgDataGranule/accessControlPolicy)) then ( for $DG in $DE/dgDataEntity/dgDataGranule return  element Access_Constraints  { if (exists($DG/dgGranuleSummary/dgGranuleName)) then  concat('For data granule ', $DG/dgGranuleSummary/dgGranuleName, ': ') else (), if (exists($DG/accessControlPolicy/accessControlPolicyURL)) then concat('See access control policy at ', escape-uri($DG/accessControlPolicy/accessControlPolicyURL, true())) else if (exists($DG/accessControlPolicy/accessControlPolicyText)) then ( data($DG/accessControlPolicy/accessControlPolicyText) ) else ( for $securityCondition in $DG/accessControlPolicy/dgSecurityCondition return if (exists($securityCondition/conditionExplanationText)) then concat('Effect: ', data($securityCondition/effect), ' - ', data($securityCondition/conditionExplanationText)) else ( concat('Effect: ', data($securityCondition/effect), 'needs ', data($securityCondition/attauthRole), ' from ', data($securityCondition/dgAttributeAuthority)) ) ) } ) else (), for $DataCuratorRole in $DE/dgDataEntity/dgDataRoles/dgDataCurator/dgRoleHolder[not(exists(endDate)) or endDate=''] return  for $DataCuratorRoleHolder in collection('/db/ndg_B_metadata')/dgMetadata/*[(dgMetadataID/schemeIdentifier='NDG-B0' and dgMetadataID/repositoryIdentifier=$DataCuratorRole/*/repositoryIdentifier and dgMetadataID/localIdentifier=$DataCuratorRole/*/localIdentifier)] return  element Data_Center { element Data_Center_Name { element Short_Name  { if (exists($DataCuratorRoleHolder/name/initials)) then ( string(concat(string($DataCuratorRoleHolder/name/initials), ' ', string($DataCuratorRoleHolder/name/familyName))) ) else  (string($DataCuratorRoleHolder/abbreviation)) }, element Long_Name  { if (exists($DataCuratorRoleHolder/name/initials)) then  (string(concat(string($DataCuratorRoleHolder/name/initials), ' ', string($DataCuratorRoleHolder/name/familyName)))) else (string($DataCuratorRoleHolder/name)) } }, if (exists($DataCuratorRoleHolder/contactDetails/URI)) then  ( element Data_Center_URL  {data($DataCuratorRoleHolder/contactDetails/URI)} ) else (), for $DGID in $DE/dgDataEntity/dgDataGranule/dataModelID return  element Data_Set_ID  { concat($DGID/repositoryIdentifier, ':', $DGID/schemeIdentifier, ':', $DGID/localIdentifier) }, element Personnel { element Role {'Data Center Contact'}, if (exists($DataCuratorRoleHolder/name/knownAs)) then  (element First_Name {string($DataCuratorRoleHolder/name/knownAs)}) else if (exists($DataCuratorRoleHolder/name/initials)) then  (element First_Name {string($DataCuratorRoleHolder/name/initials)}) else (), element Last_Name  { if (exists($DataCuratorRoleHolder/name/familyName)) then  (string($DataCuratorRoleHolder/name/familyName)) else (string($DataCuratorRoleHolder/name)) }, if (exists($DataCuratorRole/contactDetails/eMail)) then  (element Email {string($DataCuratorRole/contactDetails/eMail)}) else  (if (exists($DataCuratorRoleHolder/contactDetails/eMail)) then  (element Email {string($DataCuratorRoleHolder/contactDetails/eMail)}) else () ), if (exists($DataCuratorRole/contactDetails/telephone)) then  (element Phone {string($DataCuratorRole/contactDetails/telephone)}) else  (if (exists($DataCuratorRoleHolder/contactDetails/telephone)) then  (element Phone {string($DataCuratorRoleHolder/contactDetails/telephone)}) else () ), if (exists($DataCuratorRole/contactDetails/fax)) then  (element Fax {string($DataCuratorRole/contactDetails/fax)}) else  (if (exists($DataCuratorRoleHolder/contactDetails/fax)) then  (element Fax {string($DataCuratorRoleHolder/contactDetails/fax)}) else () ), if (exists($DataCuratorRole/contactDetails/address)) then  (element Contact_Address { for $addressline in $DataCuratorRole/contactDetails/address/addressline return element address {$addressline}, if (exists($DataCuratorRole/contactDetails/address/city)) then  (element City {string($DataCuratorRole/contactDetails/address/city)}) else (), if (exists($DataCuratorRole/contactDetails/address/postcode)) then  (element Postal_Code {string($DataCuratorRole/contactDetails/address/postcode)}) else (), if (exists($DataCuratorRole/contactDetails/address/country)) then  (element Country {string($DataCuratorRole/contactDetails/address/country)}) else () } ) else if (exists($DataCuratorRoleHolder/contactDetails/address)) then  (element Contact_Address  { for $addressline in $DataCuratorRole/contactDetails/address/addressline return element address {$addressline}, if (exists($DataCuratorRole/contactDetails/address/city)) then  (element City {string($DataCuratorRoleHolder/contactDetails/address/city)}) else (), if (exists($DataCuratorRoleHolder/contactDetails/address/postcode)) then  (element Postal_Code {string($DataCuratorRole/contactDetails/postcode)}) else (), if (exists($DataCuratorRoleHolder/contactDetails/address/country)) then  (element Country {string($DataCuratorRoleHolder/contactDetails/address/country)}) else () } ) else () } }, element Summary {string($DE/dgMetadataDescription/abstract/abstractText)}, element Related_URL  { element URL_Content_Type {'NDG_B_SERVICE'}, element URL {data($DE/dgMetadataID/repositoryIdentifier)}, element Description {'The NDG service for browsing metadata.'} }, for $DG in $DE/dgDataEntity/dgDataGranule return  if ($DG/dataModelID/schemeIdentifier='NDG-A0') then  ( element Related_URL  { element URL_Content_Type {'NDG_A_SERVICE'}, element URL {escape-uri('http://dmgdev1.esc.rl.ac.uk/cgi-bin/ndgDataAccess?datasetSource=dmgdev1.esc.rl.ac.uk&amp;datasetID=', true())}, element Description {'The NDG service delivering data via NDG A metadata.'} }, element Related_URL  { element URL_Content_Type {'GET DATA > CSML'}, element URL {escape-uri('http://dmgdev1.esc.rl.ac.uk/cgi-bin/ndgDataAccess?datasetSource=dmgdev1.esc.rl.ac.uk&amp;datasetID=', true())}, 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/dataModelID/schemeIdentifier='CDML-0') then  ( element Related_URL  { element URL_Content_Type {'NDG_A_SERVICE'}, element URL {escape-uri('http://cdat.badc.nerc.ac.uk/cgi-bin/dxui.py?datasetURI_1=/', true())}, 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'}, element URL {escape-uri('http://cdat.badc.nerc.ac.uk/cgi-bin/dxui.py?datasetURI_1=/', true())}, 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/dataModelID/schemeIdentifier='URI') then  ( element Related_URL { element URL {data($DG/instance/URI)}, if (exists($DG/instance/instanceComment)) then  ( element Description {data($DG/instance/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 curators.'} ) } ) else (), for $RelURL_Desc in ($DE/dgMetadataDescription/descriptionSection/descriptionOnlineReference)  return element Related_URL { element URL {data($RelURL_Desc)}, element Description {concat(data($RelURL_Desc/name), ' - ', data($RelURL_Desc/notes))}  },  element Metadata_Name {'[CEOS IDN DIF]'}, element Metadata_Version {'9.4'}, if (exists($DE/dgMetadataProvenance/RecordCreation)) then  ( element DIF_Creation_Date {data($DE/dgMetadataProvenance/RecordCreation/CreatedDate)} ) else (), for $MDUpdt in $DE/dgMetadataProvenance/RecordUpdate return  element DIF_Revision_History {concat(data($MDUpdt/UpdateDate), ' - ', data($MDUpdt/UpdateSummary), ' - ', data($MDUpdt/UpdatedBy))} , if (exists($DE/dgMetadataProvenance/RecordReview)) then  ( element Future_DIF_Review_Date {data($DE/dgMetadataProvenance/RecordReview/ReviewDate)} ) else () } </DIF>"; 
    47         static String ISO19139Query = "for $DE in collection('/db/ndg_B_metadata')/dgMetadata/dgMetadataRecord[exists('dgDataEntity') and dgMetadataID/schemeIdentifier='NDG-B0' and dgMetadataID/repositoryIdentifier='RepositoryID' and dgMetadataID/localIdentifier='LocalID'] return <MD_Metadata xmlns='http://www.isotc211.org/2005/gmd' xmlns:gco='http://www.isotc211.org/2005/gco' xmlns:gmd='http://www.isotc211.org/2005/gmd' xmlns:gml='http://www.opengis.net/gml' xmlns:xlink='http://www.w3.org/1999/xlink' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.isotc211.org/2005/gmd http://www.isotc211.org/2005/gmd/metadataEntity.xsd'> {element fileIdentifier {element gco:CharacterString {concat($DE/dgMetadataID/repositoryIdentifier, 'ISO 19115:2003(E):', $DE/dgMetadataID/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/dgRelatedDataEntity[RelationID/dgValidTerm='is-part-of'] return element parentIdentifier {element gco:CharacterString {concat($DE/dgMetadataID/repositoryIdentifier, ':', $DE/dgMetadataID/localIdentifier, ':', $DE/dgMetadataID/localIdentifier)}}} {for $DataCuratorRole in $DE/dgDataEntity/dgDataRoles/dgDataCurator/dgRoleHolder[not(exists(endDate)) or endDate=''] return for $DataCuratorRoleHolder in collection('/db/ndg_B_metadata')/dgMetadata/*[(dgMetadataID/schemeIdentifier='NDG-B0' and dgMetadataID/repositoryIdentifier=$DataCuratorRole/*/repositoryIdentifier and dgMetadataID/localIdentifier=$DataCuratorRole/*/localIdentifier)] return <contact > { <CI_ResponsibleParty> { if (string(local-name($DataCuratorRoleHolder))='dgOrganisation') then element organisationName {element gco:CharacterString {string($DataCuratorRoleHolder/name)}} else if (string(local-name($DataCuratorRoleHolder))='dgPerson') then element individualName {element gco:CharacterString {string(concat(string($DataCuratorRoleHolder/name/initials), ' ', string($DataCuratorRoleHolder/name/familyName)))}} else ('empty content')} {element positionName { if (exists($DataCuratorRoleHolder/localName)) then element gco:CharacterString {$DataCuratorRoleHolder/localName} else if (exists($DataCuratorRole/roleName)) then element gco:CharacterString {$DataCuratorRole/roleName} else element gco:CharacterString {'Curator'}}} <contactInfo><gmd:CI_Contact> {if (exists($DataCuratorRole/contactDetails/telephone or $DataCuratorRole/contactDetails/fax or $DataCuratorRoleHolder/contactDetails/telephone or $DataCuratorRoleHolder/contactDetails/fax)) then <phone><gmd:CI_Telephone> {if (exists($DataCuratorRole/contactDetails/telephone)) then element voice { element gco:CharacterString {data($DataCuratorRole/contactDetails/telephone)}} else if (exists($DataCuratorRoleHolder/contactDetails/telephone)) then element voice { element gco:CharacterString {data($DataCuratorRoleHolder/contactDetails/telephone)}} else ()} {if (exists($DataCuratorRole/contactDetails/fax)) then element facsimile { element gco:CharacterString {data($DataCuratorRoleHolder/contactDetails/fax)}} else if (exists($DataCuratorRoleHolder/contactDetails/telephone)) then element facsimile { element gco:CharacterString {data($DataCuratorRoleHolder/contactDetails/fax)}} else ()} </gmd:CI_Telephone></phone> else ()} <address><gmd:CI_Address> {if (exists($DataCuratorRole/contactDetails/address/addressline)) then for $addressline in $DataCuratorRole/contactDetails/address/addressline return element deliveryPoint { element gco:CharacterString {data($addressline)}} else if (exists($DataCuratorRoleHolder/contactDetails/address/addressline)) then for $addressline in $DataCuratorRoleHolder/contactDetails/address/addressline return element deliveryPoint { element gco:CharacterString {data($addressline)}} else ()} {if (exists($DataCuratorRole/contactDetails/address/city)) then element city { element gco:CharacterString {data($DataCuratorRole/contactDetails/address/city)}} else if (exists($DataCuratorRoleHolder/contactDetails/address/city)) then element city { element gco:CharacterString {data($DataCuratorRoleHolder/contactDetails/address/city)}} else ()} {if (exists($DataCuratorRole/contactDetails/eMail)) then element electronicMailAddress { element gco:CharacterString {data($DataCuratorRole/contactDetails/eMail)}} else if (exists($DataCuratorRoleHolder/contactDetails/address/postcode)) then element electronicMailAddress { element gco:CharacterString {data($DataCuratorRoleHolder/contactDetails/eMail)}} else ()} </gmd:CI_Address></address></gmd:CI_Contact></contactInfo> {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/localName)) then data($DataCuratorRole/localName) else if (exists($DataCuratorRoleHolder/localName)) then data($DataCuratorRoleHolder/localName) else 'Curator'}}} </CI_ResponsibleParty>} </contact>} {element dateStamp { element gco:Date { adjust-date-to-timezone(current-date())}}} {element metadataStandardName {element gco:CharacterString {'ISO 19115:2005'}}} {element metadataStandardVersion {element gco:CharacterString {'2005'}}} <identificationInfo><gmd:MD_DataIdentification><citation><gmd:CI_Citation> {element title {element gco:CharacterString {data($DE/name)}}} {if (exists($DE/abbreviation) and not(empty($DE/abbreviation))) then element alternateTitle {element gco:CharacterString {data($DE/abbreviation)}} else ()} {element date { if (exists($DE/*/RecordCreation/CreatedDate)) then element gmd:CI_Date { element date { element gco:Date {adjust-date-to-timezone(data($DE/*/RecordCreation/CreatedDate))}}, element dateType { element CI_DateTypeCode { attribute codeList {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_DateTypeCode'}, attribute codeListValue {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_DateTypeCode_creation'}, 'Creation'}}} else attribute gco:nilReason {'unknown'}}} </gmd:CI_Citation></citation> {element abstract { element gco:CharacterString {data($DE/dgMetadataDescription/abstract/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/dgStructuredKeyword[dgValidTermID/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/dgValidTerm)}, 'English'}}} </gmd:MD_DataIdentification></identificationInfo></MD_Metadata>"; 
     41        static String StubBDEQuery = "declare default element namespace 'http://ndg.nerc.ac.uk/moles/dataentity'; declare namespace moles='http://ndg.nerc.ac.uk/moles'; declare namespace f='http://ndg.nerc.ac.uk/moles/localfunctions'; declare function f:strip-namespace($e as element()) as element() (: Removes namespace info from the element tree being addressed so that it will lie in the default namespace :) { element {QName('', local-name($e))} { let $parent :=$e let $childcount := count($parent/*) return if ($childcount>0) then for $child in ($e/*) return f:strip-namespace($child) else (data($e)) } } ; declare function f:return-stub-activity($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element() (: Returns a 'stubB' style activity record to expand an activity record :) (: Security not implemented here yet :) { for $SRAct in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[ moles:dgMetadataID/moles:repositoryIdentifier=$repid and moles:dgMetadataID/moles:localIdentifier=$locid] return element {$out-element-name} { $SRAct/moles:dgMetadataID, $SRAct/moles:dgMetadataDescription, $SRAct/moles:name, $SRAct/moles:abbreviation, element dgActivity { if (exists($SRAct/*/moles:dgActivityDataCollection)) then $SRAct/*/moles:dgActivityDataCollection else if (exists($SRAct/*/moles:dgActivityDataProject)) then $SRAct/*/moles:dgActivityDataProject else if (exists($SRAct/*/dgActivityDataCampaign)) then $SRAct/moles:dgActivity/moles:dgActivityDataCampaign else $SRAct/moles:dgActivity/moles:dgActivityDataInvestigation, $SRAct/moles:dgActivity/moles:dgActivityCoverage, $SRAct/moles:dgActivity/moles:dgActivityDuration } (: </dgActivity> :) } (: </activity> :) } ; declare function f:return-stub-dataentity($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element() (: Returns a 'stubB' style observation station record to expand an data entity record :) (: Security not implemented here; it would be in a wrapper function :) { for $SRDE in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[ moles:dgMetadataID/moles:repositoryIdentifier=$repid and moles:dgMetadataID/moles:localIdentifier=$locid] return element {$out-element-name} { $SRDE/moles:dgMetadataID, $SRDE/moles:dgMetadataDescription, $SRDE/moles:name, $SRDE/moles:abbreviation, element dgDataEntity { $SRDE/moles:dgDataEntity/moles:dgDataSetType, $SRDE/moles:dgDataEntity/moles:dgDataGranule, $SRDE/moles:dgDataEntity/moles:dgDataSummary } (: </dgDataEntity> :) } } ; declare function f:return-stub-dpt($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element() (: Returns a 'stubB' style dpt record to expand a dpt record :) (: Security not implemented here; it would be in a wrapper function :) { for $SRDPT in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[ moles:dgMetadataID/moles:repositoryIdentifier=$repid and moles:dgMetadataID/moles:localIdentifier=$locid] return element {$out-element-name} { $SRDPT/moles:dgMetadataID, $SRDPT/moles:dgMetadataDescription, $SRDPT/moles:name, $SRDPT/moles:abbreviation, element dgDataProductionTool { $SRDPT/moles:dgDataProductionTool/moles:contactDetails, if (exists($SRDPT/moles:dgDataProductionTool/moles:dgModel)) then $SRDPT/moles:dgDataProductionTool/moles:dgModel else (), if (exists($SRDPT/moles:dgDataProductionTool/moles:dgInstrument)) then $SRDPT/moles:dgDataProductionTool/moles:dgInstrument else () } (: </dgDataProductionTool> :) } (: </dataproductiontool> :) } ; declare function f:return-stub-obsstn($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element() (: Returns a 'stubB' style observation station record to expand an observation station record :) (: Security not implemented here yet; :) { for $SRObsStn in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[ moles:dgMetadataID/moles:repositoryIdentifier=$repid and moles:dgMetadataID/moles:localIdentifier=$locid] return element {$out-element-name} { ($SRObsStn/moles:dgMetadataID), ($SRObsStn/moles:dgMetadataDescription), ($SRObsStn/moles:name), ($SRObsStn/moles:abbreviation), element dgObservationStation { ($SRObsStn/moles:dgObservationStation/moles:contactDetails), if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform)) then element dgStationaryPlatform { $SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:position, if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgLandStation)) then element dgLandStation {''} else if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgMooring)) then element dgMooring {''} else if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgStationGroup)) then element dgStationGroup {''} else () } else if (exists($SRObsStn/moles:dgObservationStation/moles:dgMovingPlatform)) then $SRObsStn/moles:dgObservationStation/moles:dgMovingPlatform else () } (: </dgObservationStation> :) } } ; declare function f:return-stub-person($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element() (: Returns a 'stubB' style observation station record to expand a person record :) (: Security not implemented here; it would be in a wrapper function :) { for $person in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgPerson[ moles:dgMetadataID/moles:repositoryIdentifier=$repid and moles:dgMetadataID/moles:localIdentifier=$locid] return element {$out-element-name} { $person/moles:name, $person/moles:contactDetails, $person/moles:dgMetadataID } } ; declare function f:return-stub-organisation($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element() (: Returns a 'stubB' style observation station record to expand an organisation record :) (: Security not implemented here; it would be in a wrapper function :) { for $org in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgOrganisation[ moles:dgMetadataID/moles:repositoryIdentifier=$repid and moles:dgMetadataID/moles:localIdentifier=$locid] return element {$out-element-name} { $org/moles:dgMetadataID, $org/name, $org/abbreviation, $org/contactDetails } } ; for $DE in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[ exists(moles:dgDataEntity) and moles:dgMetadataID[ moles:schemeIdentifier='NDG-B0' and moles:repositoryIdentifier='RepositoryID' and moles:localIdentifier='LocalID']] return f:strip-namespace(element dgMetadataRecord { element dgMetadataID { element schemeIdentifier {'NDG-B1'}, $DE/moles:dgMetadataID/moles:repositoryIdentifier, $DE/moles:dgMetadataID/moles:localIdentifier }, (: </dgMetadataID> :) $DE/moles:dgMetadataDescription, $DE/moles:name, $DE/moles:abbreviation, element dgDataEntity { $DE/moles:dgDataEntity/moles:dgDataSetType, $DE/moles:dgDataEntity/moles:dgDataObjectType, $DE/moles:dgDataEntity/moles:dgDataGranule, $DE/moles:dgDataEntity/moles:dgDataSummary, element dgDataRoles { if (exists($DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:dgMetadataID)) then element dgDataCreator { $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:dgMetadataID, $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:roleName, $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:abbreviation, $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:contactDetails, for $DataCreatorRole in $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:dgRoleHolder order by $DataCreatorRole/moles:startDate empty least, $DataCreatorRole/moles:endDate empty least return element dgRoleHolder { if (exists($DataCreatorRole/moles:dgOrganisationID)) then f:return-stub-organisation('organisation', data($DataCreatorRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($DataCreatorRole/moles:dgOrganisationID/moles:localIdentifier)) else if (exists($DataCreatorRole/moles:dgPersonID)) then f:return-stub-person('person', string($DataCreatorRole/moles:dgPersonID/moles:repositoryIdentifier), string($DataCreatorRole/moles:dgPersonID/moles:localIdentifier)) else (), $DataCreatorRole/moles:startDate, $DataCreatorRole/moles:endDate, $DataCreatorRole/moles:localName } (: </dgRoleHolder> :) } (: </dgDataCreator>) :) else (), if (exists($DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:dgMetadataID)) then element dgDataCurator { $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:dgMetadataID, $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:roleName, $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:abbreviation, $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:contactDetails, for $DataCuratorRole in $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:dgRoleHolder order by $DataCuratorRole/moles:startDate empty least, $DataCuratorRole/moles:endDate empty least return element dgRoleHolder { if (exists($DataCuratorRole/moles:dgOrganisationID)) then f:return-stub-organisation('organisation', data($DataCuratorRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($DataCuratorRole/moles:dgOrganisationID/moles:localIdentifier)) else if (exists($DataCuratorRole/moles:dgPersonID)) then f:return-stub-person('person', string($DataCuratorRole/moles:dgPersonID/moles:repositoryIdentifier), string($DataCuratorRole/moles:dgPersonID/moles:localIdentifier)) else (), $DataCuratorRole/moles:startDate, $DataCuratorRole/moles:endDate, $DataCuratorRole/moles:localName } (: </dgRoleHolder> :) } (: </dgDataCurator> :) else (), if (exists($DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataOtherRoles/moles:dgMetadataID)) then element dgDataOtherRoles { $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataOtherRoles/moles:dgMetadataID, $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataOtherRoles/moles:roleName, $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataOtherRoles/moles:abbreviation, $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataOtherRoles/moles:contactDetails, for $DataOtherRolesRole in $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataOtherRoles/moles:dgRoleHolder order by $DataOtherRolesRole/moles:startDate empty least, $DataOtherRolesRole/moles:endDate empty least return element dgRoleHolder { if (exists($DataOtherRolesRole/moles:dgOrganisationID)) then f:return-stub-organisation('organisation', data($DataOtherRolesRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($DataOtherRolesRole/moles:dgOrganisationID/moles:localIdentifier)) else if (exists($DataOtherRolesRole/moles:dgPersonID)) then f:return-stub-person('person', string($DataOtherRolesRole/moles:dgPersonID/moles:repositoryIdentifier), string($DataOtherRolesRole/moles:dgPersonID/moles:localIdentifier)) else (), $DataOtherRolesRole/moles:startDate, $DataOtherRolesRole/moles:endDate, $DataOtherRolesRole/moles:localName } (: </dgRoleHolder> :) } (: </dgDataOtherRoles> :) else () } , (: </dgDataRoles> :) for $RelDep in $DE/moles:dgDataEntity/moles:RelatedDeployment return element RelatedDeployment { $RelDep/moles:DateStart, $RelDep/moles:DateEnd, $RelDep/moles:dgMetadataID, f:return-stub-activity('activity', data($RelDep/moles:ActivityID/moles:repositoryIdentifier), data($RelDep/moles:ActivityID/moles:localIdentifier)), f:return-stub-dpt('dataproductiontool', data($RelDep/moles:DataProductionToolID/moles:repositoryIdentifier), data($RelDep/moles:DataProductionToolID/moles:localIdentifier)), f:return-stub-obsstn('observationstation', data($RelDep/moles:ObservationStationID/moles:repositoryIdentifier), data($RelDep/moles:ObservationStationID/moles:localIdentifier)), $RelDep/moles:Coverage } (: </RelatedDeployment> :) , for $RelatedDataEntity in $DE/moles:dgDataEntity/moles:dgRelatedDataEntity return element relateddataentity { element relation { $RelatedDataEntity/moles:RelationID/moles:dgValidTerm, $RelatedDataEntity/moles:RelationID/moles:dgValidTermID }, (: </relation> :) f:return-stub-dataentity('dataentity', data($RelatedDataEntity/(moles:RelatedDataEntityID | moles:RelatedDataGranuleID)/moles:repositoryIdentifier), data($RelatedDataEntity/(moles:RelatedDataEntityID | moles:RelatedDataGranuleID)/moles:localIdentifier)) } (: </relateddataentity> :) } (: </dgDataEntity> :), for $strkwrd in $DE/moles:dgStructuredKeyword return $strkwrd, if (exists($DE/moles:DataProvenance)) then $DE/moles:DataProvenance else (), if (exists($DE/moles:MetadataSecurity)) then $DE/moles:MetadataSecurity else () } (: </dgMetadataRecord> :) ) (: end of namespace strip :)"; 
     42        static String StubBActQuery = "declare default element namespace 'http://ndg.nerc.ac.uk/moles/activity'; declare namespace moles='http://ndg.nerc.ac.uk/moles'; declare namespace f='http://ndg.nerc.ac.uk/moles/localfunctions'; declare function f:strip-namespace($e as element()) as element() (: Removes namespace info from the element tree being addressed so that it will lie in the default namespace :) { element {QName('', local-name($e))} { let $parent :=$e let $childcount := count($parent/*) return if ($childcount>0) then for $child in ($e/*) return f:strip-namespace($child) else (data($e)) } } ; declare function f:return-stub-activity($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element() (: Returns a 'stubB' style activity record to expand an activity record :) (: Security not implemented here yet :) { for $SRAct in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[ moles:dgMetadataID/moles:repositoryIdentifier=$repid and moles:dgMetadataID/moles:localIdentifier=$locid] return element {$out-element-name} { ($SRAct/moles:dgMetadataID), ($SRAct/moles:dgMetadataDescription), ($SRAct/moles:name), ($SRAct/moles:abbreviation), element dgActivity { if (exists($SRAct/*/moles:dgActivityDataCollection)) then ($SRAct/*/moles:dgActivityDataCollection) else if (exists($SRAct/*/moles:dgActivityDataProject)) then ($SRAct/*/moles:dgActivityDataProject) else if (exists($SRAct/*/dgActivityDataCampaign)) then ($SRAct/moles:dgActivity/moles:dgActivityDataCampaign) else ($SRAct/moles:dgActivity/moles:dgActivityDataInvestigation), ($SRAct/moles:dgActivity/moles:dgActivityCoverage), ($SRAct/moles:dgActivity/moles:dgActivityDuration) } (: </dgActivity> :) } (: </activity> :) } ; declare function f:return-stub-dataentity($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element() (: Returns a 'stubB' style observation station record to expand an data entity record :) (: Security not implemented here; it would be in a wrapper function :) { for $SRDE in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[ moles:dgMetadataID/moles:repositoryIdentifier=$repid and moles:dgMetadataID/moles:localIdentifier=$locid] return element {$out-element-name} { ($SRDE/moles:dgMetadataID), ($SRDE/moles:dgMetadataDescription), ($SRDE/moles:name), ($SRDE/moles:abbreviation), element dgDataEntity { ($SRDE/moles:dgDataEntity/moles:dgDataSetType), ($SRDE/moles:dgDataEntity/moles:dgDataGranule), ($SRDE/moles:dgDataEntity/moles:dgDataSummary) } (: </dgDataEntity> :) } } ; declare function f:return-stub-dpt($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element() (: Returns a 'stubB' style dpt record to expand a dpt record :) (: Security not implemented here; it would be in a wrapper function :) { for $SRDPT in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[ moles:dgMetadataID/moles:repositoryIdentifier=$repid and moles:dgMetadataID/moles:localIdentifier=$locid] return element {$out-element-name} { ($SRDPT/moles:dgMetadataID), ($SRDPT/moles:dgMetadataDescription), ($SRDPT/moles:name), ($SRDPT/moles:abbreviation), element dgDataProductionTool { ($SRDPT/moles:dgDataProductionTool/moles:contactDetails), if (exists($SRDPT/moles:dgDataProductionTool/moles:dgModel)) then ($SRDPT/moles:dgDataProductionTool/moles:dgModel) else (), if (exists($SRDPT/moles:dgDataProductionTool/moles:dgInstrument)) then ($SRDPT/moles:dgDataProductionTool/moles:dgInstrument) else () } (: </dgDataProductionTool> :) } (: </dataproductiontool> :) } ; declare function f:return-stub-obsstn($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element() (: Returns a 'stubB' style observation station record to expand an observation station record :) (: Security not implemented here yet; :) { for $SRObsStn in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[ moles:dgMetadataID/moles:repositoryIdentifier=$repid and moles:dgMetadataID/moles:localIdentifier=$locid] return element {$out-element-name} { ($SRObsStn/moles:dgMetadataID), ($SRObsStn/moles:dgMetadataDescription), ($SRObsStn/moles:name), ($SRObsStn/moles:abbreviation), element dgObservationStation { ($SRObsStn/moles:dgObservationStation/moles:contactDetails), if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform)) then element dgStationaryPlatform { $SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:position, if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgLandStation)) then element dgLandStation {''} else if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgMooring)) then element dgMooring {''} else if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgStationGroup)) then element dgStationGroup {''} else () } else if (exists($SRObsStn/moles:dgObservationStation/moles:dgMovingPlatform)) then $SRObsStn/moles:dgObservationStation/moles:dgMovingPlatform else () } (: </dgObservationStation> :) } } ; declare function f:return-stub-person($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element() (: Returns a 'stubB' style observation station record to expand a person record :) (: Security not implemented here; it would be in a wrapper function :) { for $person in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgPerson[ moles:dgMetadataID/moles:repositoryIdentifier=$repid and moles:dgMetadataID/moles:localIdentifier=$locid] return element {$out-element-name} { ($person/moles:name), ($person/moles:contactDetails), ($person/moles:dgMetadataID) } } ; declare function f:return-stub-organisation($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element() (: Returns a 'stubB' style observation station record to expand an organisation record :) (: Security not implemented here; it would be in a wrapper function :) { for $org in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgOrganisation[ moles:dgMetadataID/moles:repositoryIdentifier=$repid and moles:dgMetadataID/moles:localIdentifier=$locid] return element {$out-element-name} { ($org/moles:dgMetadataID), ($org/name), ($org/abbreviation), ($org/contactDetails) } } ; for $Act in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[moles:dgMetadataID/moles:schemeIdentifier='NDG-B0' and moles:dgMetadataID/moles:repositoryIdentifier='RepositoryID' and moles:dgMetadataID/moles:localIdentifier='LocalID'] return f:strip-namespace(element dgMetadataRecord { element dgMetadataID { element schemeIdentifier {'NDG-B1'}, (element repositoryIdentifier {data($Act/moles:dgMetadataID/moles:repositoryIdentifier)}), element localIdentifier {data($Act/moles:dgMetadataID/moles:localIdentifier)} }, $Act/moles:dgMetadataDescription, $Act/moles:name, $Act/moles:abbreviation, element dgActivity { for $RelatedActivities in $Act/dgActivity/moles:relatedActivity return element relatedActivity { $RelatedActivities/moles:activityRelation, f:return-stub-activity('activity', data($RelatedActivities/moles:relatedActivityID/moles:repositoryIdentifier), data($RelatedActivities/moles:relatedActivityID/moles:localIdentifier)) }, (: </relatedActivity> :) if (exists($Act/moles:dgActivity/moles:dgActivityDataCollection)) then ($Act/moles:dgActivity/moles:dgActivityDataCollection) else if (exists($Act/moles:dgActivity/moles:dgActivityDataProject)) then ($Act/moles:dgActivity/moles:dgActivityDataProject) else if (exists($Act/moles:dgActivity/moles:dgActivityDataInvestigation)) then ($Act/moles:dgActivity/moles:dgActivityDataInvestigation) else if (exists($Act/moles:dgActivity/moles:dgActivityDataCampaign)) then ($Act/moles:dgActivity/moles:dgActivityDataCampaign) else (), element dgActivityRole { element dgInvestigator { element dgPrincipalInvestigator { ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:dgMetadataID), ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:roleName), ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:abbreviation), ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:contactDetails), for $PIRole in $Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:dgRoleHolder order by $PIRole/moles:startDate empty least, $PIRole/moles:endDate empty least return element dgRoleHolder { if (exists($PIRole/moles:dgOrganisationID)) then f:return-stub-organisation('organisation', data($PIRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($PIRole/moles:dgOrganisationID/moles:localIdentifier)) else if (exists($PIRole/moles:dgPersonID)) then f:return-stub-person('person', string($PIRole/moles:dgPersonID/moles:repositoryIdentifier), string($PIRole/moles:dgPersonID/moles:localIdentifier)) else (), ($PIRole/moles:startDate), if (exists($PIRole/moles:endDate)) then ($PIRole/moles:endDate) else (), if (exists($PIRole/moles:localName)) then ($PIRole/moles:localName) else () } (: </dgRoleHolder> :) }, (: </dgPrincipalInvestigator> :) for $CI in $Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgCoInvestigator return element dgCoInvestigator { ($CI/moles:dgMetadataID), ($CI/moles:roleName), ($CI/moles:abbreviation), ($CI/moles:contactDetails), for $CIRole in $CI/moles:dgRoleHolder order by $CIRole/moles:startDate empty least, $CIRole/moles:endDate empty least return element dgRoleHolder { if (exists(CIRole/moles:dgOrganisationID)) then f:return-stub-organisation('organisation', data($CIRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($CIRole/moles:dgOrganisationID/moles:localIdentifier)) else if (exists($CIRole/moles:dgPersonID)) then f:return-stub-person('person', string($CIRole/moles:dgPersonID/moles:repositoryIdentifier), string($CIRole/moles:dgPersonID/moles:localIdentifier)) else (), ($CIRole/moles:startDate), if (exists($CIRole/moles:endDate)) then ($CIRole/moles:endDate) else (), if (exists($CIRole/moles:localName)) then ($CIRole/moles:localName) else () } (: </dgRoleHolder> :) } (: </dgCoInvestigator> :) }, (: </dgInvestigator> :) if (exists($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact)) then ( element dgTechnicalContact { ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:dgMetadataID), ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:roleName), ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:abbreviation), ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:contactDetails), for $TechConRole in $Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:dgRoleHolder order by $TechConRole/moles:startDate empty least, $TechConRole/moles:endDate empty least return element dgRoleHolder { if (exists($TechConRole/moles:dgOrganisationID)) then f:return-stub-organisation('organisation', data($TechConRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($TechConRole/moles:dgOrganisationID/moles:localIdentifier)) else if (exists($TechConRole/moles:dgPersonID)) then f:return-stub-person('person', string($TechConRole/moles:dgPersonID/moles:repositoryIdentifier), string($TechConRole/moles:dgPersonID/moles:localIdentifier)) else (), ($TechConRole/moles:startDate), if (exists($TechConRole/moles:endDate)) then ($TechConRole/moles:endDate) else (), if (exists($TechConRole/moles:localName)) then ($TechConRole/moles:localName) else () } (: </dgRoleHolder> :) } (: </dgTechnicalContact> :) ) else (), if (exists($Act/dgActivity/dgActivityRole/dgProjectManager)) then ( element dgProjectManager { ($Act/dgActivity/dgActivityRole/dgProjectManager/dgMetadataID), ($Act/dgActivity/dgActivityRole/dgProjectManager/roleName), ($Act/dgActivity/dgActivityRole/dgProjectManager/abbreviation), ($Act/dgActivity/dgActivityRole/dgProjectManager/contactDetails), for $PMRole in $Act/dgActivity/dgActivityRole/dgProjectManager/dgRoleHolder order by $PMRole/startDate empty least, $PMRole/endDate empty least return element dgRoleHolder { if (exists($PMRole/moles:dgOrganisationID)) then f:return-stub-organisation('organisation', data($PMRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($PMRole/moles:dgOrganisationID/moles:localIdentifier)) else if (exists($PMRole/moles:dgPersonID)) then f:return-stub-person('person', string($PMRole/moles:dgPersonID/moles:repositoryIdentifier), string($PMRole/moles:dgPersonID/moles:localIdentifier)) else (), ($PMRole/startDate), if (exists($PMRole/moles:endDate)) then ($PMRole/moles:endDate) else (), if (exists($PMRole/moles:localName)) then ($PMRole/moles:localName) else () } (: </dgRoleHolder> :) } (: </dgProjectManager> :) ) else () }, (: </dgActivityRole> :) for $RelDep in $Act/moles:dgActivity/moles:ActivityDeployment return element ActivityDeployment { ($RelDep/moles:DateStart), if (exists($RelDep/moles:DateEnd)) then ($RelDep/moles:DateEnd) else (), ($RelDep/moles:dgMetadataID), f:return-stub-dpt('dataproductiontool', data($RelDep/moles:DataProductionToolID/moles:repositoryIdentifier), data($RelDep/moles:DataProductionToolID/moles:localIdentifier)), f:return-stub-obsstn('observationstation', data($RelDep/moles:ObservationStationID/moles:repositoryIdentifier), data($RelDep/moles:ObservationStationID/moles:localIdentifier)), for $DE in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord where $DE/moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:repositoryIdentifier=$RelDep/moles:dgMetadataID/moles:repositoryIdentifier and $DE/moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:localIdentifier=$RelDep/moles:dgMetadataID/moles:localIdentifier return f:return-stub-dataentity('dataentity', data($DE/moles:dgMetadataID/moles:repositoryIdentifier), data($DE/moles:dgMetadataID/moles:localIdentifier)) }, (: </ActivityDeployment> :) if (exists($Act/dgActivityCoverage)) then ($Act/dgActivityCoverage) else (), if (exists($Act/dgActivityDuration)) then ($Act/dgActivityDuration) else () } , (: </dgActivity> :) for $strkwrd in $Act/moles:dgStructuredKeyword return $strkwrd, if (exists($Act/moles:DataProvenance)) then $Act/moles:DataProvenance else (), if (exists($Act/moles:MetadataSecurity)) then $Act/moles:MetadataSecurity else () } (:</dgMRecord>:) ) (: End namespace strip :)"; 
     43        static String StubBDPTQuery = "declare default element namespace 'http://ndg.nerc.ac.uk/moles/dataentity'; declare namespace moles='http://ndg.nerc.ac.uk/moles'; declare namespace f='http://ndg.nerc.ac.uk/moles/localfunctions'; declare function f:strip-namespace($e as element()) as element() (: Removes namespace info from the element tree being addressed so that it will lie in the default namespace :) { element {QName('', local-name($e))} { let $parent :=$e let $childcount := count($parent/*) return if ($childcount>0) then for $child in ($e/*) return f:strip-namespace($child) else (data($e)) } } ; declare function f:return-stub-activity($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element() (: Returns a 'stubB' style activity record to expand an activity record :) (: Security not implemented here yet :) { for $SRAct in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[ moles:dgMetadataID/moles:repositoryIdentifier=$repid and moles:dgMetadataID/moles:localIdentifier=$locid] return element {$out-element-name} { $SRAct/moles:dgMetadataID, $SRAct/moles:dgMetadataDescription, $SRAct/moles:name, $SRAct/moles:abbreviation, element dgActivity { if (exists($SRAct/*/moles:dgActivityDataCollection)) then $SRAct/*/moles:dgActivityDataCollection else if (exists($SRAct/*/moles:dgActivityDataProject)) then $SRAct/*/moles:dgActivityDataProject else if (exists($SRAct/*/dgActivityDataCampaign)) then $SRAct/moles:dgActivity/moles:dgActivityDataCampaign else $SRAct/moles:dgActivity/moles:dgActivityDataInvestigation, $SRAct/moles:dgActivity/moles:dgActivityCoverage, $SRAct/moles:dgActivity/moles:dgActivityDuration } (: </dgActivity> :) } (: </activity> :) } ; declare function f:return-stub-dataentity($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element() (: Returns a 'stubB' style observation station record to expand an data entity record :) (: Security not implemented here; it would be in a wrapper function :) { for $SRDE in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[ moles:dgMetadataID/moles:repositoryIdentifier=$repid and moles:dgMetadataID/moles:localIdentifier=$locid] return element {$out-element-name} { $SRDE/moles:dgMetadataID, $SRDE/moles:dgMetadataDescription, $SRDE/moles:name, $SRDE/moles:abbreviation, element dgDataEntity { $SRDE/moles:dgDataEntity/moles:dgDataSetType, $SRDE/moles:dgDataEntity/moles:dgDataGranule, $SRDE/moles:dgDataEntity/moles:dgDataSummary } (: </dgDataEntity> :) } } ; declare function f:return-stub-dpt($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element() (: Returns a 'stubB' style dpt record to expand a dpt record :) (: Security not implemented here; it would be in a wrapper function :) { for $SRDPT in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[ moles:dgMetadataID/moles:repositoryIdentifier=$repid and moles:dgMetadataID/moles:localIdentifier=$locid] return element {$out-element-name} { $SRDPT/moles:dgMetadataID, $SRDPT/moles:dgMetadataDescription, $SRDPT/moles:name, $SRDPT/moles:abbreviation, element dgDataProductionTool { $SRDPT/moles:dgDataProductionTool/moles:contactDetails, if (exists($SRDPT/moles:dgDataProductionTool/moles:dgModel)) then $SRDPT/moles:dgDataProductionTool/moles:dgModel else (), if (exists($SRDPT/moles:dgDataProductionTool/moles:dgInstrument)) then $SRDPT/moles:dgDataProductionTool/moles:dgInstrument else () } (: </dgDataProductionTool> :) } (: </dataproductiontool> :) } ; declare function f:return-stub-obsstn($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element() (: Returns a 'stubB' style observation station record to expand an observation station record :) (: Security not implemented here yet; :) { for $SRObsStn in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[ moles:dgMetadataID/moles:repositoryIdentifier=$repid and moles:dgMetadataID/moles:localIdentifier=$locid] return element {$out-element-name} { ($SRObsStn/moles:dgMetadataID), ($SRObsStn/moles:dgMetadataDescription), ($SRObsStn/moles:name), ($SRObsStn/moles:abbreviation), element dgObservationStation { ($SRObsStn/moles:dgObservationStation/moles:contactDetails), if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform)) then element dgStationaryPlatform { $SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:position, if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgLandStation)) then element dgLandStation {''} else if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgMooring)) then element dgMooring {''} else if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgStationGroup)) then element dgStationGroup {''} else () } else if (exists($SRObsStn/moles:dgObservationStation/moles:dgMovingPlatform)) then $SRObsStn/moles:dgObservationStation/moles:dgMovingPlatform else () } (: </dgObservationStation> :) } } ; declare function f:return-stub-person($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element() (: Returns a 'stubB' style observation station record to expand a person record :) (: Security not implemented here; it would be in a wrapper function :) { for $person in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgPerson[ moles:dgMetadataID/moles:repositoryIdentifier=$repid and moles:dgMetadataID/moles:localIdentifier=$locid] return element {$out-element-name} { $person/moles:name, $person/moles:contactDetails, $person/moles:dgMetadataID } } ; declare function f:return-stub-organisation($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element() (: Returns a 'stubB' style observation station record to expand an organisation record :) (: Security not implemented here; it would be in a wrapper function :) { for $org in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgOrganisation[ moles:dgMetadataID/moles:repositoryIdentifier=$repid and moles:dgMetadataID/moles:localIdentifier=$locid] return element {$out-element-name} { $org/moles:dgMetadataID, $org/name, $org/abbreviation, $org/contactDetails } } ; for $DE in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[ exists(moles:dgDataEntity) and moles:dgMetadataID[ moles:schemeIdentifier='NDG-B0' and moles:repositoryIdentifier='RepositoryID' and moles:localIdentifier='LocalID']] return f:strip-namespace(element dgMetadataRecord { element dgMetadataID { element schemeIdentifier {'NDG-B1'}, $DE/moles:dgMetadataID/moles:repositoryIdentifier, $DE/moles:dgMetadataID/moles:localIdentifier }, (: </dgMetadataID> :) $DE/moles:dgMetadataDescription, $DE/moles:name, $DE/moles:abbreviation, element dgDataEntity { $DE/moles:dgDataEntity/moles:dgDataSetType, $DE/moles:dgDataEntity/moles:dgDataObjectType, $DE/moles:dgDataEntity/moles:dgDataGranule, $DE/moles:dgDataEntity/moles:dgDataSummary, element dgDataRoles { if (exists($DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:dgMetadataID)) then element dgDataCreator { $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:dgMetadataID, $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:roleName, $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:abbreviation, $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:contactDetails, for $DataCreatorRole in $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:dgRoleHolder order by $DataCreatorRole/moles:startDate empty least, $DataCreatorRole/moles:endDate empty least return element dgRoleHolder { if (exists($DataCreatorRole/moles:dgOrganisationID)) then f:return-stub-organisation('organisation', data($DataCreatorRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($DataCreatorRole/moles:dgOrganisationID/moles:localIdentifier)) else if (exists($DataCreatorRole/moles:dgPersonID)) then f:return-stub-person('person', string($DataCreatorRole/moles:dgPersonID/moles:repositoryIdentifier), string($DataCreatorRole/moles:dgPersonID/moles:localIdentifier)) else (), $DataCreatorRole/moles:startDate, $DataCreatorRole/moles:endDate, $DataCreatorRole/moles:localName } (: </dgRoleHolder> :) } (: </dgDataCreator>) :) else (), if (exists($DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:dgMetadataID)) then element dgDataCurator { $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:dgMetadataID, $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:roleName, $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:abbreviation, $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:contactDetails, for $DataCuratorRole in $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:dgRoleHolder order by $DataCuratorRole/moles:startDate empty least, $DataCuratorRole/moles:endDate empty least return element dgRoleHolder { if (exists($DataCuratorRole/moles:dgOrganisationID)) then f:return-stub-organisation('organisation', data($DataCuratorRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($DataCuratorRole/moles:dgOrganisationID/moles:localIdentifier)) else if (exists($DataCuratorRole/moles:dgPersonID)) then f:return-stub-person('person', string($DataCuratorRole/moles:dgPersonID/moles:repositoryIdentifier), string($DataCuratorRole/moles:dgPersonID/moles:localIdentifier)) else (), $DataCuratorRole/moles:startDate, $DataCuratorRole/moles:endDate, $DataCuratorRole/moles:localName } (: </dgRoleHolder> :) } (: </dgDataCurator> :) else (), if (exists($DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataOtherRoles/moles:dgMetadataID)) then element dgDataOtherRoles { $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataOtherRoles/moles:dgMetadataID, $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataOtherRoles/moles:roleName, $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataOtherRoles/moles:abbreviation, $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataOtherRoles/moles:contactDetails, for $DataOtherRolesRole in $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataOtherRoles/moles:dgRoleHolder order by $DataOtherRolesRole/moles:startDate empty least, $DataOtherRolesRole/moles:endDate empty least return element dgRoleHolder { if (exists($DataOtherRolesRole/moles:dgOrganisationID)) then f:return-stub-organisation('organisation', data($DataOtherRolesRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($DataOtherRolesRole/moles:dgOrganisationID/moles:localIdentifier)) else if (exists($DataOtherRolesRole/moles:dgPersonID)) then f:return-stub-person('person', string($DataOtherRolesRole/moles:dgPersonID/moles:repositoryIdentifier), string($DataOtherRolesRole/moles:dgPersonID/moles:localIdentifier)) else (), $DataOtherRolesRole/moles:startDate, $DataOtherRolesRole/moles:endDate, $DataOtherRolesRole/moles:localName } (: </dgRoleHolder> :) } (: </dgDataOtherRoles> :) else () } , (: </dgDataRoles> :) for $RelDep in $DE/moles:dgDataEntity/moles:RelatedDeployment return element RelatedDeployment { $RelDep/moles:DateStart, $RelDep/moles:DateEnd, $RelDep/moles:dgMetadataID, f:return-stub-activity('activity', data($RelDep/moles:ActivityID/moles:repositoryIdentifier), data($RelDep/moles:ActivityID/moles:localIdentifier)), f:return-stub-dpt('dataproductiontool', data($RelDep/moles:DataProductionToolID/moles:repositoryIdentifier), data($RelDep/moles:DataProductionToolID/moles:localIdentifier)), f:return-stub-obsstn('observationstation', data($RelDep/moles:ObservationStationID/moles:repositoryIdentifier), data($RelDep/moles:ObservationStationID/moles:localIdentifier)), $RelDep/moles:Coverage } (: </RelatedDeployment> :) , for $RelatedDataEntity in $DE/moles:dgDataEntity/moles:dgRelatedDataEntity return element relateddataentity { element relation { $RelatedDataEntity/moles:RelationID/moles:dgValidTerm, $RelatedDataEntity/moles:RelationID/moles:dgValidTermID }, (: </relation> :) f:return-stub-dataentity('dataentity', data($RelatedDataEntity/(moles:RelatedDataEntityID | moles:RelatedDataGranuleID)/moles:repositoryIdentifier), data($RelatedDataEntity/(moles:RelatedDataEntityID | moles:RelatedDataGranuleID)/moles:localIdentifier)) } (: </relateddataentity> :) } (: </dgDataEntity> :), for $strkwrd in $DE/moles:dgStructuredKeyword return $strkwrd, if (exists($DE/moles:DataProvenance)) then $DE/moles:DataProvenance else (), if (exists($DE/moles:MetadataSecurity)) then $DE/moles:MetadataSecurity else () } (: </dgMetadataRecord> :) ) (: end of namespace strip :)"; 
     44        static String StubBObsStnQuery = "declare default element namespace 'http://ndg.nerc.ac.uk/moles/observationstation'; declare namespace moles='http://ndg.nerc.ac.uk/moles'; declare namespace f='http://ndg.nerc.ac.uk/moles/localfunctions'; declare function f:strip-namespace($e as element()) as element() (: Removes namespace info from the element tree being addressed so that it will lie in the default namespace :) { element {QName('', local-name($e))} { let $parent :=$e let $childcount := count($parent/*) return if ($childcount>0) then for $child in ($e/*) return f:strip-namespace($child) else (data($e)) } } ; declare function f:return-stub-activity($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element() (: Returns a 'stubB' style activity record to expand an activity record :) (: Security not implemented here yet :) { for $SRAct in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[ moles:dgMetadataID/moles:repositoryIdentifier=$repid and moles:dgMetadataID/moles:localIdentifier=$locid] return element {$out-element-name} { ($SRAct/moles:dgMetadataID), ($SRAct/moles:dgMetadataDescription), ($SRAct/moles:name), ($SRAct/moles:abbreviation), element dgActivity { if (exists($SRAct/*/moles:dgActivityDataCollection)) then ($SRAct/*/moles:dgActivityDataCollection) else if (exists($SRAct/*/moles:dgActivityDataProject)) then ($SRAct/*/moles:dgActivityDataProject) else if (exists($SRAct/*/dgActivityDataCampaign)) then ($SRAct/moles:dgActivity/moles:dgActivityDataCampaign) else ($SRAct/moles:dgActivity/moles:dgActivityDataInvestigation), ($SRAct/moles:dgActivity/moles:dgActivityCoverage), ($SRAct/moles:dgActivity/moles:dgActivityDuration) } (: </dgActivity> :) } (: </activity> :) } ; declare function f:return-stub-dataentity($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element() (: Returns a 'stubB' style observation station record to expand an data entity record :) (: Security not implemented here; it would be in a wrapper function :) { for $SRDE in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[ moles:dgMetadataID/moles:repositoryIdentifier=$repid and moles:dgMetadataID/moles:localIdentifier=$locid] return element {$out-element-name} { ($SRDE/moles:dgMetadataID), ($SRDE/moles:dgMetadataDescription), ($SRDE/moles:name), ($SRDE/moles:abbreviation), element dgDataEntity { ($SRDE/moles:dgDataEntity/moles:dgDataSetType), ($SRDE/moles:dgDataEntity/moles:dgDataGranule), ($SRDE/moles:dgDataEntity/moles:dgDataSummary) } (: </dgDataEntity> :) } } ; declare function f:return-stub-dpt($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element() (: Returns a 'stubB' style dpt record to expand a dpt record :) (: Security not implemented here; it would be in a wrapper function :) { for $SRDPT in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[ moles:dgMetadataID/moles:repositoryIdentifier=$repid and moles:dgMetadataID/moles:localIdentifier=$locid] return element {$out-element-name} { ($SRDPT/moles:dgMetadataID), ($SRDPT/moles:dgMetadataDescription), ($SRDPT/moles:name), ($SRDPT/moles:abbreviation), element dgDataProductionTool { ($SRDPT/moles:dgDataProductionTool/moles:contactDetails), if (exists($SRDPT/moles:dgDataProductionTool/moles:dgModel)) then ($SRDPT/moles:dgDataProductionTool/moles:dgModel) else (), if (exists($SRDPT/moles:dgDataProductionTool/moles:dgInstrument)) then ($SRDPT/moles:dgDataProductionTool/moles:dgInstrument) else () } (: </dgDataProductionTool> :) } (: </dataproductiontool> :) } ; declare function f:return-stub-obsstn($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element() (: Returns a 'stubB' style observation station record to expand an observation station record :) (: Security not implemented here yet; :) { for $SRObsStn in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[ moles:dgMetadataID/moles:repositoryIdentifier=$repid and moles:dgMetadataID/moles:localIdentifier=$locid] return element {$out-element-name} { ($SRObsStn/moles:dgMetadataID), ($SRObsStn/moles:dgMetadataDescription), ($SRObsStn/moles:name), ($SRObsStn/moles:abbreviation), element dgObservationStation { ($SRObsStn/moles:dgObservationStation/moles:contactDetails), if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform)) then element dgStationaryPlatform { $SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:position, if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgLandStation)) then element dgLandStation {''} else if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgMooring)) then element dgMooring {''} else if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgStationGroup)) then element dgStationGroup {''} else () } else if (exists($SRObsStn/moles:dgObservationStation/moles:dgMovingPlatform)) then $SRObsStn/moles:dgObservationStation/moles:dgMovingPlatform else () } (: </dgObservationStation> :) } } ; declare function f:return-stub-person($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element() (: Returns a 'stubB' style observation station record to expand a person record :) (: Security not implemented here; it would be in a wrapper function :) { for $person in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgPerson[ moles:dgMetadataID/moles:repositoryIdentifier=$repid and moles:dgMetadataID/moles:localIdentifier=$locid] return element {$out-element-name} { ($person/moles:name), ($person/moles:contactDetails), ($person/moles:dgMetadataID) } } ; declare function f:return-stub-organisation($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element() (: Returns a 'stubB' style observation station record to expand an organisation record :) (: Security not implemented here; it would be in a wrapper function :) { for $org in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgOrganisation[ moles:dgMetadataID/moles:repositoryIdentifier=$repid and moles:dgMetadataID/moles:localIdentifier=$locid] return element {$out-element-name} { ($org/moles:dgMetadataID), ($org/name), ($org/abbreviation), ($org/contactDetails) } } ; for $ObsStn in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[ moles:dgMetadataID/moles:schemeIdentifier='NDG-B0' and moles:dgMetadataID/moles:repositoryIdentifier='RepositoryID' and moles:dgMetadataID/moles:localIdentifier='LocalID'] return f:strip-namespace( element dgMetadataRecord { element dgMetadataID { element schemeIdentifier {'NDG-B1', $ObsStn/moles:dgMetadataID/moles:repositoryIdentifier, $ObsStn/moles:dgMetadataID/moles:localIdentifier } (: End </dgMetadataID> :), $ObsStn/moles:dgMetadataDescription, $ObsStn/moles:name, $ObsStn/moles:abbreviation, element dgObservationStation { $ObsStn/moles:dgObservationStation/moles:contactDetails, if (exists($ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform)) then element dgStationaryPlatform { $ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:position, if (exists($ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:dgMooring)) then element dgMooring { $ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:dgMooring/moles:dateStart, $ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:dgMooring/moles:dateEnd, for $DepositingCruise in $ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:dgMooring/moles:DepositingCruise return f:return-stub-activity('depositingcruise', data($DepositingCruise/moles:dgMetadataID/moles:repositoryIdentifier), data($DepositingCruise/moles:dgMetadataID/moles:localIdentifier)), if (exists($ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:dgMooring/moles:dgStationGrouping)) then for $StationGrouping in $ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:dgMooring/dgStationGrouping return f:return-stub-obsstn('stationgrouping', data($StationGrouping/moles:dgMetadataID/moles:repositoryIdentifier), data($StationGrouping/moles:dgMetadataID/moles:localIdentifier)) else () } (: End </dgMooring> :) else if (exists($ObsStn/dgObservationStation/dgStationaryPlatform/dgStationGroup)) then element dgStationGroup { element dgGroupedStations { if (exists($ObsStn/dgObservationStation/dgStationaryPlatform/dgStationGroup/dgGroupedStations)) then for $GroupedStation in $ObsStn/dgObservationStation/dgStationaryPlatform/dgStationGroup/dgGroupedStation/dgGroupedStations return f:return-stub-obsstn('dgGroupedStation', data($GroupedStation/moles:dgMetadataID/moles:repositoryIdentifier), data($GroupedStation/moles:dgMetadataID/moles:localIdentifier)) else () } (: End </dgGroupedStations> :) } (: End </dgStationGroup> :) else $ObsStn/moles:dgObservationStation/moles:dgLandStation } (: End </dgStationaryPlatform> :) else $ObsStn/moles:dgObservationStation/moles:dgMovingPlatform } , for $RelDep in $ObsStn/moles:dgObservationStation/moles:ObsStationDeployment return element ObsStationDeployment { $RelDep/moles:DateStart, $RelDep/moles:DateEnd, $RelDep/moles:dgMetadataID, f:return-stub-activity('activity', data($RelDep/moles:ActivityID/moles:repositoryIdentifier), data($RelDep/moles:ActivityID/moles:localIdentifier)), f:return-stub-dpt('dataproductiontool', data($RelDep/moles:DataProductionToolID/moles:repositoryIdentifier), data($RelDep/moles:DataProductionToolID/moles:localIdentifier)), for $DE in collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord where $DE/moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:repositoryIdentifier=$RelDep/moles:dgMetadataID/moles:repositoryIdentifier and $DE/moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:localIdentifier=$RelDep/moles:dgMetadataID/moles:localIdentifier return f:return-stub-dataentity('dataentity', data($DE/moles:dgMetadataID/moles:repositoryIdentifier), data($DE/moles:dgMetadataID/moles:localIdentifier)), $RelDep/moles:Coverage } (: </RelatedDeployment> :) } (: </dgObservationStation> :), for $strkwrd in $ObsStn/moles:dgStructuredKeyword return $strkwrd, if (exists($ObsStn/moles:DataProvenance)) then $ObsStn/moles:DataProvenance else (), if (exists($ObsStn/moles:MetadataSecurity)) then $ObsStn/moles:MetadataSecurity else () } (: End </dgMetadataRecord> :) ) (: End namespace strip :)"; 
     45        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"; 
     46        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='badc.nerc.ac.uk' and dgMetadataID/localIdentifier='dataent1'] 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:date($updatedate) descending return xs:date($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>"; 
     47        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 (),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 ()}"; 
     48        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()}}}"; 
     49        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>"; 
     50        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/>"; 
     51        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"; 
    4852 
    4953        private static String getNamedParam(String paramName, String[] args) { 
Note: See TracChangeset for help on using the changeset viewer.