Ignore:
Timestamp:
13/03/07 16:19:48 (13 years ago)
Author:
ko23
Message:

Update of Python library ISO19139 xquery

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI07-MOLES/trunk/PythonCode/wsgi/ndg_xqueries.py

    r2260 r2269  
    1010''' 
    1111 
    12 ObjectTypeQuery = '''declare default element namespace 'http://ndg.nerc.ac.uk/moles';for $Obj in collection('TargetCollection')/dgMetadata/dgMetadataRecord[dgMetadataID/schemeIdentifier='NDG-B0' and dgMetadataID/repositoryIdentifier='RepositoryID' and dgMetadataID/localIdentifier='LocalID']  return <objectType>{if (exists($Obj/dgDataEntity)) then 4 else (if (exists($Obj/dgObservationStation)) then 3 else (if (exists($Obj/dgDataProductionTool)) then 2 else (if (exists($Obj/dgActivity)) then 1 else (0))))}</objectType>''' 
     12ObjectTypeQuery = '''declare default element namespace 'http://ndg.nerc.ac.uk/moles';declare variable $targetCollection as xs:string {'TargetCollection'};for $Obj in collection($targetCollection)/dgMetadata/dgMetadataRecord[dgMetadataID/schemeIdentifier='NDG-B0' and dgMetadataID/repositoryIdentifier='RepositoryID' and dgMetadataID/localIdentifier='LocalID']  return <objectType>{if (exists($Obj/dgDataEntity)) then 4 else (if (exists($Obj/dgObservationStation)) then 3 else (if (exists($Obj/dgDataProductionTool)) then 2 else (if (exists($Obj/dgActivity)) then 1 else (0))))}</objectType>''' 
    1313 
    1414StubBDEQuery = '''import module namespace voclib='http://ndg.nerc.ac.uk/xquery/lib/vocab' at 'xmldb:exist:///db/xqueryLib/Vocabs/vocab_xquery_lib.xquery'; 
     
    12971297) (: End namespace strip :)''' 
    12981298 
    1299 ISO19139Query = '''declare default element namespace 'http://www.isotc211.org/2005/gmd'; declare namespace moles='http://ndg.nerc.ac.uk/moles'; declare namespace gco='http://www.isotc211.org/2005/gco'; declare namespace gmd='http://www.isotc211.org/2005/gmd'; declare namespace gml='http://www.opengis.net/gml'; declare namespace xlink='http://www.w3.org/1999/xlink'; declare namespace xsi='http://www.w3.org/2001/XMLSchema-instance'; declare namespace f='http://ndg.nerc.ac.uk/moles/localfunctions'; for $DE in collection('TargetCollection')/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('TargetCollection')/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()}}}''' 
     1299ISO19139Query = ''' 
     1300(: This will be updated to do namespaces properly when a few more are officially available... :) 
     1301import 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'; 
     1303 
     1304declare default element namespace 'http://www.isotc211.org/2005/gmd'; 
     1305declare namespace moles='http://ndg.nerc.ac.uk/moles'; 
     1306declare namespace gco='http://www.isotc211.org/2005/gco'; 
     1307declare namespace gmd='http://www.isotc211.org/2005/gmd';  
     1308declare namespace gml='http://www.opengis.net/gml'; 
     1309declare namespace xlink='http://www.w3.org/1999/xlink';  
     1310declare namespace xsi='http://www.w3.org/2001/XMLSchema-instance';  
     1311 
     1312declare variable $targetCollection as xs:string {'TargetCollection'}; 
     1313declare variable $repositoryIdentifier as xs:string {'RepositoryID'}; 
     1314declare variable $localIdentifier as xs:string {'LocalID'}; 
     1315 
     1316for $DE in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[ 
     1317    exists(moles:dgDataEntity)  
     1318    and moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'  
     1319    and moles:dgMetadataID/moles:repositoryIdentifier=$repositoryIdentifier 
     1320    and moles:dgMetadataID/moles:localIdentifier=$localIdentifier] 
     1321return  
     1322element MD_Metadata {  
     1323    attribute xsi:schemaLocation {'http://www.isotc211.org/2005/gmd http://www.isotc211.org/2005/gmd/metadataEntity.xsd'}, 
     1324    element fileIdentifier {element gco:CharacterString {concat($DE/moles:dgMetadataID/moles:repositoryIdentifier, $utillib:moles_id_separator, 'ISO19115', $utillib:moles_id_separator, $DE/moles:dgMetadataID/moles:localIdentifier)}}, 
     1325    element language { 
     1326        element gmd:LanguageCode { 
     1327            attribute codeList {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#LanguageCode'}, 
     1328            attribute codeListValue {'eng'}, 
     1329            'English'} 
     1330    } (: </language> :), 
     1331    element hierarchyLevel { 
     1332        element MD_ScopeCode { 
     1333            attribute codeList {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_ScopeCode'}, 
     1334            attribute codeListValue {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_ScopeCode_dataset'}, 
     1335            'dataset'} 
     1336    } (: </hierarchyLevel> :), 
     1337    for $parent in $DE/moles:dgRelatedDataEntity[moles:RelationID/moles:dgValidTerm='is-part-of'] 
     1338    return  
     1339        element parentIdentifier  {element gco:CharacterString {concat($DE/moles:dgMetadataID/moles:repositoryIdentifier, ':', $DE/moles:dgMetadataID/moles:localIdentifier, ':', $DE/moles:dgMetadataID/moles:localIdentifier)}}, 
     1340    for $DataCuratorRole in $DE/moles:dgDataEntity/moles:dgDataRoles/moles:dgDataCurator/moles:dgRoleHolder[not(exists(moles:endDate)) or moles:endDate=''] 
     1341    return  
     1342        for $DataCuratorRoleHolder in collection($targetCollection)/moles:dgMetadata/(moles:dgPerson | moles:dgOrganisation)[ 
     1343            moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'  
     1344            and moles:dgMetadataID/moles:repositoryIdentifier=$DataCuratorRole/(moles:dgPersonID | moles:dgOrganisationID)/moles:repositoryIdentifier 
     1345            and moles:dgMetadataID/moles:localIdentifier=$DataCuratorRole/(moles:dgPersonID | moles:dgOrganisationID)/moles:localIdentifier] 
     1346        return 
     1347            element contact { 
     1348                element CI_ResponsibleParty {  
     1349                    if (string(local-name($DataCuratorRoleHolder))='dgOrganisation') then 
     1350                        element organisationName {element gco:CharacterString {string($DataCuratorRoleHolder/moles:name)}} 
     1351                    else if (string(local-name($DataCuratorRoleHolder))='dgPerson') then 
     1352                        element individualName {element gco:CharacterString {string(concat(string($DataCuratorRoleHolder/moles:name/moles:initials), ' ', string($DataCuratorRoleHolder/moles:name/moles:familyName)))}} 
     1353                    else ('empty content') ,      
     1354                    element positionName { 
     1355                        if (exists($DataCuratorRoleHolder/moles:localName)) then  
     1356                            element gco:CharacterString {$DataCuratorRoleHolder/moles:localName} 
     1357                        else if (exists($DataCuratorRole/moles:roleName)) then  
     1358                            element gco:CharacterString {$DataCuratorRole/moles:roleName} 
     1359                        else  
     1360                            element gco:CharacterString {'Curator'} 
     1361                    } (: </positionName>:), 
     1362                    element contactInfo { 
     1363                        element gmd:CI_Contact { 
     1364                            if (exists($DataCuratorRole/moles:contactDetails/moles:telephone  
     1365                                or $DataCuratorRole/moles:contactDetails/moles:fax  
     1366                                or $DataCuratorRoleHolder/moles:contactDetails/moles:telephone  
     1367                                or $DataCuratorRoleHolder/moles:contactDetails/moles:fax)) then 
     1368                                element phone { 
     1369                                    element gmd:CI_Telephone {  
     1370                                        if (exists($DataCuratorRole/moles:contactDetails/moles:telephone)) then 
     1371                                            element voice { 
     1372                                                element gco:CharacterString {data($DataCuratorRole/moles:contactDetails/moles:telephone)} 
     1373                                            } (:</voice>:) 
     1374                                        else if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:telephone)) then 
     1375                                            element voice { 
     1376                                                element gco:CharacterString {data($DataCuratorRoleHolder/moles:contactDetails/moles:telephone)} 
     1377                                            } (:</voice>:) 
     1378                                        else (), 
     1379                                        if (exists($DataCuratorRole/moles:contactDetails/moles:fax)) then 
     1380                                            element facsimile { 
     1381                                                element gco:CharacterString {data($DataCuratorRoleHolder/moles:contactDetails/moles:fax)} 
     1382                                            } (: </facsimile> :) 
     1383                                        else if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:telephone)) then 
     1384                                            element facsimile { 
     1385                                                element gco:CharacterString {data($DataCuratorRoleHolder/moles:contactDetails/moles:fax)} 
     1386                                            } (: </facsimile> :) 
     1387                                        else () 
     1388                                    } (: </gmd:CI_Telephone> :) 
     1389                                } (: </phone> :)  
     1390                                                    else (), 
     1391                            element address {  
     1392                                element gmd:CI_Address { 
     1393                                    if (exists($DataCuratorRole/moles:contactDetails/moles:address/moles:addressline)) then                                
     1394                                        for $addressline in $DataCuratorRole/moles:contactDetails/moles:address/moles:addressline 
     1395                                        return 
     1396                                            element deliveryPoint {element gco:CharacterString {data($addressline)}} 
     1397                                    else if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:addressline)) then 
     1398                                        for $addressline in $DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:addressline 
     1399                                        return 
     1400                                            element deliveryPoint {element gco:CharacterString {data($addressline)}} 
     1401                                    else (), 
     1402                                    if (exists($DataCuratorRole/moles:contactDetails/moles:address/moles:city)) then 
     1403                                        element city {element gco:CharacterString {data($DataCuratorRole/moles:contactDetails/moles:address/moles:city)}} 
     1404                                    else if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:city)) then 
     1405                                        element city {element gco:CharacterString {data($DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:city)}} 
     1406                                    else (), 
     1407                                    if (exists($DataCuratorRole/moles:contactDetails/moles:eMail)) then 
     1408                                        element electronicMailAddress {element gco:CharacterString {data($DataCuratorRole/moles:contactDetails/moles:eMail)}} 
     1409                                    else if (exists($DataCuratorRoleHolder/moles:contactDetails/moles:address/moles:postcode)) then 
     1410                                        element electronicMailAddress {element gco:CharacterString {data($DataCuratorRoleHolder/moles:contactDetails/moles:eMail)}} 
     1411                                    else () 
     1412                                } (: </gmd:CI_Address> :) 
     1413                            } (: </address> :) 
     1414                        } (: </gmd:CI_Contact> :) 
     1415                    } (: </contactInfo> :), 
     1416                    element role {  
     1417                        element CI_RoleCode { 
     1418                            attribute codeList {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode'},  
     1419                            attribute codeListValue {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode_custodian'}, 
     1420                            if (exists($DataCuratorRole/moles:localName)) then                                
     1421                                data($DataCuratorRole/moles:localName) 
     1422                            else if (exists($DataCuratorRoleHolder/moles:localName)) then 
     1423                                data($DataCuratorRoleHolder/moles:localName) 
     1424                            else 'Curator'   
     1425                        } (: </CI_RoleCode> :) 
     1426                    } (: </role> :) 
     1427                } (: </CI_ResponsibleParty> :) 
     1428            } (: </contact> :), 
     1429 
     1430            element dateStamp {element gco:Date {adjust-date-to-timezone(current-date())}}, 
     1431            element metadataStandardName {element gco:CharacterString {'ISO 19115:2003'}}, 
     1432            element metadataStandardVersion {element gco:CharacterString {'2003'}}, 
     1433            element identificationInfo { 
     1434                element gmd:MD_DataIdentification {  
     1435                    element citation { 
     1436                        element gmd:CI_Citation { 
     1437                            element title {element gco:CharacterString {data($DE/moles:name)}}, 
     1438                            if (exists($DE/moles:abbreviation) and not(empty($DE/moles:abbreviation))) then  
     1439                                element alternateTitle {element gco:CharacterString {data($DE/moles:abbreviation)}} 
     1440                            else (), 
     1441                            element date { 
     1442                                if (exists($DE/(moles:DataProvenance | moles:dgMetadataProvenance)/moles:RecordCreation/moles:CreatedDate)) then 
     1443                                    element gmd:CI_Date { 
     1444                                        element date {element gco:Date {adjust-date-to-timezone(data($DE/(moles:DataProvenance | moles:dgMetadataProvenance)/moles:RecordCreation/moles:CreatedDate))}}, 
     1445                                        element dateType { 
     1446                                            element CI_DateTypeCode { 
     1447                                                attribute codeList {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_DateTypeCode'},  
     1448                                                attribute codeListValue {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_DateTypeCode_creation' }, 
     1449                                                'Creation'} 
     1450                                        } (: </dataType> :) 
     1451                                    } (: </gmd:CI_Date> :) 
     1452                                else  
     1453                                    attribute gco:nilReason {'unknown'} 
     1454                            } (: </date> :) 
     1455                        } (: </gmd:CI_Citation> :) 
     1456                    } (: </citation> :), 
     1457                    element abstract {element gco:CharacterString {data($DE/moles:dgMetadataDescription/moles:abstract/moles:abstractText)}}, 
     1458                    element language { 
     1459                        element gmd:LanguageCode { 
     1460                            attribute codeList {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#LanguageCode'}, 
     1461                            attribute codeListValue {'eng'}, 
     1462                            'English' } 
     1463                    } (: </language> :), 
     1464                    for $ISOTopicCategory in ($DE/moles:dgStructuredKeyword[dgValidTermID/moles:ParentListID='http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_TopicCategoryCode']) 
     1465                    return  
     1466                        element topicCategory { 
     1467                            element gmd:MD_TopicCategoryCode { 
     1468                                attribute codeList {'http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_TopicCategoryCode'}, 
     1469                                attribute codeListValue {string($ISOTopicCategory/moles:dgValidTerm)}, 
     1470                                string($ISOTopicCategory/moles:dgValidTerm)} 
     1471                        } (: </topicCategory> :), 
     1472                    if (exists($DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDataCoverage)) then 
     1473                        element extent { 
     1474                            element gmd:EX_Extent { 
     1475                                (: add bounding boxes:) 
     1476                                for $geoBBox in $DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDataCoverage//moles:BoundingBox 
     1477                                return 
     1478                                    element geographicElement { 
     1479                                        element EX_GeographicBoundingBox { 
     1480                                            element westBoundLongitude {element gco:Decimal {data($geoBBox/moles:LimitWest)}}, 
     1481                                            element eastBoundLongitude {element gco:Decimal {data($geoBBox/moles:LimitEast)}}, 
     1482                                            element southBoundLatitude {element gco:Decimal {data($geoBBox/moles:LimitSouth)}}, 
     1483                                            element northBoundLatitude {element gco:Decimal {data($geoBBox/moles:LimitNorth)}} 
     1484                                        } (: </EX_GeographicBoundingBox> :) 
     1485                                    } (: </geographicElement> :),  
     1486                                (: add location terms:) 
     1487                                for $geoArea in $DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDataCoverage//moles:dgArea 
     1488                                return 
     1489                                    element geographicElement { 
     1490                                        element EX_GeographicDescription { 
     1491                                            element geographicIdentifier { 
     1492                                                element gmd:RS_Identifier { 
     1493                                                    element gco:CharacterString {element code {data(dgArea/dgValidTerm)}}, 
     1494                                                    element gco:CharacterString {element codeSpace {data(dgArea/dgValidTermID/ParentListID)}} 
     1495                                                    } 
     1496                                                } 
     1497                                        } (: </EX_GeographicDescription> :) 
     1498                                    } (: </geographicElement> :) 
     1499                            } (: </gmd:EX_Extent> :) 
     1500                        } (: </extent> :) 
     1501                    else() 
     1502                } (:</gmd:MD_DataIdentification> :) 
     1503            } (: </identificationInfo> :) 
     1504} (: </MD_Metadata> :)''' 
    13001505             
    1301 MOLESQuery = '''declare default element namespace 'http://ndg.nerc.ac.uk/moles';for $Moles in collection('TargetCollection')/dgMetadata/dgMetadataRecord[dgMetadataID/schemeIdentifier='NDG-B0' and dgMetadataID/repositoryIdentifier='RepositoryID' and dgMetadataID/localIdentifier='LocalID'] return $Moles ''' 
     1506MOLESQuery = '''declare default element namespace 'http://ndg.nerc.ac.uk/moles'; 
     1507declare variable $targetCollection as xs:string {'TargetCollection'}; 
     1508declare variable $repositoryIdentifier as xs:string {'RepositoryID'}; 
     1509declare variable $localIdentifier as xs:string {'LocalID'}; 
     1510for $Moles in collection($targetCollection)/dgMetadata/dgMetadataRecord[dgMetadataID/schemeIdentifier='NDG-B0'  
     1511    and dgMetadataID/repositoryIdentifier=$repositoryIdentifier  
     1512    and dgMetadataID/localIdentifier=$localIdentifier]  
     1513    return $Moles ''' 
    13021514             
    13031515DIFQuery = '''import module namespace voclib='http://ndg.nerc.ac.uk/xquery/lib/vocab' at 'xmldb:exist:///db/xqueryLib/Vocabs/vocab_xquery_lib.xquery'; 
Note: See TracChangeset for help on using the changeset viewer.