Changeset 2236 for TI07-MOLES


Ignore:
Timestamp:
06/03/07 14:38:37 (12 years ago)
Author:
ko23
Message:

Refactoring - working versions. Still slow though.

Location:
TI07-MOLES/trunk
Files:
4 added
13 edited

Legend:

Unmodified
Added
Removed
  • TI07-MOLES/trunk/DIF/XQuery/NDG-DIF.xquery

    r2171 r2236  
    3333            element Dataset_Title {string($DE/moles:name)} 
    3434        }, 
    35         for $StructuredKeyword in ($DE//(moles:dgStructuredKeyword | moles:dgStdParameterMeasured)[(voclib:spot-vocab($voclib:gcmd_science_valids, moles:dgValidTermID/moles:ParentListID) or voclib:spot-vocab($voclib:gcmd_science_valids_correct, moles:dgValidTermID/moles:ParentListID)) and moles:ListLevel = 0]) 
     35        for $StructuredKeyword in ($DE//(moles:dgStructuredKeyword | moles:dgStdParameterMeasured)[(voclib:spot-vocab($voclib:gcmd_science_valids, moles:dgValidTermID/moles:ParentListID) or voclib:spot-vocab($voclib:gcmd_science_valids_correct, moles:dgValidTermID/moles:ParentListID))]) 
    3636                return if (exists($StructuredKeyword/*/moles:dgValidTerm)) then  
    3737                    element Parameters { 
     
    5252                    } 
    5353                else(), 
     54        for $StructuredKeyword in ($DE//(moles:dgStructuredKeyword | moles:dgDataEntity/moles:dgDataSummary/moles:dgParameterSummary/moles:dgStdParameterMeasured)[voclib:spot-vocab($voclib:gcmd_science_valids, moles:dgValidTermID/moles:ParentListID) or voclib:spot-vocab($voclib:gcmd_science_valids_correct, moles:dgValidTermID/moles:ParentListID) or voclib:spot-vocab($voclib:gcmd_science_valids_deprecated, moles:dgValidTermID/moles:ParentListID) and (not(exists(moles:ListLevel)) or moles:ListLevel=0)]) 
     55        return 
     56                element Parameters {data($StructuredKeyword/moles:dgValidTerm)}, 
    5457        for $ISOTopicCategory in ($DE/moles:dgStructuredKeyword[voclib:spot-vocab($voclib:iso_topic_list, moles:dgValidTermID/moles:ParentListID)]) 
    5558            return  
     
    6467        return  
    6568            element Sensor_Name { 
    66                 for $DepDPTAbbrev in distinct-values((collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[moles:dgMetadataID[moles:schemeIdentifier='NDG-B0' and moles:repositoryIdentifier=$DepDPT/moles:repositoryIdentifier and moles:localIdentifier=$DepDPT/moles:localIdentifier]]/moles:abbreviation)) 
     69                for $DepDPTAbbrev in ((collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[moles:dgMetadataID[moles:schemeIdentifier='NDG-B0' and moles:repositoryIdentifier=$DepDPT/moles:repositoryIdentifier and moles:localIdentifier=$DepDPT/moles:localIdentifier]]/moles:abbreviation)) 
    6770                    return element Short_Name {data($DepDPTAbbrev)}, 
    68                 for $DepDPTName in distinct-values((collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[moles:dgMetadataID[moles:schemeIdentifier='NDG-B0' and moles:repositoryIdentifier=$DepDPT/moles:repositoryIdentifier and moles:localIdentifier=$DepDPT/moles:localIdentifier]]/moles:name)) 
     71                for $DepDPTName in ((collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[moles:dgMetadataID[moles:schemeIdentifier='NDG-B0' and moles:repositoryIdentifier=$DepDPT/moles:repositoryIdentifier and moles:localIdentifier=$DepDPT/moles:localIdentifier]]/moles:name)) 
    6972                    return element Long_Name {data($DepDPTName)} 
    7073                }, 
     
    7275        return  
    7376            element Source_Name { 
    74                 for $DepObsStnAbbrev in distinct-values((collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[moles:dgMetadataID[moles:schemeIdentifier='NDG-B0' and moles:repositoryIdentifier=$DepObsStn/moles:repositoryIdentifier and moles:localIdentifier=$DepObsStn/moles:localIdentifier]]/moles:abbreviation)) 
     77                for $DepObsStnAbbrev in ((collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[moles:dgMetadataID[moles:schemeIdentifier='NDG-B0' and moles:repositoryIdentifier=$DepObsStn/moles:repositoryIdentifier and moles:localIdentifier=$DepObsStn/moles:localIdentifier]]/moles:abbreviation)) 
    7578                    return element Short_Name {data($DepObsStnAbbrev)}, 
    76                 for $DepObsStnName in distinct-values((collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[moles:dgMetadataID[moles:schemeIdentifier='NDG-B0' and moles:repositoryIdentifier=$DepObsStn/moles:repositoryIdentifier and moles:localIdentifier=$DepObsStn/moles:localIdentifier]]/moles:name)) 
     79                for $DepObsStnName in ((collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[moles:dgMetadataID[moles:schemeIdentifier='NDG-B0' and moles:repositoryIdentifier=$DepObsStn/moles:repositoryIdentifier and moles:localIdentifier=$DepObsStn/moles:localIdentifier]]/moles:name)) 
    7780                    return element Long_Name {data($DepObsStnName)} 
    7881                }, 
     
    101104        return  
    102105            element Project { 
    103                 for $DepActAbbrev in distinct-values(collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[moles:dgMetadataID[moles:schemeIdentifier='NDG-B0' and moles:repositoryIdentifier=$DepAct/moles:repositoryIdentifier and moles:localIdentifier=$DepAct/moles:localIdentifier]]/moles:abbreviation) 
     106                for $DepActAbbrev in (collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[moles:dgMetadataID[moles:schemeIdentifier='NDG-B0' and moles:repositoryIdentifier=$DepAct/moles:repositoryIdentifier and moles:localIdentifier=$DepAct/moles:localIdentifier]]/moles:abbreviation) 
    104107                    return  
    105108                        element Short_Name {data($DepActAbbrev)}, 
    106                 for $DepActName in distinct-values(collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[moles:dgMetadataID[moles:schemeIdentifier='NDG-B0' and moles:repositoryIdentifier=$DepAct/moles:repositoryIdentifier and moles:localIdentifier=$DepAct/moles:localIdentifier]]/moles:name) 
     109                for $DepActName in (collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[moles:dgMetadataID[moles:schemeIdentifier='NDG-B0' and moles:repositoryIdentifier=$DepAct/moles:repositoryIdentifier and moles:localIdentifier=$DepAct/moles:localIdentifier]]/moles:name) 
    107110                    return  
    108111                        element Long_Name {data($DepActName)} 
  • TI07-MOLES/trunk/DublinCore/XQuery/NDG-DublinCore.xquery

    r2173 r2236  
    1919        element dc:title {string($DE/name)}, 
    2020        element dc:type {'Dataset'}, 
    21         element dc:identifier {concat($DE/moles:dgMetadataID/moles:repositoryIdentifier, $utillib:moles_id_separator, 'DC', $utillib:moles_id_separator, $DE/moles:dgMetadataID/moles:localIdentifier)}, 
     21        element dc:identifier {concat($DE/dgMetadataID/repositoryIdentifier, $utillib:moles_id_separator, 'DC', $utillib:moles_id_separator, $DE/dgMetadataID/localIdentifier)}, 
    2222        element dc:description {string($DE/dgMetadataDescription/abstract/abstractText)}, 
    2323        element dc:date 
  • TI07-MOLES/trunk/MDIP/MDIPRelated.spp

    r2064 r2236  
    33        <Folder FolderName="XML Files" ExtStr="xml;cml;math;mtx;rdf;smil;svg;wml"> 
    44                <File FilePath=".\Examples\Gemini_MDIP_v0.5.xml" HomeFolder="Yes"/> 
    5                 <ExtMountFolder FolderName="C:\Documents and Settings\Kevin\Desktop\backupBODC"/> 
     5                <ExtMountFolder FolderName="C:\test"/> 
    66        </Folder> 
    77        <Folder FolderName="XSL Files" ExtStr="xsl;xslt"/> 
     
    1010                <File FilePath=".\Schemae\MDIPMetaData_v0_5.xsd" HomeFolder="Yes"/> 
    1111                <File FilePath=".\Schemae\MDIPMetaData_v1_0.xsd" HomeFolder="Yes"/> 
     12                <File FilePath=".\Schemae\MDIPMetaData_v1_2.xsd" HomeFolder="Yes"/> 
    1213                <File FilePath=".\..\v1Schema\Schemae\ndgmetadata1.3.xsd" HomeFolder="Yes"/> 
    1314        </Folder> 
  • TI07-MOLES/trunk/MDIP/XQueries/MDIP2MOLES.xquery

    r2192 r2236  
    88declare default element namespace 'http://ndg.nerc.ac.uk/moles'; 
    99declare namespace xsi='http://www.w3.org/2001/XMLSchema-instance';  
    10 declare namespace mdip='http://www.dassh.ac.uk'; 
     10declare namespace mdip='http://www.oceannet.org/mdip/xml'; 
    1111declare namespace gco='http://www.isotc211.org/2005/gco'; 
    1212 
    13 declare variable $input_collection as xs:string {'TargetCollection'}; 
     13declare variable $input_collection as xs:string {'/db/discovery'}; 
    1414declare variable $input_repository as xs:string {'Input_Repository_Code'}; 
    1515declare variable $input_repository_local as xs:string {'Input_Repository_LocalID'}; 
    16 declare variable $input_DatasetIdentifier as xs:string {'Input_Entry_ID'}; 
     16declare variable $input_DatasetIdentifier as xs:string {'RSDRA2006000377335'}; 
    1717declare variable $output_local_id as xs:string {'Output_LocalID'}; 
    18  
    19 declare variable $unknown_vocab_id as xs:string {'http://vocab.ndg.nerc.ac.uk/null'}; 
    20  
    21 declare variable $bodc_parameter_discovery_vocab as xs:string {'http://vocab.ndg.nerc.ac.uk/P021'}; 
    22  
    23 declare variable $cf_standard_names as xs:string {'http://www.cgd.ucar.edu/cms/eaton/cf-metadata/standard_name.html'}; 
    2418 
    2519for $MDIP in collection($input_collection)/mdip:Metadata[mdip:DatasetIdentifier=$input_DatasetIdentifier] 
     
    5448                        element dgDataSetType {''}, 
    5549                        element dgDataSummary { 
    56                                 for $parameter in $MDIP/mdip:Subject[SubjectVocab=$bodc_parameter_discovery_vocab] 
     50                                for $parameter in $MDIP/mdip:Subject[SubjectVocab=$voclib:bodc_parameter_discovery_vocab] 
    5751                                return 
    5852                                        element dgParameterSummary { 
     
    6357                                                                        element dgValidTerm {'dummy'}, 
    6458                                                                        element dgValidTermID { 
    65                                                                                 element ParentListID {$unknown_vocab_id}, 
     59                                                                                element ParentListID {$voclib:unknown_vocab_id}, 
    6660                                                                                element TermID {escape-uri('dummy unit', true())} 
    6761                                                                        } 
     
    10296                                                                                element dgValidTerm {if (exists($location/VerticalDatum)) then $location/VerticalDatum else 'default'}, 
    10397                                                                                element dgValidTermID { 
    104                                                                                         element ParentListID {'$unknown_vocab_id'}, 
     98                                                                                        element ParentListID {'$voclib:unknown_vocab_id'}, 
    10599                                                                                        element TermID {escape-uri(string($location/mdip:VerticalDatum), true())} 
    106100                                                                                } 
     
    214208                        element dgValidTerm {'d2b converted record'}, 
    215209                        element dgValidTermID { 
    216                                 element ParentListID {$unknown_vocab_id}, 
     210                                element ParentListID {$voclib:unknown_vocab_id}, 
    217211                                element TermID {'d2b'} 
    218212                        } 
     
    236230                                } 
    237231                        }, 
    238                 if (exists($MDIP/mdip:DIF_Creation_Date) or exists($MDIP/mdip:Last_DIF_Revision_Date)) then  
     232                for $structuredKeywords in $MDIP/mdip:Target 
     233                return  
     234                        element dgStructuredKeyword { 
     235                        element dgValidTerm {string($structuredKeywords/mdip:TargetName)}, 
     236                        element dgValidTermID { 
     237                        element ParentListID {data($structuredKeywords/mdip:TargetVocab)}, 
     238                        element TermID {data($structuredKeywords/mdip:TargetCode)} 
     239                        } 
     240                        }, 
     241                        if (exists($MDIP/mdip:DIF_Creation_Date) or exists($MDIP/mdip:Last_DIF_Revision_Date)) then  
    239242                        element dgMetadataProvenance { 
    240243                                if (exists($MDIP/mdip:DIF_Creation_Date)) then 
  • TI07-MOLES/trunk/MDIP/XQueries/NDG-MDIP.xquery

    r2173 r2236  
    11import module namespace voclib='http://ndg.nerc.ac.uk/xquery/lib/vocab' at 'xmldb:exist:///db/xqueryLib/Vocabs/vocab_xquery_lib.xquery'; 
    22import module namespace utillib='http://ndg.nerc.ac.uk/xquery/lib/utilities' at 'xmldb:exist:///db/xqueryLib/Utilities/utility_xquery_lib.xquery'; 
    3 declare default element namespace 'http://www.dassh.ac.uk'; 
     3declare default element namespace 'http://www.oceannet.org/mdip/xml'; 
    44declare namespace moles='http://ndg.nerc.ac.uk/moles'; 
    55declare namespace gco='http://www.isotc211.org/2005/gco'; 
  • TI07-MOLES/trunk/MOLES.xpr

    r2142 r2236  
    1212        <file name="MDIP/XQueries/MDIP2MOLES.xquery"/> 
    1313        <file name="StubB/XQuery/NDG-ActStubB.xquery"/> 
     14        <file name="StubB/XQuery/NDG-ActStubBnew.xquery"/> 
    1415        <file name="StubB/XQuery/NDG-DEStubB.xquery"/> 
     16        <file name="StubB/XQuery/NDG-DEStubBnew.xquery"/> 
    1517        <file name="DIF/XQuery/NDG-DIF.xquery"/> 
    1618        <file name="DIF/XQuery/NDG-DIFtemplate.xquery"/> 
    1719        <file name="StubB/XQuery/NDG-DPTStubB.xquery"/> 
     20        <file name="StubB/XQuery/NDG-DPTStubBnew.xquery"/> 
    1821        <file name="DublinCore/XQuery/NDG-DublinCore.xquery"/> 
    1922        <file name="ISO19115-19139/XQuery/NDG-ISO19115-139.xquery"/> 
     
    2528        <file name="DIF/Schemae/dif9-4.xsd"/> 
    2629        <file name="ISO19115-WMO/TC211-WMO/wmo_examples/example1.xml"/> 
     30        <file name="StubB/XQuery/NDG-ObsStnStubBnew.xquery"/> 
    2731        <file name="v1Schema/Schemae/ndgmetadata1.2.4.xsd"/> 
    2832        <file name="v1Schema/Schemae/ndgmetadata1.2.5.xsd"/> 
  • TI07-MOLES/trunk/PythonCode/wsgi/ndg_xqueries.py

    r2228 r2236  
    12981298 
    12991299ISO19139Query = '''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()}}}''' 
     1300 
     1301DIFQuery = '''import module namespace voclib='http://ndg.nerc.ac.uk/xquery/lib/vocab' at 'xmldb:exist:///db/xqueryLib/Vocabs/vocab_xquery_lib.xquery'; 
     1302import module namespace utillib='http://ndg.nerc.ac.uk/xquery/lib/utilities' at 'xmldb:exist:///db/xqueryLib/Utilities/utility_xquery_lib.xquery'; 
     1303declare default element namespace 'http://gcmd.gsfc.nasa.gov/Aboutus/xml/dif/'; 
     1304declare namespace xsi='http://www.w3.org/2001/XMLSchema-instance';  
     1305declare namespace moles='http://ndg.nerc.ac.uk/moles'; 
     1306declare variable $targetCollection as xs:string {'TargetCollection'}; 
     1307declare variable $repositoryIdentifier as xs:string {'RepositoryID'}; 
     1308declare variable $localIdentifier as xs:string {'LocalID'}; 
     1309 
     1310for $DE in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     1311    exists('moles:dgDataEntity')  
     1312    and moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'  
     1313    and moles:dgMetadataID/moles:repositoryIdentifier=$repositoryIdentifier 
     1314    and moles:dgMetadataID/moles:localIdentifier=$localIdentifier] 
     1315return 
     1316element DIF { 
     1317    attribute xsi:schemaLocation {'http://gcmd.gsfc.nasa.gov/Aboutus/xml/dif/ http://gcmd.gsfc.nasa.gov/Aboutus/xml/dif/dif_v9.4.xsd'}, 
     1318    element Entry_ID {concat($DE/moles:dgMetadataID/moles:repositoryIdentifier, $utillib:moles_id_separator, 'DIF', $utillib:moles_id_separator, $DE/moles:dgMetadataID/moles:localIdentifier)}, 
     1319    element Entry_Title {string($DE/moles:name)}, 
     1320    element Data_Set_Citation { 
     1321            for $DataCreatorRole in $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:dgRoleHolder[not(exists(moles:endDate)) or moles:endDate=''][1] 
     1322        return  
     1323            for $DataCreatorRoleHolder in collection($targetCollection)/moles:dgMetadata/*[(moles:dgMetadataID/moles:schemeIdentifier='NDG-B0' 
     1324                   and moles:dgMetadataID/moles:repositoryIdentifier=$DataCreatorRole/*/moles:repositoryIdentifier 
     1325                   and moles:dgMetadataID/moles:localIdentifier=$DataCreatorRole/*/moles:localIdentifier)] 
     1326            return  
     1327                    element Data_Creator { 
     1328                if (exists($DataCreatorRoleHolder/moles:name/moles:initials)) then  
     1329                    string(concat(string($DataCreatorRoleHolder/moles:name/moles:initials), ' ', string($DataCreatorRoleHolder/moles:name/moles:familyName))) 
     1330                else  
     1331                   string($DataCreatorRoleHolder/moles:abbreviation) 
     1332                    }, 
     1333        element Dataset_Title {string($DE/moles:name)} 
     1334    }, 
     1335    for $StructuredKeyword in ($DE//(moles:dgStructuredKeyword | moles:dgStdParameterMeasured)[(voclib:spot-vocab($voclib:gcmd_science_valids, moles:dgValidTermID/moles:ParentListID) or voclib:spot-vocab($voclib:gcmd_science_valids_correct, moles:dgValidTermID/moles:ParentListID))]) 
     1336        return if (exists($StructuredKeyword/*/moles:dgValidTerm)) then  
     1337            element Parameters { 
     1338            element Category {string($StructuredKeyword/*/moles:dgValidTerm)}, 
     1339            if (exists($StructuredKeyword//moles:dgValidSubterm)  
     1340                and $StructuredKeyword//moles:dgValidSubterm != ''  
     1341                and $StructuredKeyword//moles:dgValidSubterm != ' ') then  
     1342            for $Subterm in $StructuredKeyword//moles:dgValidSubterm[exists(moles:dgValidTerm)] 
     1343                where exists($Subterm/moles:dgValidSubterm) 
     1344                order by $Subterm/moles:ListLevel 
     1345                return  
     1346                    if ($Subterm/moles:ListLevel=1) then element Topic {string($Subterm/moles:dgValidSubterm/moles:dgValidTerm)}  
     1347                    else if ($Subterm/moles:ListLevel=2) then element Term {string($Subterm/moles:dgValidSubterm/moles:dgValidTerm)}  
     1348                    else if ($Subterm/moles:ListLevel=3) then element Variable {string($Subterm/moles:dgValidSubterm/moles:dgValidTerm)}  
     1349                    else if ($Subterm/moles:ListLevel=4) then element Detailed_Variable {string($Subterm/moles:dgValidSubterm/moles:dgValidTerm)}  
     1350                    else element GCMD_Science_Valid {string($Subterm/moles:dgValidSubterm/moles:dgValidTerm)} 
     1351            else() 
     1352                } 
     1353        else(), 
     1354    for $StructuredKeyword in ($DE//(moles:dgStructuredKeyword | moles:dgDataEntity/moles:dgDataSummary/moles:dgParameterSummary/moles:dgStdParameterMeasured)[voclib:spot-vocab($voclib:gcmd_science_valids, moles:dgValidTermID/moles:ParentListID) or voclib:spot-vocab($voclib:gcmd_science_valids_correct, moles:dgValidTermID/moles:ParentListID) or voclib:spot-vocab($voclib:gcmd_science_valids_deprecated, moles:dgValidTermID/moles:ParentListID) and (not(exists(moles:ListLevel)) or moles:ListLevel=0)]) 
     1355    return 
     1356        element Parameters {data($StructuredKeyword/moles:dgValidTerm)}, 
     1357    for $ISOTopicCategory in ($DE/moles:dgStructuredKeyword[voclib:spot-vocab($voclib:iso_topic_list, moles:dgValidTermID/moles:ParentListID)]) 
     1358        return  
     1359            element ISO_Topic_Category {string($ISOTopicCategory/moles:dgValidTerm)}, 
     1360    for $Keyword in distinct-values($DE//moles:dgStructuredKeyword[ 
     1361    not (voclib:spot-vocab($voclib:iso_topic_list, moles:dgValidTermID/moles:ParentListID) 
     1362    or voclib:spot-vocab($voclib:gcmd_science_valids, moles:dgValidTermID/moles:ParentListID) 
     1363    or voclib:spot-vocab($voclib:gcmd_science_valids_correct, moles:dgValidTermID/moles:ParentListID) 
     1364    )]/moles:dgValidTerm) 
     1365    return element Keyword {string($Keyword)},  
     1366    for $DepDPT in ($DE/moles:dgDataEntity/moles:RelatedDeployment/moles:DataProductionToolID)   
     1367    return  
     1368        element Sensor_Name { 
     1369            for $DepDPTAbbrev in ((collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[moles:dgMetadataID[moles:schemeIdentifier='NDG-B0' and moles:repositoryIdentifier=$DepDPT/moles:repositoryIdentifier and moles:localIdentifier=$DepDPT/moles:localIdentifier]]/moles:abbreviation)) 
     1370                return element Short_Name {data($DepDPTAbbrev)}, 
     1371            for $DepDPTName in ((collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[moles:dgMetadataID[moles:schemeIdentifier='NDG-B0' and moles:repositoryIdentifier=$DepDPT/moles:repositoryIdentifier and moles:localIdentifier=$DepDPT/moles:localIdentifier]]/moles:name)) 
     1372                return element Long_Name {data($DepDPTName)} 
     1373            }, 
     1374    for $DepObsStn in ($DE/moles:dgDataEntity/moles:RelatedDeployment/moles:ObservationStationID) 
     1375    return  
     1376        element Source_Name { 
     1377            for $DepObsStnAbbrev in ((collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[moles:dgMetadataID[moles:schemeIdentifier='NDG-B0' and moles:repositoryIdentifier=$DepObsStn/moles:repositoryIdentifier and moles:localIdentifier=$DepObsStn/moles:localIdentifier]]/moles:abbreviation)) 
     1378                return element Short_Name {data($DepObsStnAbbrev)}, 
     1379            for $DepObsStnName in ((collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[moles:dgMetadataID[moles:schemeIdentifier='NDG-B0' and moles:repositoryIdentifier=$DepObsStn/moles:repositoryIdentifier and moles:localIdentifier=$DepObsStn/moles:localIdentifier]]/moles:name)) 
     1380                return element Long_Name {data($DepObsStnName)} 
     1381            }, 
     1382    for $TemporalRange in ($DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDataCoverage//moles:dgDateRange) 
     1383        return  
     1384            element Temporal_Coverage 
     1385                { 
     1386                element Start_Date {data($TemporalRange/moles:DateRangeStart)}, 
     1387                element End_Date {data($TemporalRange/moles:DateRangeEnd)} 
     1388                }, 
     1389    for $TemporalTerm in ($DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDataCoverage//moles:dgArea[voclib:spot-vocab($voclib:gcmd_chronostratigraphic_valids, moles:dgValidTermID/moles:ParentListID)]/moles:dgValidTerm) 
     1390        return element Paleo_Temporal_Coverage {element Chronostratigraphic_Unit {data($TemporalTerm)}},  
     1391    for $Data_Set_Progress in ($DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDataStatus/moles:dgDatasetClosure) 
     1392        return element Data_Set_Progress {data($Data_Set_Progress)}, 
     1393    for $BoundingBox in ($DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDataCoverage//moles:BoundingBox) 
     1394    return  
     1395        element Spatial_Coverage { 
     1396                element Southernmost_Latitude {data($BoundingBox/moles:LimitSouth)}, 
     1397                element Northernmost_Latitude {data($BoundingBox/moles:LimitNorth)}, 
     1398                element Westernmost_Longitude {data($BoundingBox/moles:LimitWest)}, 
     1399                element Easternmost_Longitude {data($BoundingBox/moles:LimitEast)} 
     1400            }, 
     1401    for $Location in ($DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDataCoverage//moles:dgArea[voclib:spot-vocab($voclib:gcmd_location_valids, moles:dgValidTermID/moles:ParentListID)]) 
     1402        return element Location {$Location},  
     1403    for $DepAct in ($DE/moles:dgDataEntity/moles:RelatedDeployment/moles:ActivityID) 
     1404    return  
     1405        element Project { 
     1406            for $DepActAbbrev in (collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[moles:dgMetadataID[moles:schemeIdentifier='NDG-B0' and moles:repositoryIdentifier=$DepAct/moles:repositoryIdentifier and moles:localIdentifier=$DepAct/moles:localIdentifier]]/moles:abbreviation) 
     1407                return  
     1408                    element Short_Name {data($DepActAbbrev)}, 
     1409            for $DepActName in (collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[moles:dgMetadataID[moles:schemeIdentifier='NDG-B0' and moles:repositoryIdentifier=$DepAct/moles:repositoryIdentifier and moles:localIdentifier=$DepAct/moles:localIdentifier]]/moles:name) 
     1410                return  
     1411                    element Long_Name {data($DepActName)} 
     1412            }, 
     1413    if (exists($DE/moles:dgDataEntity/moles:dgDataGranule/moles:accessControlPolicy)) then  
     1414            for $DG in $DE/moles:dgDataEntity/moles:dgDataGranule 
     1415                return  
     1416                                element Access_Constraints { 
     1417                            if (exists($DG/moles:dgGranuleSummary/moles:dgGranuleName)) then  
     1418                                concat('For data granule ', $DG/moles:dgGranuleSummary/moles:dgGranuleName, ': ') 
     1419                            else (), 
     1420                            if (exists($DG/moles:accessControlPolicy/moles:accessControlPolicyURL)) then 
     1421                                concat('See access control policy at ', escape-uri($DG/moles:accessControlPolicy/moles:accessControlPolicyURL, true())) 
     1422                            else if (exists($DG/moles:accessControlPolicy/moles:accessControlPolicyText)) then 
     1423                                data($DG/moles:accessControlPolicy/moles:accessControlPolicyText) 
     1424                             else  
     1425                                 for $securityCondition in $DG/moles:accessControlPolicy/moles:dgSecurityCondition 
     1426                                 return 
     1427                                     if (exists($securityCondition/moles:conditionExplanationText)) then 
     1428                                         concat('Effect: ', data($securityCondition/moles:effect), ' - ', data($securityCondition/moles:conditionExplanationText)) 
     1429                                     else concat('Effect: ', data($securityCondition/moles:effect), 'needs ', data($securityCondition/moles:attauthRole), ' from ', data($securityCondition/moles:dgAttributeAuthority)) 
     1430                        } 
     1431                else (), 
     1432    if (exists($DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:dgRoleHolder)) then 
     1433        for $DataCreatorRole in $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:dgRoleHolder  
     1434            order by $DataCreatorRole/moles:startDate empty least 
     1435                        return  
     1436                    for $DataCreatorRoleHolder in collection($targetCollection)/moles:dgMetadata/(moles:dgOrganisation | moles:dgPerson) 
     1437                                        [(moles:dgMetadataID/moles:schemeIdentifier='NDG-B0' 
     1438                                        and moles:dgMetadataID/moles:repositoryIdentifier=$DataCreatorRole/(moles:dgOrganisationID | moles:dgPersonID)/moles:repositoryIdentifier 
     1439                                        and moles:dgMetadataID/moles:localIdentifier=$DataCreatorRole/(moles:dgOrganisationID | moles:dgPersonID)/moles:localIdentifier)] 
     1440                    return  
     1441                            element Originating_Center { 
     1442                    if (string(local-name($DataCreatorRoleHolder))='dgOrganisation') then 
     1443                        (string($DataCreatorRoleHolder/moles:name)) 
     1444                    else if (string(local-name($DataCreatorRoleHolder))='dgPerson') then 
     1445                        (string(concat(string($DataCreatorRoleHolder/moles:name/moles:initials), ' ', string($DataCreatorRoleHolder/moles:name/moles:familyName)))) 
     1446                    else ('empty content') 
     1447                } 
     1448    else (), 
     1449    for $DataCuratorRole in $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:dgRoleHolder[not(exists(moles:endDate)) or moles:endDate=''] 
     1450        return  
     1451            for $DataCuratorRoleHolder in collection($targetCollection)/moles:dgMetadata/*[(moles:dgMetadataID/moles:schemeIdentifier='NDG-B0' 
     1452               and moles:dgMetadataID/moles:repositoryIdentifier=$DataCuratorRole/*/moles:repositoryIdentifier 
     1453               and moles:dgMetadataID/moles:localIdentifier=$DataCuratorRole/*/moles:localIdentifier)] 
     1454                return  
     1455                    element Data_Center { 
     1456                element Data_Center_Name { 
     1457                        element Short_Name { 
     1458                            if (exists($DataCuratorRoleHolder/moles:name/moles:initials)) then  
     1459                        string(concat(string($DataCuratorRoleHolder/moles:name/moles:initials), ' ', string($DataCuratorRoleHolder/moles:name/moles:familyName))) 
     1460                   else  
     1461                       string($DataCuratorRoleHolder/moles:abbreviation) 
     1462                }, 
     1463            element Long_Name { 
     1464                    if (exists($DataCuratorRoleHolder/moles:name/moles:initials)) then  
     1465                        string(concat(string($DataCuratorRoleHolder/moles:name/moles:initials), ' ', string($DataCuratorRoleHolder/moles:name/moles:familyName))) 
     1466                    else string($DataCuratorRoleHolder/moles:name) 
     1467                } 
     1468            }, 
     1469            if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:URI)) then  
     1470                    element Data_Center_URL {data($DataCuratorRoleHolder/moles:contactDetails/moles:URI)} 
     1471            else (), 
     1472            for $DGID in $DE/moles:dgDataEntity/moles:dgDataGranule/moles:dataModelID 
     1473            return  
     1474                element Data_Set_ID {concat($DGID/moles:repositoryIdentifier, '__', $DGID/moles:schemeIdentifier, '__', $DGID/moles:localIdentifier)}, 
     1475            element  Personnel { 
     1476                    element Role {'Data Center Contact'}, 
     1477                    if (exists($DataCuratorRoleHolder/name/knownAs)) then  
     1478                        element First_Name {string($DataCuratorRoleHolder/moles:name/moles:knownAs)} 
     1479                    else if (exists($DataCuratorRoleHolder/moles:name/moles:initials)) then  
     1480                        element First_Name {string($DataCuratorRoleHolder/moles:name/moles:initials)} 
     1481                     else (),                     
     1482                     element Last_Name { 
     1483                              if (exists($DataCuratorRoleHolder/moles:name/moles:familyName)) then  
     1484                                  string($DataCuratorRoleHolder/moles:name/moles:familyName) 
     1485                    else string($DataCuratorRoleHolder/moles:name) 
     1486                        }, 
     1487                    if (exists($DataCuratorRole/moles:contactDetails/moles:eMail)) then  
     1488                        element Email {string($DataCuratorRole/moles:contactDetails/moles:eMail)} 
     1489                    else  
     1490                        if (exists($DataCuratorRoleHolder/contactDetails/eMail)) then  
     1491                                (element Email {string($DataCuratorRoleHolder/moles:contactDetails/moles:eMail)}) 
     1492                               else (), 
     1493                    if (exists($DataCuratorRole/moles:contactDetails/moles:telephone)) then  
     1494                        element Phone {string($DataCuratorRole/moles:contactDetails/moles:telephone)} 
     1495                    else if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:telephone)) then  
     1496                                element Phone {string($DataCuratorRoleHolder/moles:contactDetails/moles:telephone)} 
     1497                     else (), 
     1498                    if (exists($DataCuratorRole/moles:contactDetails/moles:fax)) then  
     1499                        element Fax {string($DataCuratorRole/moles:contactDetails/moles:fax)} 
     1500                    else if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:fax)) then  
     1501                                element Fax {string($DataCuratorRoleHolder/moles:contactDetails/moles:fax)} 
     1502                            else (), 
     1503                    if (exists($DataCuratorRole/moles:contactDetails/moles:address)) then  
     1504                        element Contact_Address { 
     1505                            for $addressline in $DataCuratorRole/moles:contactDetails/moles:address/moles:addressline 
     1506                                return element Address {data($addressline)}, 
     1507                                                        if (exists($DataCuratorRole/moles:contactDetails/moles:address/moles:city)) then  
     1508                            element City {string($DataCuratorRole/moles:contactDetails/moles:address/moles:city)} 
     1509                        else (), 
     1510                        if (exists($DataCuratorRole/moles:contactDetails/moles:address/moles:postcode)) then  
     1511                            element Postal_Code {string($DataCuratorRole/moles:contactDetails/moles:address/moles:postcode)} 
     1512                        else (), 
     1513                         if (exists($DataCuratorRole/moles:contactDetails/moles:address/moles:country)) then  
     1514                             element Country {string($DataCuratorRole/moles:contactDetails/moles:address/moles:country)} 
     1515                         else () 
     1516                         } 
     1517                    else if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:address)) then  
     1518                        element Contact_Address { 
     1519                            for $addressline in $DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:addressline 
     1520                                return element Address {data($addressline)}, 
     1521                                                            if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:city)) then  
     1522                                element City {string($DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:city)} 
     1523                            else (), 
     1524                            if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:postcode)) then  
     1525                                element Postal_Code {string($DataCuratorRole/moles:contactDetails/moles:postcode)} 
     1526                            else (), 
     1527                             if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:country)) then  
     1528                                 element Country {string($DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:country)} 
     1529                             else () 
     1530                         } 
     1531                    else () 
     1532                     } 
     1533                        }, 
     1534    element Summary {string($DE/moles:dgMetadataDescription/moles:abstract/moles:abstractText)}, 
     1535    element Related_URL  { 
     1536        element URL_Content_Type {'NDG_B_SERVICE'}, 
     1537        element URL {data($DE/moles:dgMetadataID/moles:repositoryIdentifier)}, 
     1538        element Description {'The NDG service for browsing metadata.'} 
     1539        }, 
     1540    for $DG in $DE/moles:dgDataEntity/moles:dgDataGranule 
     1541        return 
     1542            if ($DG/moles:dataModelID/moles:schemeIdentifier='NDG-A0') then  
     1543                       (element Related_URL { 
     1544                               element URL_Content_Type {'NDG_A_SERVICE'}, 
     1545                               if (exists($DG/instance/URI)) then 
     1546                                   element URL {escape-uri($DG/instance/URI, true())} 
     1547                               else if ($DG/moles:dataModelID/moles:repositoryIdentifier='badc.nerc.ac.uk') then 
     1548                                   element URL {escape-uri('http://dmgdev1.esc.rl.ac.uk/cgi-bin/ndgDataAccess?datasetSource=dmgdev1.esc.rl.ac.uk&amp;datasetID=', true())} 
     1549                               else ($DG/moles:dataModelID/moles:repositoryIdentifier), 
     1550                             element Description {'The NDG service delivering data via NDG A metadata.'} 
     1551                           }, 
     1552                      element Related_URL { 
     1553                               element URL_Content_Type {'GET DATA > CSML'}, 
     1554                               if (exists($DG/instance)) then 
     1555                                   element URL {escape-uri($DG/instance/URI, true())} 
     1556                               else if ($DG/moles:dataModelID/moles:repositoryIdentifier='badc.nerc.ac.uk') then 
     1557                                   element URL {escape-uri('http://dmgdev1.esc.rl.ac.uk/cgi-bin/ndgDataAccess?datasetSource=dmgdev1.esc.rl.ac.uk&amp;datasetID=', true())} 
     1558                               else (), 
     1559                             element Description {'The NDG service delivering data via NDG A metadata. Additional tag to be more in line with latest version of GCMD valids'} 
     1560                           }) 
     1561            else if ($DG/moles:dataModelID/moles:schemeIdentifier='CDML-0') then  
     1562                           (element Related_URL {  
     1563                                   element URL_Content_Type {'NDG_A_SERVICE'}, 
     1564                               if (exists($DG/instance)) then 
     1565                                   element URL {escape-uri($DG/instance/URI, true())} 
     1566                               else if ($DG/moles:dataModelID/moles:repositoryIdentifier='badc.nerc.ac.uk') then 
     1567                                   element URL {escape-uri('http://cdat.badc.nerc.ac.uk/cgi-bin/dxui.py?datasetURI_1=/', true())} 
     1568                               else (), 
     1569                             element Description {'The NDG service delivering data via Data extractor. Additional tag to be more in line with latest version of GCMD valids'} 
     1570                               }, 
     1571                           element Related_URL { 
     1572                               element URL_Content_Type {'GET DATA > DX'}, 
     1573                               if (exists($DG/instance)) then 
     1574                                   element URL {escape-uri($DG/instance/URI, true())} 
     1575                               else if ($DG/moles:dataModelID/moles:repositoryIdentifier='badc.nerc.ac.uk') then 
     1576                                   element URL {escape-uri('http://cdat.badc.nerc.ac.uk/cgi-bin/dxui.py?datasetURI_1=/', true())} 
     1577                               else (), 
     1578                             element Description {'The NDG service delivering data via Data extractor. Additional tag to be more in line with latest version of GCMD valids'} 
     1579                               }) 
     1580            else if ($DG/moles:dataModelID/moles:schemeIdentifier='URI') then  
     1581                       element Related_URL { 
     1582                             element URL {data($DG/moles:instance/moles:URI)}, 
     1583                             if (exists($DG/moles:instance/moles:instanceComment)) then  
     1584                                     element Description {data($DG/moles:instance/moles:instanceComment)}            
     1585                             else  
     1586                                     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.'} 
     1587                          } 
     1588        else (), 
     1589        for $RelURL_Desc in ($DE/moles:dgMetadataDescription/moles:descriptionSection/moles:descriptionOnlineReference)  
     1590        return 
     1591                       element Related_URL { 
     1592                             element URL {data($RelURL_Desc)}, 
     1593                         element Description {concat(data($RelURL_Desc/moles:name), ' - ', data($RelURL_Desc/moles:notes))}            
     1594                       }, 
     1595    element Metadata_Name {'[CEOS IDN DIF]'}, 
     1596    element Metadata_Version {'9.4'}, 
     1597    if  (exists($DE/moles:dgMetadataProvenance/moles:RecordCreation)) then  
     1598            element DIF_Creation_Date {data($DE/moles:dgMetadataProvenance/moles:RecordCreation/moles:CreatedDate)} 
     1599    else (), 
     1600    for $MDUpdt in $DE/moles:dgMetadataProvenance/moles:RecordUpdate 
     1601    return   
     1602        element DIF_Revision_History {concat(data($MDUpdt/moles:UpdateDate), ' - ', data($MDUpdt/moles:UpdateSummary), ' - ', data($MDUpdt/moles:UpdatedBy))}, 
     1603    if  (exists($DE/moles:dgMetadataProvenance/moles:RecordReview)) then  
     1604            element Future_DIF_Review_Date {data($DE/moles:dgMetadataProvenance/moles:RecordReview/moles:ReviewDate)} 
     1605    else () 
     1606        }''' 
  • TI07-MOLES/trunk/StubB/XQuery/NDG-ActStubB.xquery

    r2171 r2236  
    11import module namespace voclib='http://ndg.nerc.ac.uk/xquery/lib/vocab' at 'xmldb:exist:///db/xqueryLib/Vocabs/vocab_xquery_lib.xquery'; 
    22import module namespace utillib='http://ndg.nerc.ac.uk/xquery/lib/utilities' at 'xmldb:exist:///db/xqueryLib/Utilities/utility_xquery_lib.xquery'; 
     3(:  
     4Will return when scope problem sussed... ;( 
    35import module namespace stubblib='http://ndg.nerc.ac.uk/xquery/lib/stubb' at 'xmldb:exist:///db/xqueryLib/StubB/stubb_xquery_lib.xquery'; 
     6:) 
     7declare namespace f='http://ndg.nerc.ac.uk/moles/localfunctions'; 
    48declare default element namespace 'http://ndg.nerc.ac.uk/moles/activity';  
    59declare namespace moles='http://ndg.nerc.ac.uk/moles'; 
     
    913declare variable $localIdentifier as xs:string {'LocalID'}; 
    1014 
     15declare function f:return-stub-activity($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     16(: Returns a 'stubB' style activity record to expand an activity record :) 
     17(: Security not implemented here yet :) 
     18{ 
     19let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     20            moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     21            and moles:dgMetadataID/moles:localIdentifier=$locid]) 
     22return   
     23    if ($found = 0) then  
     24        element {$out-element-name} { 
     25            element error {'not found'}, 
     26            element repositoryIdentifier {$repid}, 
     27            element localIdentifier {$locid} 
     28        }  
     29    else ( 
     30        for $SRAct in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     31            moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     32            and moles:dgMetadataID/moles:localIdentifier=$locid]  
     33        return  
     34            element  {$out-element-name} {  
     35                ($SRAct/moles:dgMetadataID), 
     36                ($SRAct/moles:dgMetadataDescription), 
     37                ($SRAct/moles:name), 
     38                ($SRAct/moles:abbreviation), 
     39                element dgActivity { 
     40                    if (exists($SRAct/*/moles:dgActivityDataCollection)) then  
     41                        ($SRAct/*/moles:dgActivityDataCollection) 
     42                    else if (exists($SRAct/*/moles:dgActivityDataProject)) then  
     43                        ($SRAct/*/moles:dgActivityDataProject) 
     44                    else if (exists($SRAct/*/dgActivityDataCampaign)) then 
     45                        ($SRAct/moles:dgActivity/moles:dgActivityDataCampaign) 
     46                    else  
     47                        ($SRAct/moles:dgActivity/moles:dgActivityDataInvestigation),  
     48                    ($SRAct/moles:dgActivity/moles:dgActivityCoverage), 
     49                    ($SRAct/moles:dgActivity/moles:dgActivityDuration) 
     50                } (: </dgActivity> :)  
     51            } (: </activity> :)  
     52    ) 
     53} ; 
     54 
     55declare function f:return-stub-dataentity($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     56(: Returns a 'stubB' style observation station record to expand an data entity record :) 
     57(: Security not implemented yet :) 
     58{ 
     59let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     60        moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     61        and moles:dgMetadataID/moles:localIdentifier=$locid]) 
     62return   
     63    if ($found = 0) then  
     64        element {$out-element-name} { 
     65            element error {'not found'}, 
     66            element repositoryIdentifier {$repid}, 
     67            element localIdentifier {$locid} 
     68        }  
     69    else ( 
     70        for $SRDE in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     71            moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     72            and moles:dgMetadataID/moles:localIdentifier=$locid]  
     73        return   
     74            element {$out-element-name} { 
     75                ($SRDE/moles:dgMetadataID), 
     76                ($SRDE/moles:dgMetadataDescription), 
     77                ($SRDE/moles:name), 
     78                ($SRDE/moles:abbreviation), 
     79                element dgDataEntity { 
     80                    ($SRDE/moles:dgDataEntity/moles:dgDataSetType), 
     81                    ($SRDE/moles:dgDataEntity/moles:dgDataGranule), 
     82                    ($SRDE/moles:dgDataEntity/moles:dgDataSummary) 
     83                } (: </dgDataEntity> :)         
     84            } 
     85    ) 
     86} ; 
     87 
     88declare function f:return-stub-dpt($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     89(: Returns a 'stubB' style dpt record to expand a dpt record :) 
     90(: Security not implemented yet :) 
     91{ 
     92let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     93        moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     94        and moles:dgMetadataID/moles:localIdentifier=$locid]) 
     95return   
     96    if ($found = 0) then  
     97        element {$out-element-name} { 
     98            element error {'not found'}, 
     99            element repositoryIdentifier {$repid}, 
     100            element localIdentifier {$locid} 
     101        }  
     102    else ( 
     103        for $SRDPT in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     104                moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     105                and moles:dgMetadataID/moles:localIdentifier=$locid] 
     106        return   
     107            element {$out-element-name} { 
     108                $SRDPT/moles:dgMetadataID, 
     109                $SRDPT/moles:dgMetadataDescription, 
     110                $SRDPT/moles:name, 
     111                $SRDPT/moles:abbreviation, 
     112                $SRDPT/moles:logos, 
     113                element dgDataProductionTool { 
     114                    $SRDPT/moles:dgDataProductionTool/moles:contactDetails, 
     115                    if (exists($SRDPT/moles:dgDataProductionTool/moles:dgModel)) then 
     116                        $SRDPT/moles:dgDataProductionTool/moles:dgModel 
     117                    else (), 
     118                    if (exists($SRDPT/moles:dgDataProductionTool/moles:dgInstrument)) then 
     119                        $SRDPT/moles:dgDataProductionTool/moles:dgInstrument 
     120                    else () 
     121                    } (: </dgDataProductionTool> :) 
     122                } (: </dataproductiontool> :) 
     123    ) 
     124} ; 
     125 
     126declare function f:return-stub-obsstn($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     127(: Returns a 'stubB' style observation station record to expand an observation station record :) 
     128(: Security not implemented here yet;  :) 
     129{ 
     130let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     131            moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     132            and moles:dgMetadataID/moles:localIdentifier=$locid]) 
     133return   
     134    if ($found = 0) then  
     135        element {$out-element-name} { 
     136            element error {'not found'}, 
     137            element repositoryIdentifier {$repid}, 
     138            element localIdentifier {$locid} 
     139        }  
     140    else ( 
     141        for $SRObsStn in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     142            moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     143            and moles:dgMetadataID/moles:localIdentifier=$locid]  
     144        return 
     145            element {$out-element-name} { 
     146                ($SRObsStn/moles:dgMetadataID), 
     147                ($SRObsStn/moles:dgMetadataDescription), 
     148                ($SRObsStn/moles:name), 
     149                ($SRObsStn/moles:abbreviation), 
     150                element dgObservationStation { 
     151                    ($SRObsStn/moles:dgObservationStation/moles:contactDetails), 
     152                    if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform)) then 
     153                        element dgStationaryPlatform { 
     154                            $SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:position, 
     155                            if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgLandStation)) then element dgLandStation {''} 
     156                            else if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgMooring)) then element dgMooring {''} 
     157                            else if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgStationGroup)) then element dgStationGroup {''} 
     158                            else () 
     159                            } 
     160                    else if (exists($SRObsStn/moles:dgObservationStation/moles:dgMovingPlatform)) then  
     161                        $SRObsStn/moles:dgObservationStation/moles:dgMovingPlatform 
     162                    else () 
     163                } (: </dgObservationStation> :) 
     164            } 
     165    ) 
     166} ; 
     167 
     168declare function f:return-stub-person($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     169(: Returns a 'stubB' style observation station record to expand a person record :) 
     170(: Security not implemented yet :) 
     171{ 
     172let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgPerson[ 
     173            moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     174            and moles:dgMetadataID/moles:localIdentifier=$locid]) 
     175return   
     176    if ($found = 0) then  
     177        element {$out-element-name} { 
     178            element error {'not found'}, 
     179            element repositoryIdentifier {$repid}, 
     180            element localIdentifier {$locid} 
     181        }  
     182    else ( 
     183    for $person in collection($targetCollection)/moles:dgMetadata/moles:dgPerson[ 
     184        moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     185        and moles:dgMetadataID/moles:localIdentifier=$locid]  
     186    return  
     187        element  {$out-element-name}  
     188        { 
     189            ($person/moles:name), 
     190            ($person/moles:contactDetails), 
     191            ($person/moles:dgMetadataID) 
     192        } 
     193    ) 
     194} ; 
     195 
     196declare function f:return-stub-organisation($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     197(: Returns a 'stubB' style observation station record to expand an organisation record :) 
     198(: Security not implemented yet :) 
     199{ 
     200    let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgOrganisation[ 
     201                moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     202                and moles:dgMetadataID/moles:localIdentifier=$locid]) 
     203    return   
     204        if ($found = 0) then  
     205            element {$out-element-name} { 
     206                element error {'not found'}, 
     207                element repositoryIdentifier {$repid}, 
     208                element localIdentifier {$locid} 
     209            }  
     210        else ( 
     211            for $org in collection($targetCollection)/moles:dgMetadata/moles:dgOrganisation[ 
     212                moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     213                and moles:dgMetadataID/moles:localIdentifier=$locid]  
     214            return  
     215                element  {$out-element-name} { 
     216                    $org/moles:dgMetadataID, 
     217                    $org/moles:name, 
     218                    $org/moles:abbreviation, 
     219                    $org/moles:contactDetails, 
     220                    $org/moles:logos 
     221                } 
     222        ) 
     223} ; 
     224 
    11225for $Act in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
    12         moles:dgActivity!=''  
    13         and moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'  
    14         and moles:dgMetadataID/moles:repositoryIdentifier=$repositoryIdentifier 
    15         and moles:dgMetadataID/moles:localIdentifier=$localIdentifier] 
     226    moles:dgActivity!=''  
     227    and moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'  
     228    and moles:dgMetadataID/moles:repositoryIdentifier='badc.nerc.ac.uk'  
     229    and moles:dgMetadataID/moles:localIdentifier='activity3'] 
    16230return 
    17231utillib:strip-namespace(element dgMetadataRecord { 
    18         element dgMetadataID { 
    19                 element schemeIdentifier {'NDG-B1'}, 
    20                 (element repositoryIdentifier {data($Act/moles:dgMetadataID/moles:repositoryIdentifier)}), 
    21                 element localIdentifier {data($Act/moles:dgMetadataID/moles:localIdentifier)} 
    22         }, 
    23         $Act/moles:dgMetadataDescription, 
    24         $Act/moles:name, 
    25         $Act/moles:abbreviation, 
    26         element dgActivity { 
    27                 for $RelatedActivities in $Act/dgActivity/moles:relatedActivity 
    28                         return  
    29                                 element relatedActivity { 
    30                                         $RelatedActivities/moles:activityRelation, 
    31                                         stubblib:return-stub-activity('activity', data($RelatedActivities/moles:relatedActivityID/moles:repositoryIdentifier), data($RelatedActivities/moles:relatedActivityID/moles:localIdentifier)) 
    32                         },      (: </relatedActivity> :) 
    33                 if (exists($Act/moles:dgActivity/moles:dgActivityDataCollection)) then ($Act/moles:dgActivity/moles:dgActivityDataCollection) 
    34                 else if (exists($Act/moles:dgActivity/moles:dgActivityDataProject)) then ($Act/moles:dgActivity/moles:dgActivityDataProject) 
    35                 else if (exists($Act/moles:dgActivity/moles:dgActivityDataInvestigation)) then ($Act/moles:dgActivity/moles:dgActivityDataInvestigation) 
    36                 else if (exists($Act/moles:dgActivity/moles:dgActivityDataCampaign)) then ($Act/moles:dgActivity/moles:dgActivityDataCampaign) 
    37                 else (), 
    38                 element dgActivityRole { 
    39                         element dgInvestigator { 
    40                                 element dgPrincipalInvestigator { 
    41                                         ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:dgMetadataID), 
    42                                         ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:roleName), 
    43                                         ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:abbreviation), 
    44                                         ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:contactDetails), 
    45                                         for $PIRole in $Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:dgRoleHolder  
    46                                                 order by $PIRole/moles:startDate empty least, $PIRole/moles:endDate empty least 
    47                                                 return  
    48                                                 element dgRoleHolder { 
    49                                                         if (exists($PIRole/moles:dgOrganisationID)) then  
    50                                                                 stubblib:return-stub-organisation('organisation', data($PIRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($PIRole/moles:dgOrganisationID/moles:localIdentifier))  
    51                                                         else if (exists($PIRole/moles:dgPersonID)) then  
    52                                                                 stubblib:return-stub-person('person', string($PIRole/moles:dgPersonID/moles:repositoryIdentifier), string($PIRole/moles:dgPersonID/moles:localIdentifier))  
    53                                                         else (), 
    54                                                         ($PIRole/moles:startDate), 
    55                                                         if (exists($PIRole/moles:endDate)) then  
    56                                                             ($PIRole/moles:endDate) 
    57                                                         else (), 
    58                                                         if (exists($PIRole/moles:localName)) then  
    59                                                             ($PIRole/moles:localName) 
    60                                                         else () 
    61                                                 } (: </dgRoleHolder> :) 
    62                                 }, (: </dgPrincipalInvestigator> :) 
    63                                 for $CI in $Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgCoInvestigator  
    64                                 return   
    65                                         element dgCoInvestigator { 
    66                                             ($CI/moles:dgMetadataID), 
    67                                             ($CI/moles:roleName), 
    68                                             ($CI/moles:abbreviation), 
    69                                             ($CI/moles:contactDetails), 
    70                                             for $CIRole in $CI/moles:dgRoleHolder  
    71                                                 order by $CIRole/moles:startDate empty least, $CIRole/moles:endDate empty least 
    72                                             return  
    73                                                 element dgRoleHolder { 
    74                                                         if (exists(CIRole/moles:dgOrganisationID)) then  
    75                                                                 stubblib:return-stub-organisation('organisation', data($CIRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($CIRole/moles:dgOrganisationID/moles:localIdentifier))  
    76                                                         else if (exists($CIRole/moles:dgPersonID)) then  
    77                                                                 stubblib:return-stub-person('person', string($CIRole/moles:dgPersonID/moles:repositoryIdentifier), string($CIRole/moles:dgPersonID/moles:localIdentifier))  
    78                                                         else (), 
    79                                                         ($CIRole/moles:startDate), 
    80                                                         if (exists($CIRole/moles:endDate)) then  
    81                                                             ($CIRole/moles:endDate) 
    82                                                         else (), 
    83                                                         if (exists($CIRole/moles:localName)) then  
    84                                                             ($CIRole/moles:localName) 
    85                                                         else () 
    86                                                 } (: </dgRoleHolder> :) 
    87                                 } (: </dgCoInvestigator> :) 
    88                 }, (: </dgInvestigator> :) 
    89                 if (exists($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact)) then ( 
    90                         element dgTechnicalContact { 
    91                                 ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:dgMetadataID), 
    92                                 ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:roleName), 
    93                                 ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:abbreviation), 
    94                                 ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:contactDetails), 
    95                                 for $TechConRole in $Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:dgRoleHolder  
    96                                         order by $TechConRole/moles:startDate empty least, $TechConRole/moles:endDate empty least 
    97                                         return  
    98                                         element dgRoleHolder { 
    99                                                 if (exists($TechConRole/moles:dgOrganisationID)) then  
    100                                                         stubblib:return-stub-organisation('organisation', data($TechConRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($TechConRole/moles:dgOrganisationID/moles:localIdentifier))  
    101                                                 else if (exists($TechConRole/moles:dgPersonID)) then  
    102                                                         stubblib:return-stub-person('person', string($TechConRole/moles:dgPersonID/moles:repositoryIdentifier), string($TechConRole/moles:dgPersonID/moles:localIdentifier))  
    103                                                 else (), 
    104                                             ($TechConRole/moles:startDate), 
    105                                             if (exists($TechConRole/moles:endDate)) then  
    106                                                 ($TechConRole/moles:endDate) 
    107                                             else (), 
    108                                             if (exists($TechConRole/moles:localName)) then  
    109                                                     ($TechConRole/moles:localName) 
    110                                             else () 
    111                                         } (: </dgRoleHolder> :) 
    112                         } (: </dgTechnicalContact> :) 
    113                 ) 
    114                 else (), 
    115                 if (exists($Act/dgActivity/dgActivityRole/dgProjectManager)) then ( 
    116                         element dgProjectManager { 
    117                                 ($Act/dgActivity/dgActivityRole/dgProjectManager/dgMetadataID), 
    118                                 ($Act/dgActivity/dgActivityRole/dgProjectManager/roleName), 
    119                                 ($Act/dgActivity/dgActivityRole/dgProjectManager/abbreviation), 
    120                                 ($Act/dgActivity/dgActivityRole/dgProjectManager/contactDetails), 
    121                                 for $PMRole in $Act/dgActivity/dgActivityRole/dgProjectManager/dgRoleHolder  
    122                                         order by $PMRole/startDate empty least, $PMRole/endDate empty least 
    123                                         return  
    124                                         element dgRoleHolder { 
    125                                                 if (exists($PMRole/moles:dgOrganisationID)) then  
    126                                                         stubblib:return-stub-organisation('organisation', data($PMRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($PMRole/moles:dgOrganisationID/moles:localIdentifier))  
    127                                                 else if (exists($PMRole/moles:dgPersonID)) then  
    128                                                         stubblib:return-stub-person('person', string($PMRole/moles:dgPersonID/moles:repositoryIdentifier), string($PMRole/moles:dgPersonID/moles:localIdentifier))  
    129                                                 else (), 
    130                                                 ($PMRole/startDate), 
    131                                                 if (exists($PMRole/moles:endDate)) then  
    132                                                     ($PMRole/moles:endDate) 
    133                                                 else (), 
    134                                                 if (exists($PMRole/moles:localName)) then  
    135                                                     ($PMRole/moles:localName) 
    136                                                 else () 
    137                                         } (: </dgRoleHolder> :) 
    138                         } (: </dgProjectManager> :) 
    139                 ) 
    140                 else () 
    141         }, (: </dgActivityRole> :) 
    142         for $RelDep in $Act/moles:dgActivity/moles:ActivityDeployment 
    143                 return 
    144                 element ActivityDeployment { 
    145                         ($RelDep/moles:DateStart), 
    146                         if (exists($RelDep/moles:DateEnd)) then  
    147                             ($RelDep/moles:DateEnd) 
    148                         else (), 
    149                         ($RelDep/moles:dgMetadataID), 
    150                         stubblib:return-stub-dpt('dataproductiontool', data($RelDep/moles:DataProductionToolID/moles:repositoryIdentifier), data($RelDep/moles:DataProductionToolID/moles:localIdentifier)), 
    151                         stubblib:return-stub-obsstn('observationstation', data($RelDep/moles:ObservationStationID/moles:repositoryIdentifier), data($RelDep/moles:ObservationStationID/moles:localIdentifier)), 
    152                         for $DE in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord 
    153                                 where $DE/moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:repositoryIdentifier=$RelDep/moles:dgMetadataID/moles:repositoryIdentifier 
    154                                         and $DE/moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:localIdentifier=$RelDep/moles:dgMetadataID/moles:localIdentifier 
    155                         return 
    156                                 stubblib:return-stub-dataentity('dataentity', data($DE/moles:dgMetadataID/moles:repositoryIdentifier), data($DE/moles:dgMetadataID/moles:localIdentifier)) 
    157                 }, (: </ActivityDeployment> :) 
    158                 if (exists($Act/dgActivityCoverage)) then 
    159                     ($Act/dgActivityCoverage) 
    160                     else (), 
    161                 if (exists($Act/dgActivityDuration)) then 
    162                     ($Act/dgActivityDuration) 
    163                     else () 
    164         } , (: </dgActivity> :) 
    165         for $strkwrd in $Act/moles:dgStructuredKeyword return $strkwrd, 
    166         if (exists($Act/moles:dgMetadataProvenance)) then $Act/moles:dgMetadataProvenance else (), 
    167         if (exists($Act/moles:dgMetadataSecurity)) then $Act/moles:dgMetadataSecurity else () 
     232    element dgMetadataID { 
     233        element schemeIdentifier {'NDG-B1'}, 
     234        (element repositoryIdentifier {data($Act/moles:dgMetadataID/moles:repositoryIdentifier)}), 
     235        element localIdentifier {data($Act/moles:dgMetadataID/moles:localIdentifier)} 
     236    }, 
     237    $Act/moles:dgMetadataDescription, 
     238    $Act/moles:name, 
     239    $Act/moles:abbreviation, 
     240    element dgActivity { 
     241        for $RelatedActivities in $Act/dgActivity/moles:relatedActivity 
     242            return  
     243                element relatedActivity { 
     244                    $RelatedActivities/moles:activityRelation, 
     245                    f:return-stub-activity('activity', data($RelatedActivities/moles:relatedActivityID/moles:repositoryIdentifier), data($RelatedActivities/moles:relatedActivityID/moles:localIdentifier)) 
     246            },    (: </relatedActivity> :) 
     247        if (exists($Act/moles:dgActivity/moles:dgActivityDataCollection)) then ($Act/moles:dgActivity/moles:dgActivityDataCollection) 
     248        else if (exists($Act/moles:dgActivity/moles:dgActivityDataProject)) then ($Act/moles:dgActivity/moles:dgActivityDataProject) 
     249        else if (exists($Act/moles:dgActivity/moles:dgActivityDataInvestigation)) then ($Act/moles:dgActivity/moles:dgActivityDataInvestigation) 
     250        else if (exists($Act/moles:dgActivity/moles:dgActivityDataCampaign)) then ($Act/moles:dgActivity/moles:dgActivityDataCampaign) 
     251        else (), 
     252        element dgActivityRole { 
     253            element dgInvestigator { 
     254                element dgPrincipalInvestigator { 
     255                    ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:dgMetadataID), 
     256                    ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:roleName), 
     257                    ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:abbreviation), 
     258                    ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:contactDetails), 
     259                    for $PIRole in $Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgPrincipalInvestigator/moles:dgRoleHolder  
     260                        order by $PIRole/moles:startDate empty least, $PIRole/moles:endDate empty least 
     261                        return  
     262                        element dgRoleHolder { 
     263                            if (exists($PIRole/moles:dgOrganisationID)) then  
     264                                f:return-stub-organisation('organisation', data($PIRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($PIRole/moles:dgOrganisationID/moles:localIdentifier))  
     265                            else if (exists($PIRole/moles:dgPersonID)) then  
     266                                f:return-stub-person('person', string($PIRole/moles:dgPersonID/moles:repositoryIdentifier), string($PIRole/moles:dgPersonID/moles:localIdentifier))  
     267                            else (), 
     268                            ($PIRole/moles:startDate), 
     269                            if (exists($PIRole/moles:endDate)) then  
     270                                ($PIRole/moles:endDate) 
     271                            else (), 
     272                            if (exists($PIRole/moles:localName)) then  
     273                                ($PIRole/moles:localName) 
     274                            else () 
     275                        } (: </dgRoleHolder> :) 
     276                }, (: </dgPrincipalInvestigator> :) 
     277                for $CI in $Act/moles:dgActivity/moles:dgActivityRole/moles:dgInvestigator/moles:dgCoInvestigator  
     278                return   
     279                    element dgCoInvestigator { 
     280                        ($CI/moles:dgMetadataID), 
     281                        ($CI/moles:roleName), 
     282                        ($CI/moles:abbreviation), 
     283                        ($CI/moles:contactDetails), 
     284                        for $CIRole in $CI/moles:dgRoleHolder  
     285                            order by $CIRole/moles:startDate empty least, $CIRole/moles:endDate empty least 
     286                        return  
     287                        element dgRoleHolder { 
     288                            if (exists(CIRole/moles:dgOrganisationID)) then  
     289                                f:return-stub-organisation('organisation', data($CIRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($CIRole/moles:dgOrganisationID/moles:localIdentifier))  
     290                            else if (exists($CIRole/moles:dgPersonID)) then  
     291                                f:return-stub-person('person', string($CIRole/moles:dgPersonID/moles:repositoryIdentifier), string($CIRole/moles:dgPersonID/moles:localIdentifier))  
     292                            else (), 
     293                            ($CIRole/moles:startDate), 
     294                            if (exists($CIRole/moles:endDate)) then  
     295                                ($CIRole/moles:endDate) 
     296                            else (), 
     297                            if (exists($CIRole/moles:localName)) then  
     298                                ($CIRole/moles:localName) 
     299                            else () 
     300                        } (: </dgRoleHolder> :) 
     301                } (: </dgCoInvestigator> :) 
     302        }, (: </dgInvestigator> :) 
     303        if (exists($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact)) then ( 
     304            element dgTechnicalContact { 
     305                ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:dgMetadataID), 
     306                ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:roleName), 
     307                ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:abbreviation), 
     308                ($Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:contactDetails), 
     309                for $TechConRole in $Act/moles:dgActivity/moles:dgActivityRole/moles:dgTechnicalContact/moles:dgRoleHolder  
     310                    order by $TechConRole/moles:startDate empty least, $TechConRole/moles:endDate empty least 
     311                    return  
     312                    element dgRoleHolder { 
     313                        if (exists($TechConRole/moles:dgOrganisationID)) then  
     314                            f:return-stub-organisation('organisation', data($TechConRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($TechConRole/moles:dgOrganisationID/moles:localIdentifier))  
     315                        else if (exists($TechConRole/moles:dgPersonID)) then  
     316                            f:return-stub-person('person', string($TechConRole/moles:dgPersonID/moles:repositoryIdentifier), string($TechConRole/moles:dgPersonID/moles:localIdentifier))  
     317                        else (), 
     318                        ($TechConRole/moles:startDate), 
     319                        if (exists($TechConRole/moles:endDate)) then  
     320                            ($TechConRole/moles:endDate) 
     321                        else (), 
     322                        if (exists($TechConRole/moles:localName)) then  
     323                                ($TechConRole/moles:localName) 
     324                           else () 
     325                    } (: </dgRoleHolder> :) 
     326            } (: </dgTechnicalContact> :) 
     327        ) 
     328        else (), 
     329        if (exists($Act/dgActivity/dgActivityRole/dgProjectManager)) then ( 
     330            element dgProjectManager { 
     331                ($Act/dgActivity/dgActivityRole/dgProjectManager/dgMetadataID), 
     332                ($Act/dgActivity/dgActivityRole/dgProjectManager/roleName), 
     333                ($Act/dgActivity/dgActivityRole/dgProjectManager/abbreviation), 
     334                ($Act/dgActivity/dgActivityRole/dgProjectManager/contactDetails), 
     335                for $PMRole in $Act/dgActivity/dgActivityRole/dgProjectManager/dgRoleHolder  
     336                    order by $PMRole/startDate empty least, $PMRole/endDate empty least 
     337                    return  
     338                    element dgRoleHolder { 
     339                        if (exists($PMRole/moles:dgOrganisationID)) then  
     340                            f:return-stub-organisation('organisation', data($PMRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($PMRole/moles:dgOrganisationID/moles:localIdentifier))  
     341                        else if (exists($PMRole/moles:dgPersonID)) then  
     342                            f:return-stub-person('person', string($PMRole/moles:dgPersonID/moles:repositoryIdentifier), string($PMRole/moles:dgPersonID/moles:localIdentifier))  
     343                        else (), 
     344                        ($PMRole/startDate), 
     345                        if (exists($PMRole/moles:endDate)) then  
     346                            ($PMRole/moles:endDate) 
     347                        else (), 
     348                        if (exists($PMRole/moles:localName)) then  
     349                            ($PMRole/moles:localName) 
     350                        else () 
     351                    } (: </dgRoleHolder> :) 
     352            } (: </dgProjectManager> :) 
     353        ) 
     354        else () 
     355    }, (: </dgActivityRole> :) 
     356    for $RelDep in $Act/moles:dgActivity/moles:ActivityDeployment 
     357        return 
     358        element ActivityDeployment { 
     359            ($RelDep/moles:DateStart), 
     360            if (exists($RelDep/moles:DateEnd)) then  
     361                ($RelDep/moles:DateEnd) 
     362            else (), 
     363            ($RelDep/moles:dgMetadataID), 
     364            f:return-stub-dpt('dataproductiontool', data($RelDep/moles:DataProductionToolID/moles:repositoryIdentifier), data($RelDep/moles:DataProductionToolID/moles:localIdentifier)), 
     365            f:return-stub-obsstn('observationstation', data($RelDep/moles:ObservationStationID/moles:repositoryIdentifier), data($RelDep/moles:ObservationStationID/moles:localIdentifier)), 
     366            for $DE in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord 
     367                where $DE/moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:repositoryIdentifier=$RelDep/moles:dgMetadataID/moles:repositoryIdentifier 
     368                        and $DE/moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:localIdentifier=$RelDep/moles:dgMetadataID/moles:localIdentifier 
     369            return 
     370                f:return-stub-dataentity('dataentity', data($DE/moles:dgMetadataID/moles:repositoryIdentifier), data($DE/moles:dgMetadataID/moles:localIdentifier)) 
     371        }, (: </ActivityDeployment> :) 
     372        if (exists($Act/dgActivityCoverage)) then 
     373            ($Act/dgActivityCoverage) 
     374            else (), 
     375        if (exists($Act/dgActivityDuration)) then 
     376            ($Act/dgActivityDuration) 
     377            else () 
     378    } , (: </dgActivity> :) 
     379    for $strkwrd in $Act/moles:dgStructuredKeyword return $strkwrd, 
     380    if (exists($Act/moles:dgMetadataProvenance)) then $Act/moles:dgMetadataProvenance else (), 
     381    if (exists($Act/moles:dgMetadataSecurity)) then $Act/moles:dgMetadataSecurity else () 
    168382} (:</dgMRecord>:) 
    169383) (: End namespace strip :) 
  • TI07-MOLES/trunk/StubB/XQuery/NDG-DEStubB.xquery

    r2171 r2236  
    11import module namespace voclib='http://ndg.nerc.ac.uk/xquery/lib/vocab' at 'xmldb:exist:///db/xqueryLib/Vocabs/vocab_xquery_lib.xquery'; 
    22import module namespace utillib='http://ndg.nerc.ac.uk/xquery/lib/utilities' at 'xmldb:exist:///db/xqueryLib/Utilities/utility_xquery_lib.xquery'; 
     3(:  
     4Will return when scope problem sussed... ;( 
    35import module namespace stubblib='http://ndg.nerc.ac.uk/xquery/lib/stubb' at 'xmldb:exist:///db/xqueryLib/StubB/stubb_xquery_lib.xquery'; 
     6:) 
     7declare namespace f='http://ndg.nerc.ac.uk/moles/localfunctions'; 
    48declare default element namespace 'http://ndg.nerc.ac.uk/moles/dataentity';  
    59declare namespace moles='http://ndg.nerc.ac.uk/moles'; 
     
    913declare variable $localIdentifier as xs:string {'LocalID'}; 
    1014 
     15declare function f:return-stub-activity($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     16(: Returns a 'stubB' style activity record to expand an activity record :) 
     17(: Security not implemented here yet :) 
     18{ 
     19let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     20            moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     21            and moles:dgMetadataID/moles:localIdentifier=$locid]) 
     22return   
     23    if ($found = 0) then  
     24        element {$out-element-name} { 
     25            element error {'not found'}, 
     26            element repositoryIdentifier {$repid}, 
     27            element localIdentifier {$locid} 
     28        }  
     29    else ( 
     30        for $SRAct in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     31            moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     32            and moles:dgMetadataID/moles:localIdentifier=$locid]  
     33        return  
     34            element  {$out-element-name} {  
     35                ($SRAct/moles:dgMetadataID), 
     36                ($SRAct/moles:dgMetadataDescription), 
     37                ($SRAct/moles:name), 
     38                ($SRAct/moles:abbreviation), 
     39                element dgActivity { 
     40                    if (exists($SRAct/*/moles:dgActivityDataCollection)) then  
     41                        ($SRAct/*/moles:dgActivityDataCollection) 
     42                    else if (exists($SRAct/*/moles:dgActivityDataProject)) then  
     43                        ($SRAct/*/moles:dgActivityDataProject) 
     44                    else if (exists($SRAct/*/dgActivityDataCampaign)) then 
     45                        ($SRAct/moles:dgActivity/moles:dgActivityDataCampaign) 
     46                    else  
     47                        ($SRAct/moles:dgActivity/moles:dgActivityDataInvestigation),  
     48                    ($SRAct/moles:dgActivity/moles:dgActivityCoverage), 
     49                    ($SRAct/moles:dgActivity/moles:dgActivityDuration) 
     50                } (: </dgActivity> :)  
     51            } (: </activity> :)  
     52    ) 
     53} ; 
     54 
     55declare function f:return-stub-dataentity($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     56(: Returns a 'stubB' style observation station record to expand an data entity record :) 
     57(: Security not implemented yet :) 
     58{ 
     59let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     60        moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     61        and moles:dgMetadataID/moles:localIdentifier=$locid]) 
     62return   
     63    if ($found = 0) then  
     64        element {$out-element-name} { 
     65            element error {'not found'}, 
     66            element repositoryIdentifier {$repid}, 
     67            element localIdentifier {$locid} 
     68        }  
     69    else ( 
     70        for $SRDE in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     71            moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     72            and moles:dgMetadataID/moles:localIdentifier=$locid]  
     73        return   
     74            element {$out-element-name} { 
     75                ($SRDE/moles:dgMetadataID), 
     76                ($SRDE/moles:dgMetadataDescription), 
     77                ($SRDE/moles:name), 
     78                ($SRDE/moles:abbreviation), 
     79                element dgDataEntity { 
     80                    ($SRDE/moles:dgDataEntity/moles:dgDataSetType), 
     81                    ($SRDE/moles:dgDataEntity/moles:dgDataGranule), 
     82                    ($SRDE/moles:dgDataEntity/moles:dgDataSummary) 
     83                } (: </dgDataEntity> :)         
     84            } 
     85    ) 
     86} ; 
     87 
     88declare function f:return-stub-dpt($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     89(: Returns a 'stubB' style dpt record to expand a dpt record :) 
     90(: Security not implemented yet :) 
     91{ 
     92let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     93        moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     94        and moles:dgMetadataID/moles:localIdentifier=$locid]) 
     95return   
     96    if ($found = 0) then  
     97        element {$out-element-name} { 
     98            element error {'not found'}, 
     99            element repositoryIdentifier {$repid}, 
     100            element localIdentifier {$locid} 
     101        }  
     102    else ( 
     103        for $SRDPT in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     104                moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     105                and moles:dgMetadataID/moles:localIdentifier=$locid] 
     106        return   
     107            element {$out-element-name} { 
     108                $SRDPT/moles:dgMetadataID, 
     109                $SRDPT/moles:dgMetadataDescription, 
     110                $SRDPT/moles:name, 
     111                $SRDPT/moles:abbreviation, 
     112                $SRDPT/moles:logos, 
     113                element dgDataProductionTool { 
     114                    $SRDPT/moles:dgDataProductionTool/moles:contactDetails, 
     115                    if (exists($SRDPT/moles:dgDataProductionTool/moles:dgModel)) then 
     116                        $SRDPT/moles:dgDataProductionTool/moles:dgModel 
     117                    else (), 
     118                    if (exists($SRDPT/moles:dgDataProductionTool/moles:dgInstrument)) then 
     119                        $SRDPT/moles:dgDataProductionTool/moles:dgInstrument 
     120                    else () 
     121                    } (: </dgDataProductionTool> :) 
     122                } (: </dataproductiontool> :) 
     123    ) 
     124} ; 
     125 
     126declare function f:return-stub-obsstn($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     127(: Returns a 'stubB' style observation station record to expand an observation station record :) 
     128(: Security not implemented here yet;  :) 
     129{ 
     130let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     131            moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     132            and moles:dgMetadataID/moles:localIdentifier=$locid]) 
     133return   
     134    if ($found = 0) then  
     135        element {$out-element-name} { 
     136            element error {'not found'}, 
     137            element repositoryIdentifier {$repid}, 
     138            element localIdentifier {$locid} 
     139        }  
     140    else ( 
     141        for $SRObsStn in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     142            moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     143            and moles:dgMetadataID/moles:localIdentifier=$locid]  
     144        return 
     145            element {$out-element-name} { 
     146                ($SRObsStn/moles:dgMetadataID), 
     147                ($SRObsStn/moles:dgMetadataDescription), 
     148                ($SRObsStn/moles:name), 
     149                ($SRObsStn/moles:abbreviation), 
     150                element dgObservationStation { 
     151                    ($SRObsStn/moles:dgObservationStation/moles:contactDetails), 
     152                    if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform)) then 
     153                        element dgStationaryPlatform { 
     154                            $SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:position, 
     155                            if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgLandStation)) then element dgLandStation {''} 
     156                            else if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgMooring)) then element dgMooring {''} 
     157                            else if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgStationGroup)) then element dgStationGroup {''} 
     158                            else () 
     159                            } 
     160                    else if (exists($SRObsStn/moles:dgObservationStation/moles:dgMovingPlatform)) then  
     161                        $SRObsStn/moles:dgObservationStation/moles:dgMovingPlatform 
     162                    else () 
     163                } (: </dgObservationStation> :) 
     164            } 
     165    ) 
     166} ; 
     167 
     168declare function f:return-stub-person($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     169(: Returns a 'stubB' style observation station record to expand a person record :) 
     170(: Security not implemented yet :) 
     171{ 
     172let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgPerson[ 
     173            moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     174            and moles:dgMetadataID/moles:localIdentifier=$locid]) 
     175return   
     176    if ($found = 0) then  
     177        element {$out-element-name} { 
     178            element error {'not found'}, 
     179            element repositoryIdentifier {$repid}, 
     180            element localIdentifier {$locid} 
     181        }  
     182    else ( 
     183    for $person in collection($targetCollection)/moles:dgMetadata/moles:dgPerson[ 
     184        moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     185        and moles:dgMetadataID/moles:localIdentifier=$locid]  
     186    return  
     187        element  {$out-element-name}  
     188        { 
     189            ($person/moles:name), 
     190            ($person/moles:contactDetails), 
     191            ($person/moles:dgMetadataID) 
     192        } 
     193    ) 
     194} ; 
     195 
     196declare function f:return-stub-organisation($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     197(: Returns a 'stubB' style observation station record to expand an organisation record :) 
     198(: Security not implemented yet :) 
     199{ 
     200    let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgOrganisation[ 
     201                moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     202                and moles:dgMetadataID/moles:localIdentifier=$locid]) 
     203    return   
     204        if ($found = 0) then  
     205            element {$out-element-name} { 
     206                element error {'not found'}, 
     207                element repositoryIdentifier {$repid}, 
     208                element localIdentifier {$locid} 
     209            }  
     210        else ( 
     211            for $org in collection($targetCollection)/moles:dgMetadata/moles:dgOrganisation[ 
     212                moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     213                and moles:dgMetadataID/moles:localIdentifier=$locid]  
     214            return  
     215                element  {$out-element-name} { 
     216                    $org/moles:dgMetadataID, 
     217                    $org/moles:name, 
     218                    $org/moles:abbreviation, 
     219                    $org/moles:contactDetails, 
     220                    $org/moles:logos 
     221                } 
     222        ) 
     223} ; 
     224 
    11225for $DE in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
    12 moles:dgDataEntity!=''  
    13 and moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'  
    14 and moles:dgMetadataID/moles:repositoryIdentifier=$repositoryIdentifier 
    15 and moles:dgMetadataID/moles:localIdentifier=$localIdentifier] 
     226exists(moles:dgDataEntity)  
     227and moles:dgMetadataID[ 
     228moles:schemeIdentifier='NDG-B0'  
     229and moles:repositoryIdentifier='badc.nerc.ac.uk'  
     230and moles:localIdentifier='dataent1']] 
    16231return 
    17232utillib:strip-namespace(element dgMetadataRecord { 
    18         element dgMetadataID { 
    19                 element schemeIdentifier {'NDG-B1'}, 
    20                 $DE/moles:dgMetadataID/moles:repositoryIdentifier, 
    21                 $DE/moles:dgMetadataID/moles:localIdentifier 
    22         }, (: </dgMetadataID> :) 
    23         $DE/moles:dgMetadataDescription, 
    24         $DE/moles:name, 
    25         $DE/moles:abbreviation, 
    26         element dgDataEntity { 
    27                 $DE/moles:dgDataEntity/moles:dgDataSetType, 
    28                 $DE/moles:dgDataEntity/moles:dgDataObjectType, 
    29                 $DE/moles:dgDataEntity/moles:dgDataGranule, 
    30                 $DE/moles:dgDataEntity/moles:dgDataSummary, 
    31                 element dgDataRoles { 
    32                         if (exists($DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:dgMetadataID)) then  
    33                                 element dgDataCreator { 
    34                                 $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:dgMetadataID, 
    35                                 $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:roleName, 
    36                                 $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:abbreviation, 
    37                                 $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:contactDetails, 
    38                                 for $DataCreatorRole in $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:dgRoleHolder  
    39                                         order by $DataCreatorRole/moles:startDate empty least, $DataCreatorRole/moles:endDate empty least 
    40                                         return  
    41                                                 element dgRoleHolder { 
    42                                                         if (exists($DataCreatorRole/moles:dgOrganisationID)) then  
    43                                                                 stubblib:return-stub-organisation('organisation', data($DataCreatorRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($DataCreatorRole/moles:dgOrganisationID/moles:localIdentifier))  
    44                                                         else if (exists($DataCreatorRole/moles:dgPersonID)) then  
    45                                                                 stubblib:return-stub-person('person', string($DataCreatorRole/moles:dgPersonID/moles:repositoryIdentifier), string($DataCreatorRole/moles:dgPersonID/moles:localIdentifier))  
    46                                                         else (), 
    47                                                         $DataCreatorRole/moles:startDate, 
    48                                                         $DataCreatorRole/moles:endDate, 
    49                                                         $DataCreatorRole/moles:localName 
    50                                                 } (: </dgRoleHolder> :) 
    51                                         } (: </dgDataCreator>) :) 
    52                         else (), 
    53                         if (exists($DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:dgMetadataID)) then  
    54                                 element dgDataCurator { 
    55                                 $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:dgMetadataID, 
    56                                 $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:roleName, 
    57                                 $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:abbreviation, 
    58                                 $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:contactDetails, 
    59                                 for $DataCuratorRole in $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:dgRoleHolder  
    60                                         order by $DataCuratorRole/moles:startDate empty least, $DataCuratorRole/moles:endDate empty least 
    61                                         return  
    62                                                 element dgRoleHolder { 
    63                                                         if (exists($DataCuratorRole/moles:dgOrganisationID)) then  
    64                                                                 stubblib:return-stub-organisation('organisation', data($DataCuratorRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($DataCuratorRole/moles:dgOrganisationID/moles:localIdentifier))  
    65                                                         else if (exists($DataCuratorRole/moles:dgPersonID)) then  
    66                                                                 stubblib:return-stub-person('person', string($DataCuratorRole/moles:dgPersonID/moles:repositoryIdentifier), string($DataCuratorRole/moles:dgPersonID/moles:localIdentifier))  
    67                                                         else (), 
    68                                                         $DataCuratorRole/moles:startDate, 
    69                                                         $DataCuratorRole/moles:endDate, 
    70                                                         $DataCuratorRole/moles:localName 
    71                                                 } (: </dgRoleHolder> :) 
    72                         } (: </dgDataCurator> :)  
    73                         else (), 
    74                         if (exists($DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataOtherRoles/moles:dgMetadataID)) then  
    75                                 element dgDataOtherRoles { 
    76                                 $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataOtherRoles/moles:dgMetadataID, 
    77                                 $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataOtherRoles/moles:roleName, 
    78                                 $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataOtherRoles/moles:abbreviation, 
    79                                 $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataOtherRoles/moles:contactDetails, 
    80                                 for $DataOtherRolesRole in $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataOtherRoles/moles:dgRoleHolder  
    81                                         order by $DataOtherRolesRole/moles:startDate empty least, $DataOtherRolesRole/moles:endDate empty least 
    82                                         return 
    83                                                 element dgRoleHolder { 
    84                                                         if (exists($DataOtherRolesRole/moles:dgOrganisationID)) then  
    85                                                                 stubblib:return-stub-organisation('organisation', data($DataOtherRolesRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($DataOtherRolesRole/moles:dgOrganisationID/moles:localIdentifier))  
    86                                                         else if (exists($DataOtherRolesRole/moles:dgPersonID)) then  
    87                                                                 stubblib:return-stub-person('person', string($DataOtherRolesRole/moles:dgPersonID/moles:repositoryIdentifier), string($DataOtherRolesRole/moles:dgPersonID/moles:localIdentifier))  
    88                                                         else (), 
    89                                                         $DataOtherRolesRole/moles:startDate, 
    90                                                         $DataOtherRolesRole/moles:endDate, 
    91                                                         $DataOtherRolesRole/moles:localName 
    92                                                 } (: </dgRoleHolder> :) 
    93                         } (: </dgDataOtherRoles> :) 
    94                         else () 
    95                 } , (: </dgDataRoles> :) 
    96                 for $RelDep in $DE/moles:dgDataEntity/moles:RelatedDeployment 
    97                         return 
    98                         element RelatedDeployment { 
    99                         $RelDep/moles:DateStart, 
    100                         $RelDep/moles:DateEnd, 
    101                         $RelDep/moles:dgMetadataID, 
    102                         stubblib:return-stub-activity('activity', data($RelDep/moles:ActivityID/moles:repositoryIdentifier), data($RelDep/moles:ActivityID/moles:localIdentifier)), 
    103                         stubblib:return-stub-dpt('dataproductiontool', data($RelDep/moles:DataProductionToolID/moles:repositoryIdentifier), data($RelDep/moles:DataProductionToolID/moles:localIdentifier)), 
    104                         stubblib:return-stub-obsstn('observationstation', data($RelDep/moles:ObservationStationID/moles:repositoryIdentifier), data($RelDep/moles:ObservationStationID/moles:localIdentifier)), 
    105                         $RelDep/moles:Coverage 
    106                 } (: </RelatedDeployment> :)  
    107                 , 
    108                 for $RelatedDataEntity in $DE/moles:dgDataEntity/moles:dgRelatedDataEntity 
    109                         return 
    110                                 element relateddataentity { 
    111                                 element relation { 
    112                                         $RelatedDataEntity/moles:RelationID/moles:dgValidTerm, 
    113                                         $RelatedDataEntity/moles:RelationID/moles:dgValidTermID 
    114                                 }, (: </relation> :) 
    115                                 stubblib:return-stub-dataentity('dataentity', data($RelatedDataEntity/(moles:RelatedDataEntityID | moles:RelatedDataGranuleID)/moles:repositoryIdentifier), data($RelatedDataEntity/(moles:RelatedDataEntityID | moles:RelatedDataGranuleID)/moles:localIdentifier)) 
    116                                 } (: </relateddataentity> :) 
    117         } (: </dgDataEntity> :), 
    118         for $strkwrd in $DE/moles:dgStructuredKeyword return $strkwrd, 
    119         if (exists($DE/moles:dgMetadataProvenance)) then $DE/moles:dgMetadataProvenance else (), 
    120         if (exists($DE/moles:dgMetadataSecurity)) then $DE/moles:dgMetadataSecurity else () 
     233    element dgMetadataID { 
     234        element schemeIdentifier {'NDG-B1'}, 
     235        $DE/moles:dgMetadataID/moles:repositoryIdentifier, 
     236        $DE/moles:dgMetadataID/moles:localIdentifier 
     237    }, (: </dgMetadataID> :) 
     238    $DE/moles:dgMetadataDescription, 
     239    $DE/moles:name, 
     240    $DE/moles:abbreviation, 
     241    element dgDataEntity { 
     242        $DE/moles:dgDataEntity/moles:dgDataSetType, 
     243        $DE/moles:dgDataEntity/moles:dgDataObjectType, 
     244        $DE/moles:dgDataEntity/moles:dgDataGranule, 
     245        $DE/moles:dgDataEntity/moles:dgDataSummary, 
     246        element dgDataRoles { 
     247            if (exists($DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:dgMetadataID)) then  
     248                element dgDataCreator { 
     249                $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:dgMetadataID, 
     250                $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:roleName, 
     251                $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:abbreviation, 
     252                $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:contactDetails, 
     253                for $DataCreatorRole in $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCreator/moles:dgRoleHolder  
     254                    order by $DataCreatorRole/moles:startDate empty least, $DataCreatorRole/moles:endDate empty least 
     255                    return  
     256                        element dgRoleHolder { 
     257                            if (exists($DataCreatorRole/moles:dgOrganisationID)) then  
     258                                f:return-stub-organisation('organisation', data($DataCreatorRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($DataCreatorRole/moles:dgOrganisationID/moles:localIdentifier))  
     259                            else if (exists($DataCreatorRole/moles:dgPersonID)) then  
     260                                f:return-stub-person('person', string($DataCreatorRole/moles:dgPersonID/moles:repositoryIdentifier), string($DataCreatorRole/moles:dgPersonID/moles:localIdentifier))  
     261                            else (), 
     262                            $DataCreatorRole/moles:startDate, 
     263                            $DataCreatorRole/moles:endDate, 
     264                            $DataCreatorRole/moles:localName 
     265                        } (: </dgRoleHolder> :) 
     266                    } (: </dgDataCreator>) :) 
     267            else (), 
     268            if (exists($DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:dgMetadataID)) then  
     269                element dgDataCurator { 
     270                $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:dgMetadataID, 
     271                $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:roleName, 
     272                $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:abbreviation, 
     273                $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:contactDetails, 
     274                for $DataCuratorRole in $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:dgRoleHolder  
     275                    order by $DataCuratorRole/moles:startDate empty least, $DataCuratorRole/moles:endDate empty least 
     276                    return  
     277                        element dgRoleHolder { 
     278                            if (exists($DataCuratorRole/moles:dgOrganisationID)) then  
     279                                f:return-stub-organisation('organisation', data($DataCuratorRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($DataCuratorRole/moles:dgOrganisationID/moles:localIdentifier))  
     280                            else if (exists($DataCuratorRole/moles:dgPersonID)) then  
     281                                f:return-stub-person('person', string($DataCuratorRole/moles:dgPersonID/moles:repositoryIdentifier), string($DataCuratorRole/moles:dgPersonID/moles:localIdentifier))  
     282                            else (), 
     283                            $DataCuratorRole/moles:startDate, 
     284                            $DataCuratorRole/moles:endDate, 
     285                            $DataCuratorRole/moles:localName 
     286                        } (: </dgRoleHolder> :) 
     287            } (: </dgDataCurator> :)  
     288            else (), 
     289            if (exists($DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataOtherRoles/moles:dgMetadataID)) then  
     290                element dgDataOtherRoles { 
     291                $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataOtherRoles/moles:dgMetadataID, 
     292                $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataOtherRoles/moles:roleName, 
     293                $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataOtherRoles/moles:abbreviation, 
     294                $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataOtherRoles/moles:contactDetails, 
     295                for $DataOtherRolesRole in $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataOtherRoles/moles:dgRoleHolder  
     296                    order by $DataOtherRolesRole/moles:startDate empty least, $DataOtherRolesRole/moles:endDate empty least 
     297                    return 
     298                        element dgRoleHolder { 
     299                            if (exists($DataOtherRolesRole/moles:dgOrganisationID)) then  
     300                                f:return-stub-organisation('organisation', data($DataOtherRolesRole/moles:dgOrganisationID/moles:repositoryIdentifier), data($DataOtherRolesRole/moles:dgOrganisationID/moles:localIdentifier))  
     301                            else if (exists($DataOtherRolesRole/moles:dgPersonID)) then  
     302                                f:return-stub-person('person', string($DataOtherRolesRole/moles:dgPersonID/moles:repositoryIdentifier), string($DataOtherRolesRole/moles:dgPersonID/moles:localIdentifier))  
     303                            else (), 
     304                            $DataOtherRolesRole/moles:startDate, 
     305                            $DataOtherRolesRole/moles:endDate, 
     306                            $DataOtherRolesRole/moles:localName 
     307                        } (: </dgRoleHolder> :) 
     308            } (: </dgDataOtherRoles> :) 
     309            else () 
     310        } , (: </dgDataRoles> :) 
     311        for $RelDep in $DE/moles:dgDataEntity/moles:RelatedDeployment 
     312            return 
     313            element RelatedDeployment { 
     314            $RelDep/moles:DateStart, 
     315            $RelDep/moles:DateEnd, 
     316            $RelDep/moles:dgMetadataID, 
     317            f:return-stub-activity('activity', data($RelDep/moles:ActivityID/moles:repositoryIdentifier), data($RelDep/moles:ActivityID/moles:localIdentifier)), 
     318            f:return-stub-dpt('dataproductiontool', data($RelDep/moles:DataProductionToolID/moles:repositoryIdentifier), data($RelDep/moles:DataProductionToolID/moles:localIdentifier)), 
     319            f:return-stub-obsstn('observationstation', data($RelDep/moles:ObservationStationID/moles:repositoryIdentifier), data($RelDep/moles:ObservationStationID/moles:localIdentifier)), 
     320            $RelDep/moles:Coverage 
     321        } (: </RelatedDeployment> :)  
     322        , 
     323        for $RelatedDataEntity in $DE/moles:dgDataEntity/moles:dgRelatedDataEntity 
     324            return 
     325                element relateddataentity { 
     326                element relation { 
     327                    $RelatedDataEntity/moles:RelationID/moles:dgValidTerm, 
     328                    $RelatedDataEntity/moles:RelationID/moles:dgValidTermID 
     329                }, (: </relation> :) 
     330                f:return-stub-dataentity('dataentity', data($RelatedDataEntity/(moles:RelatedDataEntityID | moles:RelatedDataGranuleID)/moles:repositoryIdentifier), data($RelatedDataEntity/(moles:RelatedDataEntityID | moles:RelatedDataGranuleID)/moles:localIdentifier)) 
     331                } (: </relateddataentity> :) 
     332    } (: </dgDataEntity> :), 
     333    for $strkwrd in $DE/moles:dgStructuredKeyword return $strkwrd, 
     334    if (exists($DE/moles:dgMetadataProvenance)) then $DE/moles:dgMetadataProvenance else (), 
     335    if (exists($DE/moles:dgMetadataSecurity)) then $DE/moles:dgMetadataSecurity else () 
    121336} (: </dgMetadataRecord> :) 
    122337) (: end of namespace strip :) 
  • TI07-MOLES/trunk/StubB/XQuery/NDG-DPTStubB.xquery

    r2171 r2236  
    22import module namespace voclib='http://ndg.nerc.ac.uk/xquery/lib/vocab' at 'xmldb:exist:///db/xqueryLib/Vocabs/vocab_xquery_lib.xquery'; 
    33import module namespace utillib='http://ndg.nerc.ac.uk/xquery/lib/utilities' at 'xmldb:exist:///db/xqueryLib/Utilities/utility_xquery_lib.xquery'; 
     4(:  
     5Will return when scope problem sussed... ;( 
    46import module namespace stubblib='http://ndg.nerc.ac.uk/xquery/lib/stubb' at 'xmldb:exist:///db/xqueryLib/StubB/stubb_xquery_lib.xquery'; 
     7:) 
     8declare namespace f='http://ndg.nerc.ac.uk/moles/localfunctions'; 
    59declare namespace moles='http://ndg.nerc.ac.uk/moles'; 
    610 
     
    913declare variable $localIdentifier as xs:string {'LocalID'}; 
    1014 
     15declare function f:return-stub-activity($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     16(: Returns a 'stubB' style activity record to expand an activity record :) 
     17(: Security not implemented here yet :) 
     18{ 
     19let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     20            moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     21            and moles:dgMetadataID/moles:localIdentifier=$locid]) 
     22return   
     23    if ($found = 0) then  
     24        element {$out-element-name} { 
     25            element error {'not found'}, 
     26            element repositoryIdentifier {$repid}, 
     27            element localIdentifier {$locid} 
     28        }  
     29    else ( 
     30        for $SRAct in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     31            moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     32            and moles:dgMetadataID/moles:localIdentifier=$locid]  
     33        return  
     34            element  {$out-element-name} {  
     35                ($SRAct/moles:dgMetadataID), 
     36                ($SRAct/moles:dgMetadataDescription), 
     37                ($SRAct/moles:name), 
     38                ($SRAct/moles:abbreviation), 
     39                element dgActivity { 
     40                    if (exists($SRAct/*/moles:dgActivityDataCollection)) then  
     41                        ($SRAct/*/moles:dgActivityDataCollection) 
     42                    else if (exists($SRAct/*/moles:dgActivityDataProject)) then  
     43                        ($SRAct/*/moles:dgActivityDataProject) 
     44                    else if (exists($SRAct/*/dgActivityDataCampaign)) then 
     45                        ($SRAct/moles:dgActivity/moles:dgActivityDataCampaign) 
     46                    else  
     47                        ($SRAct/moles:dgActivity/moles:dgActivityDataInvestigation),  
     48                    ($SRAct/moles:dgActivity/moles:dgActivityCoverage), 
     49                    ($SRAct/moles:dgActivity/moles:dgActivityDuration) 
     50                } (: </dgActivity> :)  
     51            } (: </activity> :)  
     52    ) 
     53} ; 
     54 
     55declare function f:return-stub-dataentity($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     56(: Returns a 'stubB' style observation station record to expand an data entity record :) 
     57(: Security not implemented yet :) 
     58{ 
     59let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     60        moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     61        and moles:dgMetadataID/moles:localIdentifier=$locid]) 
     62return   
     63    if ($found = 0) then  
     64        element {$out-element-name} { 
     65            element error {'not found'}, 
     66            element repositoryIdentifier {$repid}, 
     67            element localIdentifier {$locid} 
     68        }  
     69    else ( 
     70        for $SRDE in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     71            moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     72            and moles:dgMetadataID/moles:localIdentifier=$locid]  
     73        return   
     74            element {$out-element-name} { 
     75                ($SRDE/moles:dgMetadataID), 
     76                ($SRDE/moles:dgMetadataDescription), 
     77                ($SRDE/moles:name), 
     78                ($SRDE/moles:abbreviation), 
     79                element dgDataEntity { 
     80                    ($SRDE/moles:dgDataEntity/moles:dgDataSetType), 
     81                    ($SRDE/moles:dgDataEntity/moles:dgDataGranule), 
     82                    ($SRDE/moles:dgDataEntity/moles:dgDataSummary) 
     83                } (: </dgDataEntity> :)         
     84            } 
     85    ) 
     86} ; 
     87 
     88declare function f:return-stub-dpt($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     89(: Returns a 'stubB' style dpt record to expand a dpt record :) 
     90(: Security not implemented yet :) 
     91{ 
     92let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     93        moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     94        and moles:dgMetadataID/moles:localIdentifier=$locid]) 
     95return   
     96    if ($found = 0) then  
     97        element {$out-element-name} { 
     98            element error {'not found'}, 
     99            element repositoryIdentifier {$repid}, 
     100            element localIdentifier {$locid} 
     101        }  
     102    else ( 
     103        for $SRDPT in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     104                moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     105                and moles:dgMetadataID/moles:localIdentifier=$locid] 
     106        return   
     107            element {$out-element-name} { 
     108                $SRDPT/moles:dgMetadataID, 
     109                $SRDPT/moles:dgMetadataDescription, 
     110                $SRDPT/moles:name, 
     111                $SRDPT/moles:abbreviation, 
     112                $SRDPT/moles:logos, 
     113                element dgDataProductionTool { 
     114                    $SRDPT/moles:dgDataProductionTool/moles:contactDetails, 
     115                    if (exists($SRDPT/moles:dgDataProductionTool/moles:dgModel)) then 
     116                        $SRDPT/moles:dgDataProductionTool/moles:dgModel 
     117                    else (), 
     118                    if (exists($SRDPT/moles:dgDataProductionTool/moles:dgInstrument)) then 
     119                        $SRDPT/moles:dgDataProductionTool/moles:dgInstrument 
     120                    else () 
     121                    } (: </dgDataProductionTool> :) 
     122                } (: </dataproductiontool> :) 
     123    ) 
     124} ; 
     125 
     126declare function f:return-stub-obsstn($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     127(: Returns a 'stubB' style observation station record to expand an observation station record :) 
     128(: Security not implemented here yet;  :) 
     129{ 
     130let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     131            moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     132            and moles:dgMetadataID/moles:localIdentifier=$locid]) 
     133return   
     134    if ($found = 0) then  
     135        element {$out-element-name} { 
     136            element error {'not found'}, 
     137            element repositoryIdentifier {$repid}, 
     138            element localIdentifier {$locid} 
     139        }  
     140    else ( 
     141        for $SRObsStn in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     142            moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     143            and moles:dgMetadataID/moles:localIdentifier=$locid]  
     144        return 
     145            element {$out-element-name} { 
     146                ($SRObsStn/moles:dgMetadataID), 
     147                ($SRObsStn/moles:dgMetadataDescription), 
     148                ($SRObsStn/moles:name), 
     149                ($SRObsStn/moles:abbreviation), 
     150                element dgObservationStation { 
     151                    ($SRObsStn/moles:dgObservationStation/moles:contactDetails), 
     152                    if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform)) then 
     153                        element dgStationaryPlatform { 
     154                            $SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:position, 
     155                            if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgLandStation)) then element dgLandStation {''} 
     156                            else if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgMooring)) then element dgMooring {''} 
     157                            else if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgStationGroup)) then element dgStationGroup {''} 
     158                            else () 
     159                            } 
     160                    else if (exists($SRObsStn/moles:dgObservationStation/moles:dgMovingPlatform)) then  
     161                        $SRObsStn/moles:dgObservationStation/moles:dgMovingPlatform 
     162                    else () 
     163                } (: </dgObservationStation> :) 
     164            } 
     165    ) 
     166} ; 
     167 
     168declare function f:return-stub-person($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     169(: Returns a 'stubB' style observation station record to expand a person record :) 
     170(: Security not implemented yet :) 
     171{ 
     172let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgPerson[ 
     173            moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     174            and moles:dgMetadataID/moles:localIdentifier=$locid]) 
     175return   
     176    if ($found = 0) then  
     177        element {$out-element-name} { 
     178            element error {'not found'}, 
     179            element repositoryIdentifier {$repid}, 
     180            element localIdentifier {$locid} 
     181        }  
     182    else ( 
     183    for $person in collection($targetCollection)/moles:dgMetadata/moles:dgPerson[ 
     184        moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     185        and moles:dgMetadataID/moles:localIdentifier=$locid]  
     186    return  
     187        element  {$out-element-name}  
     188        { 
     189            ($person/moles:name), 
     190            ($person/moles:contactDetails), 
     191            ($person/moles:dgMetadataID) 
     192        } 
     193    ) 
     194} ; 
     195 
     196declare function f:return-stub-organisation($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     197(: Returns a 'stubB' style observation station record to expand an organisation record :) 
     198(: Security not implemented yet :) 
     199{ 
     200    let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgOrganisation[ 
     201                moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     202                and moles:dgMetadataID/moles:localIdentifier=$locid]) 
     203    return   
     204        if ($found = 0) then  
     205            element {$out-element-name} { 
     206                element error {'not found'}, 
     207                element repositoryIdentifier {$repid}, 
     208                element localIdentifier {$locid} 
     209            }  
     210        else ( 
     211            for $org in collection($targetCollection)/moles:dgMetadata/moles:dgOrganisation[ 
     212                moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     213                and moles:dgMetadataID/moles:localIdentifier=$locid]  
     214            return  
     215                element  {$out-element-name} { 
     216                    $org/moles:dgMetadataID, 
     217                    $org/moles:name, 
     218                    $org/moles:abbreviation, 
     219                    $org/moles:contactDetails, 
     220                    $org/moles:logos 
     221                } 
     222        ) 
     223} ; 
     224 
    11225for $DPT in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
    12 moles:dgDataProductionTool!=''  
    13 and moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'  
    14 and moles:dgMetadataID/moles:repositoryIdentifier=$repositoryIdentifier 
    15 and moles:dgMetadataID/moles:localIdentifier=$localIdentifier] 
    16 return 
    17 utillib:strip-namespace(element dgMetadataRecord { 
    18         $DPT/dgMetadataID, 
    19                 element dgMetadataID { 
    20                         element schemeIdentifier {'NDG-B1'}, 
    21                         $DPT/moles:dgMetadataID/moles:repositoryIdentifier, 
    22                         $DPT/moles:dgMetadataID/moles:localIdentifier 
    23                 } (: End </dgMetadataID> :),  
    24         $DPT/moles:dgMetadataDescription, 
    25         $DPT/moles:name, 
    26         $DPT/moles:abbreviation, 
    27         element dgDataProductionTool {  
    28                 $DPT/moles:contactDetails, 
    29                 if (exists($DPT/moles:dgModel)) then $DPT/moles:dgModel 
    30                 else $DPT/moles:dgInstrument  
    31         , 
    32         if (exists($DPT/moles:dgDPTRoles)) then  
    33                 element dgDPTRoles {'Roles are available, and will be added soon'}  
    34         else(), 
    35         for $RelDep in $DPT/moles:dgDataProductionTool/moles:DPTDeployment  
    36         return  
    37                 element DPTDeployment {  
    38                         $RelDep/moles:DateStart, 
    39                         $RelDep/moles:DateEnd, 
    40                         $RelDep/moles:dgMetadataID, 
    41                         stubblib:return-stub-activity('activity', data($RelDep/moles:ActivityID/moles:repositoryIdentifier), data($RelDep/moles:ActivityID/moles:localIdentifier)), 
    42                         stubblib:return-stub-obsstn('observationstation', data($RelDep/moles:ObservationStationID/moles:repositoryIdentifier), data($RelDep/moles:ObservationStationID/moles:localIdentifier)), 
    43                         for $DE in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord 
    44                                 where $DE/moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:repositoryIdentifier=$RelDep/moles:dgMetadataID/moles:repositoryIdentifier 
    45                                         and $DE/moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:localIdentifier=$RelDep/moles:dgMetadataID/moles:localIdentifier 
    46                         return 
    47                                 stubblib:return-stub-dataentity('dataentity', data($DE/moles:dgMetadataID/moles:repositoryIdentifier), data($DE/moles:dgMetadataID/moles:localIdentifier)), 
    48                         $RelDep/moles:Coverage 
    49                 } (: </DPTDeployment> :)  
    50         } (: </dgDataProductionTool> :),  
    51         for $strkwrd in $DPT/moles:dgStructuredKeyword return $strkwrd, 
    52         if (exists($DPT/moles:dgMetadataProvenance)) then $DPT/moles:dgMetadataProvenance else (), 
    53         if (exists($DPT/moles:dgMetadataSecurity)) then $DPT/moles:dgMetadataSecurity else () 
     226    moles:dgDataProductionTool!=''  
     227    and moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'  
     228    and moles:dgMetadataID/moles:repositoryIdentifier='badc.nerc.ac.uk'  
     229    and moles:dgMetadataID/moles:localIdentifier='dpt1']  
     230return  
     231utillib:strip-namespace(element dgMetadataRecord {  
     232    $DPT/dgMetadataID, 
     233        element dgMetadataID { 
     234            element schemeIdentifier {'NDG-B1'}, 
     235            $DPT/moles:dgMetadataID/moles:repositoryIdentifier, 
     236            $DPT/moles:dgMetadataID/moles:localIdentifier 
     237        } (: End </dgMetadataID> :),  
     238    $DPT/moles:dgMetadataDescription, 
     239    $DPT/moles:name, 
     240    $DPT/moles:abbreviation, 
     241    element dgDataProductionTool {  
     242        $DPT/moles:contactDetails, 
     243        if (exists($DPT/moles:dgModel)) then $DPT/moles:dgModel 
     244        else $DPT/moles:dgInstrument  
     245    , 
     246    if (exists($DPT/moles:dgDPTRoles)) then  
     247        element dgDPTRoles {'Roles are available, and will be added soon'}  
     248    else(), 
     249    for $RelDep in $DPT/moles:dgDataProductionTool/moles:DPTDeployment  
     250    return  
     251        element DPTDeployment {  
     252            $RelDep/moles:DateStart, 
     253            $RelDep/moles:DateEnd, 
     254            $RelDep/moles:dgMetadataID, 
     255            f:return-stub-activity('activity', data($RelDep/moles:ActivityID/moles:repositoryIdentifier), data($RelDep/moles:ActivityID/moles:localIdentifier)), 
     256            f:return-stub-obsstn('observationstation', data($RelDep/moles:ObservationStationID/moles:repositoryIdentifier), data($RelDep/moles:ObservationStationID/moles:localIdentifier)), 
     257            for $DE in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord 
     258                where $DE/moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:repositoryIdentifier=$RelDep/moles:dgMetadataID/moles:repositoryIdentifier 
     259                        and $DE/moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:localIdentifier=$RelDep/moles:dgMetadataID/moles:localIdentifier 
     260            return 
     261                f:return-stub-dataentity('dataentity', data($DE/moles:dgMetadataID/moles:repositoryIdentifier), data($DE/moles:dgMetadataID/moles:localIdentifier)), 
     262            $RelDep/moles:Coverage 
     263        } (: </DPTDeployment> :)  
     264    } (: </dgDataProductionTool> :),  
     265    for $strkwrd in $DPT/moles:dgStructuredKeyword return $strkwrd, 
     266    if (exists($DPT/moles:dgMetadataProvenance)) then $DPT/moles:dgMetadataProvenance else (), 
     267    if (exists($DPT/moles:dgMetadataSecurity)) then $DPT/moles:dgMetadataSecurity else () 
    54268} (:End </dgMetadataRecord> :) 
    55269) (: End namespace strip :) 
  • TI07-MOLES/trunk/StubB/XQuery/NDG-ObsStnStubB.xquery

    r2171 r2236  
    22import module namespace voclib='http://ndg.nerc.ac.uk/xquery/lib/vocab' at 'xmldb:exist:///db/xqueryLib/Vocabs/vocab_xquery_lib.xquery'; 
    33import module namespace utillib='http://ndg.nerc.ac.uk/xquery/lib/utilities' at 'xmldb:exist:///db/xqueryLib/Utilities/utility_xquery_lib.xquery'; 
     4(:  
     5Will return when scope problem sussed... ;( 
    46import module namespace stubblib='http://ndg.nerc.ac.uk/xquery/lib/stubb' at 'xmldb:exist:///db/xqueryLib/StubB/stubb_xquery_lib.xquery'; 
     7:) 
     8declare namespace f='http://ndg.nerc.ac.uk/moles/localfunctions'; 
    59declare namespace moles='http://ndg.nerc.ac.uk/moles'; 
    610 
     
    913declare variable $localIdentifier as xs:string {'LocalID'}; 
    1014 
     15declare function f:return-stub-activity($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     16(: Returns a 'stubB' style activity record to expand an activity record :) 
     17(: Security not implemented here yet :) 
     18{ 
     19let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     20            moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     21            and moles:dgMetadataID/moles:localIdentifier=$locid]) 
     22return   
     23    if ($found = 0) then  
     24        element {$out-element-name} { 
     25            element error {'not found'}, 
     26            element repositoryIdentifier {$repid}, 
     27            element localIdentifier {$locid} 
     28        }  
     29    else ( 
     30        for $SRAct in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     31            moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     32            and moles:dgMetadataID/moles:localIdentifier=$locid]  
     33        return  
     34            element  {$out-element-name} {  
     35                ($SRAct/moles:dgMetadataID), 
     36                ($SRAct/moles:dgMetadataDescription), 
     37                ($SRAct/moles:name), 
     38                ($SRAct/moles:abbreviation), 
     39                element dgActivity { 
     40                    if (exists($SRAct/*/moles:dgActivityDataCollection)) then  
     41                        ($SRAct/*/moles:dgActivityDataCollection) 
     42                    else if (exists($SRAct/*/moles:dgActivityDataProject)) then  
     43                        ($SRAct/*/moles:dgActivityDataProject) 
     44                    else if (exists($SRAct/*/dgActivityDataCampaign)) then 
     45                        ($SRAct/moles:dgActivity/moles:dgActivityDataCampaign) 
     46                    else  
     47                        ($SRAct/moles:dgActivity/moles:dgActivityDataInvestigation),  
     48                    ($SRAct/moles:dgActivity/moles:dgActivityCoverage), 
     49                    ($SRAct/moles:dgActivity/moles:dgActivityDuration) 
     50                } (: </dgActivity> :)  
     51            } (: </activity> :)  
     52    ) 
     53} ; 
     54 
     55declare function f:return-stub-dataentity($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     56(: Returns a 'stubB' style observation station record to expand an data entity record :) 
     57(: Security not implemented yet :) 
     58{ 
     59let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     60        moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     61        and moles:dgMetadataID/moles:localIdentifier=$locid]) 
     62return   
     63    if ($found = 0) then  
     64        element {$out-element-name} { 
     65            element error {'not found'}, 
     66            element repositoryIdentifier {$repid}, 
     67            element localIdentifier {$locid} 
     68        }  
     69    else ( 
     70        for $SRDE in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     71            moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     72            and moles:dgMetadataID/moles:localIdentifier=$locid]  
     73        return   
     74            element {$out-element-name} { 
     75                ($SRDE/moles:dgMetadataID), 
     76                ($SRDE/moles:dgMetadataDescription), 
     77                ($SRDE/moles:name), 
     78                ($SRDE/moles:abbreviation), 
     79                element dgDataEntity { 
     80                    ($SRDE/moles:dgDataEntity/moles:dgDataSetType), 
     81                    ($SRDE/moles:dgDataEntity/moles:dgDataGranule), 
     82                    ($SRDE/moles:dgDataEntity/moles:dgDataSummary) 
     83                } (: </dgDataEntity> :)         
     84            } 
     85    ) 
     86} ; 
     87 
     88declare function f:return-stub-dpt($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     89(: Returns a 'stubB' style dpt record to expand a dpt record :) 
     90(: Security not implemented yet :) 
     91{ 
     92let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     93        moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     94        and moles:dgMetadataID/moles:localIdentifier=$locid]) 
     95return   
     96    if ($found = 0) then  
     97        element {$out-element-name} { 
     98            element error {'not found'}, 
     99            element repositoryIdentifier {$repid}, 
     100            element localIdentifier {$locid} 
     101        }  
     102    else ( 
     103        for $SRDPT in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     104                moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     105                and moles:dgMetadataID/moles:localIdentifier=$locid] 
     106        return   
     107            element {$out-element-name} { 
     108                $SRDPT/moles:dgMetadataID, 
     109                $SRDPT/moles:dgMetadataDescription, 
     110                $SRDPT/moles:name, 
     111                $SRDPT/moles:abbreviation, 
     112                $SRDPT/moles:logos, 
     113                element dgDataProductionTool { 
     114                    $SRDPT/moles:dgDataProductionTool/moles:contactDetails, 
     115                    if (exists($SRDPT/moles:dgDataProductionTool/moles:dgModel)) then 
     116                        $SRDPT/moles:dgDataProductionTool/moles:dgModel 
     117                    else (), 
     118                    if (exists($SRDPT/moles:dgDataProductionTool/moles:dgInstrument)) then 
     119                        $SRDPT/moles:dgDataProductionTool/moles:dgInstrument 
     120                    else () 
     121                    } (: </dgDataProductionTool> :) 
     122                } (: </dataproductiontool> :) 
     123    ) 
     124} ; 
     125 
     126declare function f:return-stub-obsstn($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     127(: Returns a 'stubB' style observation station record to expand an observation station record :) 
     128(: Security not implemented here yet;  :) 
     129{ 
     130let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     131            moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     132            and moles:dgMetadataID/moles:localIdentifier=$locid]) 
     133return   
     134    if ($found = 0) then  
     135        element {$out-element-name} { 
     136            element error {'not found'}, 
     137            element repositoryIdentifier {$repid}, 
     138            element localIdentifier {$locid} 
     139        }  
     140    else ( 
     141        for $SRObsStn in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     142            moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     143            and moles:dgMetadataID/moles:localIdentifier=$locid]  
     144        return 
     145            element {$out-element-name} { 
     146                ($SRObsStn/moles:dgMetadataID), 
     147                ($SRObsStn/moles:dgMetadataDescription), 
     148                ($SRObsStn/moles:name), 
     149                ($SRObsStn/moles:abbreviation), 
     150                element dgObservationStation { 
     151                    ($SRObsStn/moles:dgObservationStation/moles:contactDetails), 
     152                    if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform)) then 
     153                        element dgStationaryPlatform { 
     154                            $SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:position, 
     155                            if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgLandStation)) then element dgLandStation {''} 
     156                            else if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgMooring)) then element dgMooring {''} 
     157                            else if (exists($SRObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/dgStationGroup)) then element dgStationGroup {''} 
     158                            else () 
     159                            } 
     160                    else if (exists($SRObsStn/moles:dgObservationStation/moles:dgMovingPlatform)) then  
     161                        $SRObsStn/moles:dgObservationStation/moles:dgMovingPlatform 
     162                    else () 
     163                } (: </dgObservationStation> :) 
     164            } 
     165    ) 
     166} ; 
     167 
     168declare function f:return-stub-person($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     169(: Returns a 'stubB' style observation station record to expand a person record :) 
     170(: Security not implemented yet :) 
     171{ 
     172let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgPerson[ 
     173            moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     174            and moles:dgMetadataID/moles:localIdentifier=$locid]) 
     175return   
     176    if ($found = 0) then  
     177        element {$out-element-name} { 
     178            element error {'not found'}, 
     179            element repositoryIdentifier {$repid}, 
     180            element localIdentifier {$locid} 
     181        }  
     182    else ( 
     183    for $person in collection($targetCollection)/moles:dgMetadata/moles:dgPerson[ 
     184        moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     185        and moles:dgMetadataID/moles:localIdentifier=$locid]  
     186    return  
     187        element  {$out-element-name}  
     188        { 
     189            ($person/moles:name), 
     190            ($person/moles:contactDetails), 
     191            ($person/moles:dgMetadataID) 
     192        } 
     193    ) 
     194} ; 
     195 
     196declare function f:return-stub-organisation($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     197(: Returns a 'stubB' style observation station record to expand an organisation record :) 
     198(: Security not implemented yet :) 
     199{ 
     200    let $found := count(collection($targetCollection)/moles:dgMetadata/moles:dgOrganisation[ 
     201                moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     202                and moles:dgMetadataID/moles:localIdentifier=$locid]) 
     203    return   
     204        if ($found = 0) then  
     205            element {$out-element-name} { 
     206                element error {'not found'}, 
     207                element repositoryIdentifier {$repid}, 
     208                element localIdentifier {$locid} 
     209            }  
     210        else ( 
     211            for $org in collection($targetCollection)/moles:dgMetadata/moles:dgOrganisation[ 
     212                moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     213                and moles:dgMetadataID/moles:localIdentifier=$locid]  
     214            return  
     215                element  {$out-element-name} { 
     216                    $org/moles:dgMetadataID, 
     217                    $org/moles:name, 
     218                    $org/moles:abbreviation, 
     219                    $org/moles:contactDetails, 
     220                    $org/moles:logos 
     221                } 
     222        ) 
     223} ; 
     224 
    11225for $ObsStn in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
    12 moles:dgDataProductionTool!=''  
    13 and moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'  
    14 and moles:dgMetadataID/moles:repositoryIdentifier=$repositoryIdentifier 
    15 and moles:dgMetadataID/moles:localIdentifier=$localIdentifier] 
    16 return 
    17 utillib:strip-namespace(element dgMetadataRecord { 
    18         element dgMetadataRecord { 
    19                 element dgMetadataID { 
    20                         element schemeIdentifier {'NDG-B1', 
    21                         $ObsStn/moles:dgMetadataID/moles:repositoryIdentifier, 
    22                         $ObsStn/moles:dgMetadataID/moles:localIdentifier 
    23                 } (: End </dgMetadataID> :),  
    24                 $ObsStn/moles:dgMetadataDescription, 
    25                 $ObsStn/moles:name, 
    26                 $ObsStn/moles:abbreviation, 
    27                 element dgObservationStation {  
    28                         $ObsStn/moles:dgObservationStation/moles:contactDetails, 
    29                         if (exists($ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform)) then  
    30                                 element dgStationaryPlatform {  
    31                                 $ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:position, 
    32                                 if (exists($ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:dgMooring)) then    
    33                                         element dgMooring {  
    34                                                 $ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:dgMooring/moles:dateStart, 
    35                                                 $ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:dgMooring/moles:dateEnd, 
    36                                                 for $DepositingCruise in $ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:dgMooring/moles:DepositingCruise 
    37                                                 return  
    38                                                         stubblib:return-stub-activity('depositingcruise', data($DepositingCruise/moles:dgMetadataID/moles:repositoryIdentifier), data($DepositingCruise/moles:dgMetadataID/moles:localIdentifier)), 
    39                                                         if (exists($ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:dgMooring/moles:dgStationGrouping)) then    
    40                                                                 for $StationGrouping in $ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:dgMooring/dgStationGrouping  
    41                                                                 return   
    42                                                                         stubblib:return-stub-obsstn('stationgrouping', data($StationGrouping/moles:dgMetadataID/moles:repositoryIdentifier), data($StationGrouping/moles:dgMetadataID/moles:localIdentifier)) 
    43                                                         else () 
    44                                         } (: End </dgMooring> :)   
    45                                 else if (exists($ObsStn/dgObservationStation/dgStationaryPlatform/dgStationGroup)) then    
    46                                         element dgStationGroup {  
    47                                                 element dgGroupedStations {  
    48                                                         if (exists($ObsStn/dgObservationStation/dgStationaryPlatform/dgStationGroup/dgGroupedStations)) then 
    49                                                                 for $GroupedStation in $ObsStn/dgObservationStation/dgStationaryPlatform/dgStationGroup/dgGroupedStation/dgGroupedStations 
    50                                                                 return stubblib:return-stub-obsstn('dgGroupedStation', data($GroupedStation/moles:dgMetadataID/moles:repositoryIdentifier), data($GroupedStation/moles:dgMetadataID/moles:localIdentifier)) 
    51                                                         else () 
    52                                                 } (: End </dgGroupedStations> :) 
    53                                         } (: End </dgStationGroup> :)  
    54                                 else $ObsStn/moles:dgObservationStation/moles:dgLandStation 
    55                                 } (: End </dgStationaryPlatform>  :)   
    56                                 else $ObsStn/moles:dgObservationStation/moles:dgMovingPlatform  
    57                         } ,  
    58                         for $RelDep in $ObsStn/moles:dgObservationStation/moles:ObsStationDeployment  
    59                         return  
    60                                 element ObsStationDeployment { 
    61                                 $RelDep/moles:DateStart, 
    62                                 $RelDep/moles:DateEnd, 
    63                                 $RelDep/moles:dgMetadataID, 
    64                                 stubblib:return-stub-activity('activity', data($RelDep/moles:ActivityID/moles:repositoryIdentifier), data($RelDep/moles:ActivityID/moles:localIdentifier)), 
    65                                 stubblib:return-stub-dpt('dataproductiontool', data($RelDep/moles:DataProductionToolID/moles:repositoryIdentifier), data($RelDep/moles:DataProductionToolID/moles:localIdentifier)),  
    66                                 for $DE in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord 
    67                                         where $DE/moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:repositoryIdentifier=$RelDep/moles:dgMetadataID/moles:repositoryIdentifier 
    68                                                 and $DE/moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:localIdentifier=$RelDep/moles:dgMetadataID/moles:localIdentifier 
    69                                 return 
    70                                         stubblib:return-stub-dataentity('dataentity', data($DE/moles:dgMetadataID/moles:repositoryIdentifier), data($DE/moles:dgMetadataID/moles:localIdentifier)), 
    71                                 $RelDep/moles:Coverage 
    72                         } (: </RelatedDeployment> :)  
    73                 } (: </dgObservationStation> :),  
    74         for $strkwrd in $ObsStn/moles:dgStructuredKeyword return $strkwrd, 
    75         if (exists($ObsStn/moles:dgMetadataProvenance)) then $ObsStn/moles:dgMetadataProvenance else (), 
    76         if (exists($ObsStn/moles:dgMetadataSecurity)) then $ObsStn/moles:dgMetadataSecurity else () 
    77         } (: End </dgMetadataRecord> :) 
     226    moles:dgObservationStation!='' and moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'  
     227    and moles:dgMetadataID/moles:repositoryIdentifier='badc.nerc.ac.uk'  
     228    and moles:dgMetadataID/moles:localIdentifier='obs1']  
     229return  
     230utillib:strip-namespace( 
     231    element dgMetadataRecord { 
     232        element dgMetadataID { 
     233            element schemeIdentifier {'NDG-B1', 
     234            $ObsStn/moles:dgMetadataID/moles:repositoryIdentifier, 
     235            $ObsStn/moles:dgMetadataID/moles:localIdentifier 
     236        } (: End </dgMetadataID> :),  
     237        $ObsStn/moles:dgMetadataDescription, 
     238        $ObsStn/moles:name, 
     239        $ObsStn/moles:abbreviation, 
     240        element dgObservationStation {  
     241            $ObsStn/moles:dgObservationStation/moles:contactDetails, 
     242            if (exists($ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform)) then  
     243                element dgStationaryPlatform {  
     244                $ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:position, 
     245                if (exists($ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:dgMooring)) then    
     246                    element dgMooring {  
     247                        $ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:dgMooring/moles:dateStart, 
     248                        $ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:dgMooring/moles:dateEnd, 
     249                        for $DepositingCruise in $ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:dgMooring/moles:DepositingCruise 
     250                        return  
     251                            f:return-stub-activity('depositingcruise', data($DepositingCruise/moles:dgMetadataID/moles:repositoryIdentifier), data($DepositingCruise/moles:dgMetadataID/moles:localIdentifier)), 
     252                            if (exists($ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:dgMooring/moles:dgStationGrouping)) then    
     253                                for $StationGrouping in $ObsStn/moles:dgObservationStation/moles:dgStationaryPlatform/moles:dgMooring/dgStationGrouping  
     254                                return   
     255                                    f:return-stub-obsstn('stationgrouping', data($StationGrouping/moles:dgMetadataID/moles:repositoryIdentifier), data($StationGrouping/moles:dgMetadataID/moles:localIdentifier)) 
     256                            else () 
     257                    } (: End </dgMooring> :)   
     258                else if (exists($ObsStn/dgObservationStation/dgStationaryPlatform/dgStationGroup)) then    
     259                    element dgStationGroup {  
     260                        element dgGroupedStations {  
     261                            if (exists($ObsStn/dgObservationStation/dgStationaryPlatform/dgStationGroup/dgGroupedStations)) then 
     262                                for $GroupedStation in $ObsStn/dgObservationStation/dgStationaryPlatform/dgStationGroup/dgGroupedStation/dgGroupedStations 
     263                                return f:return-stub-obsstn('dgGroupedStation', data($GroupedStation/moles:dgMetadataID/moles:repositoryIdentifier), data($GroupedStation/moles:dgMetadataID/moles:localIdentifier)) 
     264                            else () 
     265                        } (: End </dgGroupedStations> :) 
     266                    } (: End </dgStationGroup> :)  
     267                else $ObsStn/moles:dgObservationStation/moles:dgLandStation 
     268                } (: End </dgStationaryPlatform>  :)   
     269                else $ObsStn/moles:dgObservationStation/moles:dgMovingPlatform  
     270            } ,  
     271            for $RelDep in $ObsStn/moles:dgObservationStation/moles:ObsStationDeployment  
     272            return  
     273                element ObsStationDeployment { 
     274                $RelDep/moles:DateStart, 
     275                $RelDep/moles:DateEnd, 
     276                $RelDep/moles:dgMetadataID, 
     277                f:return-stub-activity('activity', data($RelDep/moles:ActivityID/moles:repositoryIdentifier), data($RelDep/moles:ActivityID/moles:localIdentifier)), 
     278                f:return-stub-dpt('dataproductiontool', data($RelDep/moles:DataProductionToolID/moles:repositoryIdentifier), data($RelDep/moles:DataProductionToolID/moles:localIdentifier)),  
     279                for $DE in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord 
     280                    where $DE/moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:repositoryIdentifier=$RelDep/moles:dgMetadataID/moles:repositoryIdentifier 
     281                            and $DE/moles:dgDataEntity/moles:RelatedDeployment/moles:dgMetadataID/moles:localIdentifier=$RelDep/moles:dgMetadataID/moles:localIdentifier 
     282                return 
     283                    f:return-stub-dataentity('dataentity', data($DE/moles:dgMetadataID/moles:repositoryIdentifier), data($DE/moles:dgMetadataID/moles:localIdentifier)), 
     284                $RelDep/moles:Coverage 
     285            } (: </RelatedDeployment> :)  
     286        } (: </dgObservationStation> :),  
     287    for $strkwrd in $ObsStn/moles:dgStructuredKeyword return $strkwrd, 
     288    if (exists($ObsStn/moles:dgMetadataProvenance)) then $ObsStn/moles:dgMetadataProvenance else (), 
     289    if (exists($ObsStn/moles:dgMetadataSecurity)) then $ObsStn/moles:dgMetadataSecurity else () 
     290    } (: End </dgMetadataRecord> :) 
    78291) (: End namespace strip :) 
  • TI07-MOLES/trunk/xqueryLib/StubB/stubb_xquery_lib.xquery

    r2132 r2236  
    11module namespace stubblib='http://ndg.nerc.ac.uk/xquery/lib/stubb'; 
    2  
    3 declare function stubblib:return-stub-activity($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     2declare namespace moles='http://ndg.nerc.ac.uk/moles'; 
     3declare variable $stubblib:targetCollection as xs:string {'/db/ndg_B_metadata'}; 
     4 
     5declare function stubblib:return-stub-activity($out-element-name as xs:string, $repid as xs:string, $locid as xs:string, $targetCollection as xs:string ?) as element()  
    46(: Returns a 'stubB' style activity record to expand an activity record :) 
    57(: Security not implemented here yet :) 
    68{ 
     9 
    710let $found := count(collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[ 
    811moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     
    4144} ; 
    4245 
    43 declare function stubblib:return-stub-dataentity($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     46declare function stubblib:return-stub-dataentity($out-element-name as xs:string, $repid as xs:string, $locid as xs:string, $targetCollection as xs:string ?) as element()  
    4447(: Returns a 'stubB' style observation station record to expand an data entity record :) 
    4548(: Security not implemented yet :) 
    4649{ 
     50if (empty($targetCollection or $targetCollection='')) then 
     51let $targetCollection:=$stubblib:targetCollection 
     52else () 
    4753let $found := count(collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[ 
    4854moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     
    7480} ; 
    7581 
    76 declare function stubblib:return-stub-dpt($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     82declare function stubblib:return-stub-dpt($out-element-name as xs:string, $repid as xs:string, $locid as xs:string, $$targetCollection as xs:string ?) as element()  
    7783(: Returns a 'stubB' style dpt record to expand a dpt record :) 
    7884(: Security not implemented yet :) 
    7985{ 
     86if (empty($targetCollection or $targetCollection='')) then 
     87let $targetCollection:=$stubblib:targetCollection 
     88else () 
    8089let $found := count(collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[ 
    8190moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     
    112121} ; 
    113122 
    114 declare function stubblib:return-stub-obsstn($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     123declare function stubblib:return-stub-obsstn($out-element-name as xs:string, $repid as xs:string, $locid as xs:string, $$targetCollection as xs:string ?) as element()  
    115124(: Returns a 'stubB' style observation station record to expand an observation station record :) 
    116125(: Security not implemented here yet;  :) 
    117126{ 
     127if (empty($targetCollection or $targetCollection='')) then 
     128let $targetCollection:=$stubblib:targetCollection 
     129else () 
    118130let $found := count(collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgMetadataRecord[ 
    119131moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     
    154166} ; 
    155167 
    156 declare function stubblib:return-stub-person($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     168declare function stubblib:return-stub-person($out-element-name as xs:string, $repid as xs:string, $locid as xs:string, $$targetCollection as xs:string ?) as element()  
    157169(: Returns a 'stubB' style observation station record to expand a person record :) 
    158170(: Security not implemented yet :) 
    159171{ 
     172if (empty($targetCollection or $targetCollection='')) then 
     173let $targetCollection:=$stubblib:targetCollection 
     174else () 
    160175let $found := count(collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgPerson[ 
    161176moles:dgMetadataID/moles:repositoryIdentifier=$repid  
     
    182197} ; 
    183198 
    184 declare function stubblib:return-stub-organisation($out-element-name as xs:string, $repid as xs:string, $locid as xs:string) as element()  
     199declare function stubblib:return-stub-organisation($out-element-name as xs:string, $repid as xs:string, $locid as xs:string, $targetCollection as xs:string ?) as element()  
    185200(: Returns a 'stubB' style observation station record to expand an organisation record :) 
    186201(: Security not implemented yet :) 
    187202{ 
     203if (empty($targetCollection or $targetCollection='')) then 
     204let $targetCollection:=$stubblib:targetCollection 
     205else () 
    188206let $found := count(collection('/db/ndg_B_metadata')/moles:dgMetadata/moles:dgOrganisation[ 
    189207moles:dgMetadataID/moles:repositoryIdentifier=$repid  
  • TI07-MOLES/trunk/xqueryLib/Vocabs/vocab_xquery_lib.xquery

    r2213 r2236  
    3030 
    3131(: MDIP specific namespaces :) 
    32 declare variable $voclib:ISO_639-2_ns as xs:string{'UKGemini_Langauge_Categories'}; 
     32declare variable $voclib:ISO_639-2_ns as xs:string{'UKGemini_Language_Categories'}; 
    3333declare variable $voclib:ISO_3166_ns as xs:string{'UKGemini_Land_Area_Categories'}; 
    3434 
Note: See TracChangeset for help on using the changeset viewer.