From: <fxp...@us...> - 2011-05-24 07:25:53
|
Revision: 7753 http://geonetwork.svn.sourceforge.net/geonetwork/?rev=7753&view=rev Author: fxprunayre Date: 2011-05-24 07:25:45 +0000 (Tue, 24 May 2011) Log Message: ----------- Suggestion and XSL processing: * Add suggestion mechanism to add srv:containsOperations based on GetCapabilities document to service metadata records. * Add sample XSL for updating existing XLinks (prefix replacement). * Fixed extra URL checks on internal hyperlink. * Improve WMS suggestion : * for services (do not set thumbnail, compute total extent). * Only use gmd:onLine link. * Fixed error on gmd:referenceSystemInfo Modified Paths: -------------- trunk/web/src/main/webapp/xml/schemas/iso19139/process/add-info-from-wms.xsl trunk/web/src/main/webapp/xml/schemas/iso19139/process/linked-data-checker.xsl trunk/web/src/main/webapp/xml/schemas/iso19139/process/process-utility.xsl trunk/web/src/main/webapp/xml/schemas/iso19139/suggest.xsl Added Paths: ----------- trunk/web/src/main/webapp/xml/schemas/iso19139/process/add-service-info-from-wxs.xsl trunk/web/src/main/webapp/xml/schemas/iso19139/process/xlinks-href-update.xsl Modified: trunk/web/src/main/webapp/xml/schemas/iso19139/process/add-info-from-wms.xsl =================================================================== --- trunk/web/src/main/webapp/xml/schemas/iso19139/process/add-info-from-wms.xsl 2011-05-23 14:53:32 UTC (rev 7752) +++ trunk/web/src/main/webapp/xml/schemas/iso19139/process/add-info-from-wms.xsl 2011-05-24 07:25:45 UTC (rev 7753) @@ -2,8 +2,8 @@ <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exslt="http://exslt.org/common" xmlns:geonet="http://www.fao.org/geonetwork" xmlns:gco="http://www.isotc211.org/2005/gco" xmlns:srv="http://www.isotc211.org/2005/srv" - xmlns:gmd="http://www.isotc211.org/2005/gmd" version="2.0" - exclude-result-prefixes="srv gco gmd exslt geonet"> + xmlns:gmd="http://www.isotc211.org/2005/gmd" xmlns:math="http://exslt.org/math" version="2.0" + exclude-result-prefixes="srv gco gmd exslt geonet math"> <xsl:import href="process-utility.xsl"/> @@ -57,9 +57,11 @@ <xsl:param name="root"/> <xsl:variable name="onlineResources" - select="$root//gmd:CI_OnlineResource[contains(gmd:protocol/gco:CharacterString, 'OGC:WMS') + select="$root//gmd:onLine/gmd:CI_OnlineResource[contains(gmd:protocol/gco:CharacterString, 'OGC:WMS') and normalize-space(gmd:linkage/gmd:URL)!='']"/> - + <xsl:variable name="srv" + select="$root//*[local-name(.)='SV_ServiceIdentification' or @gco:isoType='srv:SV_ServiceIdentification']"/> + <!-- Check if server is up and new value are available <xsl:variable name="capabilities" select="geonet:get-wms-capabilities(gmd:linkage/gmd:URL, '1.1.1')"/> @@ -73,8 +75,11 @@ <params>{ setExtent:{type:'boolean', defaultValue:'<xsl:value-of select="$setExtent"/>'}, setAndReplaceExtent:{type:'boolean', defaultValue:'<xsl:value-of select="$setAndReplaceExtent"/>'}, setCRS:{type:'boolean', defaultValue:'<xsl:value-of - select="$setCRS"/>'}, setDynamicGraphicOverview:{type:'boolean', + select="$setCRS"/>'}, + <xsl:if test="not($srv)"> + setDynamicGraphicOverview:{type:'boolean', defaultValue:'<xsl:value-of select="$setDynamicGraphicOverview"/>'}, + </xsl:if> wmsServiceUrl:{type:'string', defaultValue:'<xsl:value-of select="normalize-space(gmd:linkage/gmd:URL)"/>'} }</params> </suggestion> @@ -106,7 +111,6 @@ <xsl:variable name="srv" select="local-name(.)='SV_ServiceIdentification' or @gco:isoType='srv:SV_ServiceIdentification'"/> - <xsl:message>srv:<xsl:value-of select="$srv"/></xsl:message> <xsl:copy> @@ -212,7 +216,7 @@ <!-- New extent position is after existing ones. --> <xsl:if test="$setExtentMode"> <xsl:for-each - select="//gmd:CI_OnlineResource[contains(gmd:protocol/gco:CharacterString, 'OGC:WMS') and gmd:linkage/gmd:URL=$wmsServiceUrl]"> + select="//gmd:onLine/gmd:CI_OnlineResource[contains(gmd:protocol/gco:CharacterString, 'OGC:WMS') and gmd:linkage/gmd:URL=$wmsServiceUrl]"> <xsl:call-template name="add-extent-for-wms"> <xsl:with-param name="srv" select="$srv"/> </xsl:call-template> @@ -223,7 +227,10 @@ <xsl:copy-of select="gmd:supplementalInformation"/> <!-- End of service --> - <xsl:copy-of select="srv:* + <xsl:copy-of select="srv:coupledResource| + srv:couplingType| + srv:containsOperations| + srv:operatesOn "/> <!-- Note: When applying this stylesheet @@ -255,20 +262,19 @@ |gmd:dataSetURI |gmd:locale |gmd:spatialRepresentationInfo - |gmd:referenceSystemInfo "/> <!-- Set spatial ref--> <xsl:if test="$setCRSMode and $capabilitiesDoc//SRS"> - <gmd:referenceSystemInfo> - <gmd:MD_ReferenceSystem> - <xsl:for-each-group select="$capabilitiesDoc//SRS" group-by="."> + <xsl:for-each-group select="$capabilitiesDoc//SRS" group-by="."> + <gmd:referenceSystemInfo> + <gmd:MD_ReferenceSystem> <xsl:call-template name="RefSystemTypes"> <xsl:with-param name="srs" select="current-grouping-key()"/> </xsl:call-template> - </xsl:for-each-group> - </gmd:MD_ReferenceSystem> - </gmd:referenceSystemInfo> + </gmd:MD_ReferenceSystem> + </gmd:referenceSystemInfo> + </xsl:for-each-group> </xsl:if> <xsl:copy-of select="gmd:metadataExtensionInfo @@ -320,10 +326,23 @@ <xsl:param name="status" select="false()"/> <xsl:variable name="layerName" select="gmd:name/gco:CharacterString/text()"/> - <xsl:apply-templates select="$capabilitiesDoc//Layer[Name=$layerName]" - mode="create-bbox-for-wms"> - <xsl:with-param name="srv" select="$srv"/> - </xsl:apply-templates> + + <xsl:choose> + <xsl:when test="$srv"> + <xsl:variable name="minx" select="math:min($capabilitiesDoc//LatLonBoundingBox/@minx)"/> + <xsl:variable name="maxx" select="math:max($capabilitiesDoc//LatLonBoundingBox/@maxx)"/> + <xsl:variable name="miny" select="math:min($capabilitiesDoc//LatLonBoundingBox/@miny)"/> + <xsl:variable name="maxy" select="math:max($capabilitiesDoc//LatLonBoundingBox/@maxy)"/> + <srv:extent> + <xsl:copy-of select="geonet:make-iso-extent(string($minx), string($miny), string($maxx), string($maxy), '')"/> + </srv:extent> + </xsl:when> + <xsl:otherwise> + <xsl:apply-templates select="$capabilitiesDoc//Layer[Name=$layerName]" + mode="create-bbox-for-wms"/> + </xsl:otherwise> + </xsl:choose> + </xsl:template> @@ -332,18 +351,9 @@ <xsl:param name="srv" select="false()"/> <xsl:for-each select="LatLonBoundingBox"> - <xsl:choose> - <xsl:when test="$srv"> - <srv:extent> - <xsl:copy-of select="geonet:make-iso-extent(@minx, @miny, @maxx, @maxy, '')"/> - </srv:extent> - </xsl:when> - <xsl:otherwise> - <gmd:extent> - <xsl:copy-of select="geonet:make-iso-extent(@minx, @miny, @maxx, @maxy, '')"/> - </gmd:extent> - </xsl:otherwise> - </xsl:choose> + <gmd:extent> + <xsl:copy-of select="geonet:make-iso-extent(@minx, @miny, @maxx, @maxy, '')"/> + </gmd:extent> </xsl:for-each> </xsl:template> Added: trunk/web/src/main/webapp/xml/schemas/iso19139/process/add-service-info-from-wxs.xsl =================================================================== --- trunk/web/src/main/webapp/xml/schemas/iso19139/process/add-service-info-from-wxs.xsl (rev 0) +++ trunk/web/src/main/webapp/xml/schemas/iso19139/process/add-service-info-from-wxs.xsl 2011-05-24 07:25:45 UTC (rev 7753) @@ -0,0 +1,263 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:exslt="http://exslt.org/common" xmlns:geonet="http://www.fao.org/geonetwork" + xmlns:gco="http://www.isotc211.org/2005/gco" xmlns:srv="http://www.isotc211.org/2005/srv" + xmlns:gmd="http://www.isotc211.org/2005/gmd" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:wfs="http://www.opengis.net/wfs" + xmlns:wcs="http://www.opengis.net/wcs" + xmlns:wms="http://www.opengis.net/wms" + xmlns:ows="http://www.opengis.net/ows" + xmlns:owsg="http://www.opengeospatial.net/ows" + xmlns:ows11="http://www.opengis.net/ows/1.1" + xmlns:wps="http://www.opengeospatial.net/wps" + xmlns:wps1="http://www.opengis.net/wps/1.0.0" + version="2.0" + exclude-result-prefixes="srv gco gmd exslt geonet wms wfs wcs ows owsg ows11 wps wps1 xlink"> + + <xsl:import href="process-utility.xsl"/> + + <!-- i18n information --> + <xsl:variable name="wxs-info-loc"> + <msg id="a" xml:lang="en">OGC WMS or WFS service </msg> + <msg id="b" xml:lang="en"> is described in online resource section. Run this process to add operations information</msg> + <msg id="a" xml:lang="fr">Le service WMS ou WFS </msg> + <msg id="b" xml:lang="fr"> est décrit dans la section resource en ligne. Exécuter cette action pour ajouter ou remplacer les informations relatives aux opérations</msg> + </xsl:variable> + + <!-- Process parameters and variables--> + <xsl:param name="setAndReplaceOperations" select="'0'"/> + <xsl:param name="wxsServiceUrl"/> + + <xsl:variable name="setAndReplaceOperationsMode" select="geonet:parseBoolean($setAndReplaceOperations)"/> + + + <!-- Load the capabilities document if one oneline resource contains a protocol set to WMS or WFS + Check if containsOperation element is already defined + --> + <xsl:variable name="wxsOnlineNodes" + select="//gmd:distributionInfo/gmd:MD_Distribution/gmd:transferOptions/gmd:MD_DigitalTransferOptions/gmd:onLine//gmd:CI_OnlineResource[(contains(gmd:protocol/gco:CharacterString, 'OGC:WMS') + or contains(gmd:protocol/gco:CharacterString, 'OGC:WFS')) and gmd:linkage/gmd:URL = $wxsServiceUrl]"/> + <xsl:variable name="wxsProtocol" select="$wxsOnlineNodes/gmd:protocol/gco:CharacterString"/> + + <xsl:variable name="alreadyContainsOp" select="count(//srv:containsOperations[ + srv:SV_OperationMetadata/srv:connectPoint/gmd:CI_OnlineResource/gmd:linkage/gmd:URL=$wxsServiceUrl])"/> + + <xsl:variable name="wxsCapabilitiesDoc"> + <xsl:if test="$wxsOnlineNodes and $alreadyContainsOp = 0"> + <xsl:choose> + <xsl:when test="contains($wxsProtocol, 'WMS')"> + <xsl:copy-of select="geonet:get-wxs-capabilities($wxsServiceUrl, 'WMS', '1.3.0')"/> + </xsl:when> + <xsl:when test="contains($wxsProtocol, 'WFS')"> + <xsl:copy-of select="geonet:get-wxs-capabilities($wxsServiceUrl, 'WFS', '1.1.0')"/> + </xsl:when> + <xsl:otherwise> + <xsl:message>process:add-service-info-from-wxs: Unsupported protocol.</xsl:message> + </xsl:otherwise> + </xsl:choose> + </xsl:if> + </xsl:variable> + + + <xsl:template name="list-add-service-info-from-wxs"> + <suggestion process="add-service-info-from-wxs"/> + </xsl:template> + + + <!-- Analyze the metadata record and return available suggestion + for that process --> + <xsl:template name="analyze-add-service-info-from-wxs"> + <xsl:param name="root"/> + + <xsl:variable name="srv" + select="$root//*[local-name(.)='SV_ServiceIdentification' or @gco:isoType='srv:SV_ServiceIdentification']"/> + + <xsl:variable name="onlineResources" + select="$root//gmd:distributionInfo/gmd:MD_Distribution/gmd:transferOptions/gmd:MD_DigitalTransferOptions/gmd:onLine/gmd:CI_OnlineResource[(contains(gmd:protocol/gco:CharacterString, 'OGC:WMS') + or contains(gmd:protocol/gco:CharacterString, 'OGC:WFS')) + and normalize-space(gmd:linkage/gmd:URL)!='']"/> + + <xsl:if test="$srv"><!-- Only apply to service metadata--> + <xsl:for-each select="$onlineResources"> + <suggestion process="add-service-info-from-wxs" id="{generate-id()}-service" category="onlineSrc" target="srv:containsOperations"> + <name><xsl:value-of select="geonet:i18n($wxs-info-loc, 'a', $guiLang)"/><xsl:value-of select="./gmd:linkage/gmd:URL" + /><xsl:value-of select="geonet:i18n($wxs-info-loc, 'b', $guiLang)"/>.</name> + <operational>true</operational> + <params>{ setAndReplaceOperations:{type:'boolean', defaultValue:'<xsl:value-of select="$setAndReplaceOperations"/>'}, + wxsServiceUrl:{type:'string', defaultValue:'<xsl:value-of select="normalize-space(gmd:linkage/gmd:URL)"/>'} + }</params> + </suggestion> + </xsl:for-each> + </xsl:if> + </xsl:template> + + + <!-- Processing templates --> + <!-- Do a copy of every nodes and attributes --> + <xsl:template match="@*|node()"> + <xsl:copy> + <xsl:apply-templates select="@*|node()"/> + </xsl:copy> + </xsl:template> + + <!-- Remove geonet:* elements. --> + <xsl:template match="geonet:*" priority="2"/> + + + <!-- Here set extent and graphicOverview --> + <xsl:template + match="gmd:identificationInfo/gmd:MD_DataIdentification| + gmd:identificationInfo/*[@gco:isoType='gmd:MD_DataIdentification']| + gmd:identificationInfo/srv:SV_ServiceIdentification| + gmd:identificationInfo/*[@gco:isoType='srv:SV_ServiceIdentification']" + priority="2"> + + <xsl:copy> + <xsl:copy-of select="@*"/> + <!-- Copy all elements from AbstractMD_IdentificationType--> + <xsl:copy-of + select="gmd:*"/> + + + <!-- Service --> + <xsl:copy-of + select="srv:serviceType| + srv:serviceTypeVersion| + srv:accessProperties| + srv:restrictions| + srv:keywords| + srv:extent| + srv:coupledResource| + srv:couplingType + "/> + <!-- Adding contains operation info --> + <xsl:if test="not($setAndReplaceOperationsMode)"> + <xsl:copy-of select="srv:containsOperations"/> + </xsl:if> + + <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + Operation could be OGC standard operation described in specification + OR a specific process in a WPS. In that case, each process are described + as one operation. + + TODO : WPS not supported yet + --> + + <xsl:variable name="ows"> + <xsl:choose> + <xsl:when test="(local-name($wxsCapabilitiesDoc/.)='WFS_Capabilities' and namespace-uri($wxsCapabilitiesDoc/.)='http://www.opengis.net/wfs' + and $wxsCapabilitiesDoc/./@version='1.1.0') + or (local-name($wxsCapabilitiesDoc/.)='Capabilities' and namespace-uri($wxsCapabilitiesDoc/.)='http://www.opengeospatial.net/wps') + or (local-name($wxsCapabilitiesDoc/.)='Capabilities' and namespace-uri($wxsCapabilitiesDoc/.)='http://www.opengis.net/wps/1.0.0')">true</xsl:when> + <xsl:otherwise>false</xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:for-each select="$wxsCapabilitiesDoc//Request/*| + $wxsCapabilitiesDoc//wfs:Request/*| + $wxsCapabilitiesDoc//wms:Request/*| + $wxsCapabilitiesDoc//wcs:Request/*| + $wxsCapabilitiesDoc//ows:OperationsMetadata/ows:Operation| + $wxsCapabilitiesDoc//ows11:OperationsMetadata/ows:Operation| + $wxsCapabilitiesDoc//wps:ProcessOfferings/*| + $wxsCapabilitiesDoc//wps1:ProcessOfferings/*"> + <!-- Some services provide information about ows:ExtendedCapabilities TODO ? --> + + <srv:containsOperations> + <srv:SV_OperationMetadata> + <srv:operationName> + <gco:CharacterString> + <xsl:choose> + <xsl:when test="name(.)='wps:Process'">WPS Process: <xsl:value-of select="ows:Title|ows11:Title"/></xsl:when> + <xsl:when test="$ows='true'"><xsl:value-of select="@name"/></xsl:when> + <xsl:otherwise><xsl:value-of select="name(.)"/></xsl:otherwise> + </xsl:choose> + </gco:CharacterString> + </srv:operationName> + <!-- CHECKME : DCPType/SOAP ? + <xsl:for-each select="DCPType/HTTP/*|wfs:DCPType/wfs:HTTP/*|wms:DCPType/wms:HTTP/*| + wcs:DCPType/wcs:HTTP/*|ows:DCP/ows:HTTP/*|ows11:DCP/ows11:HTTP/*"> --> + <srv:DCP> + <srv:DCPList codeList="http://www.isotc211.org/2005/iso19119/resources/Codelist/gmxCodelists.xml#DCPList" codeListValue="WebServices"/> + </srv:DCP> + <!--</xsl:for-each>--> + + <xsl:if test="name(.)='wps:Process' or name(.)='wps11:ProcessOfferings'"> + <srv:operationDescription> + <gco:CharacterString><xsl:value-of select="ows:Abstract|ows11:Title"/></gco:CharacterString> + </srv:operationDescription> + <srv:invocationName> + <gco:CharacterString><xsl:value-of select="ows:Identifier|ows11:Identifier"/></gco:CharacterString> + </srv:invocationName> + </xsl:if> + + <xsl:for-each select="Format|wms:Format|ows:Parameter[@name='AcceptFormats' or @name='outputFormat']"> + <srv:connectPoint> + <gmd:CI_OnlineResource> + <gmd:linkage> + <gmd:URL> + <xsl:choose> + <xsl:when test="$ows='true'"> + <xsl:value-of select="..//ows:Get[1]/@xlink:href"/><!-- FIXME supposed at least one Get --> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="..//*[1]/OnlineResource/@xlink:href|..//*[1]/wms:OnlineResource/@xlink:href"/> + </xsl:otherwise> + </xsl:choose> + </gmd:URL> + </gmd:linkage> + <gmd:protocol> + <gco:CharacterString><xsl:value-of select="$wxsProtocol"/></gco:CharacterString> + </gmd:protocol> + <gmd:description> + <gco:CharacterString> + Format : <xsl:value-of select="."/> + </gco:CharacterString> + </gmd:description> + <gmd:function> + <gmd:CI_OnLineFunctionCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/Codelist/ML_gmxCodelists.xml#CI_OnLineFunctionCode" codeListValue="information"/> + </gmd:function> + </gmd:CI_OnlineResource> + </srv:connectPoint> + </xsl:for-each> + + + <!-- Some Operations in WFS 1.0.0 have no ResultFormat no CI_OnlineResource created + WCS has no output format + --> + <xsl:for-each select="wfs:ResultFormat/*"> + <srv:connectPoint> + <gmd:CI_OnlineResource> + <gmd:linkage> + <gmd:URL><xsl:value-of select="../..//wfs:Get[1]/@onlineResource"/></gmd:URL> + </gmd:linkage> + <gmd:protocol> + <gco:CharacterString><xsl:value-of select="name(.)"/></gco:CharacterString> + </gmd:protocol> + <gmd:function> + <gmd:CI_OnLineFunctionCode codeList="./resources/codeList.xml#CI_OnLineFunctionCode" codeListValue="information"/> + </gmd:function> + </gmd:CI_OnlineResource> + </srv:connectPoint> + </xsl:for-each> + </srv:SV_OperationMetadata> + </srv:containsOperations> + </xsl:for-each> + + <!-- End of service --> + <xsl:copy-of select="srv:operatesOn"/> + + <!-- Note: When applying this stylesheet + to an ISO profil having a new substitute for + MD_Identification, profil specific element copy. + --> + <xsl:for-each + select="*[namespace-uri()!='http://www.isotc211.org/2005/gmd' + and namespace-uri()!='http://www.isotc211.org/2005/srv']"> + <xsl:copy-of select="."/> + </xsl:for-each> + </xsl:copy> + </xsl:template> + +</xsl:stylesheet> Modified: trunk/web/src/main/webapp/xml/schemas/iso19139/process/linked-data-checker.xsl =================================================================== --- trunk/web/src/main/webapp/xml/schemas/iso19139/process/linked-data-checker.xsl 2011-05-23 14:53:32 UTC (rev 7752) +++ trunk/web/src/main/webapp/xml/schemas/iso19139/process/linked-data-checker.xsl 2011-05-24 07:25:45 UTC (rev 7753) @@ -26,7 +26,7 @@ <!-- Check URL --> <xsl:variable name="httpLinks" - select="$root//*[starts-with(., 'http')]"/> + select="$root//*[starts-with(., 'http') and name(..) != 'geonet:info']"/> <xsl:for-each select="$httpLinks"> <xsl:call-template name="checkUrl"> <xsl:with-param name="url" select="."/> Modified: trunk/web/src/main/webapp/xml/schemas/iso19139/process/process-utility.xsl =================================================================== --- trunk/web/src/main/webapp/xml/schemas/iso19139/process/process-utility.xsl 2011-05-23 14:53:32 UTC (rev 7752) +++ trunk/web/src/main/webapp/xml/schemas/iso19139/process/process-utility.xsl 2011-05-24 07:25:45 UTC (rev 7753) @@ -33,9 +33,18 @@ <xsl:param name="url" as="xs:string"/> <xsl:param name="version" as="xs:string"/> + <xsl:copy-of + select="geonet:get-wxs-capabilities($url, 'WMS', $version)"/> + + </xsl:function> + + <xsl:function name="geonet:get-wxs-capabilities" as="node()"> + <xsl:param name="url" as="xs:string"/> + <xsl:param name="type" as="xs:string"/> + <xsl:param name="version" as="xs:string"/> <xsl:variable name="sep" select="if (contains($url, '?')) then '&' else '?'"/> <xsl:copy-of - select="document(concat($url, $sep, 'SERVICE=WMS&VERSION=', $version, '&REQUEST=GetCapabilities'))"/> + select="document(concat($url, $sep, 'SERVICE=', $type, '&VERSION=', $version, '&REQUEST=GetCapabilities'))"/> </xsl:function> Added: trunk/web/src/main/webapp/xml/schemas/iso19139/process/xlinks-href-update.xsl =================================================================== --- trunk/web/src/main/webapp/xml/schemas/iso19139/process/xlinks-href-update.xsl (rev 0) +++ trunk/web/src/main/webapp/xml/schemas/iso19139/process/xlinks-href-update.xsl 2011-05-24 07:25:45 UTC (rev 7753) @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Processing steps are : + * update host and port + + Parameters: + * process=xlinks-href-update (fixed value) + * search : old host URL + * replace : new host URL + +--> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:geonet="http://www.fao.org/geonetwork" xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:gco="http://www.isotc211.org/2005/gco" xmlns:gmd="http://www.isotc211.org/2005/gmd" + xmlns:gmx="http://www.isotc211.org/2005/gmx" xmlns:exslt="http://exslt.org/common" version="2.0" + exclude-result-prefixes="exslt"> + + <xsl:param name="search">http://localhost:8084/</xsl:param> + <xsl:param name="replace">http://localhost:8080/</xsl:param> + + <!-- Do a copy of every nodes and attributes --> + <xsl:template match="@*|node()"> + <xsl:copy> + <xsl:apply-templates select="@*|node()"/> + </xsl:copy> + </xsl:template> + + <!-- Remove geonet:* elements. --> + <xsl:template match="geonet:*" priority="2"/> + + <!-- Replace url prefix. --> + <xsl:template match="*[@xlink:href]" priority="2"> + <xsl:message>Processing:<xsl:value-of select="name(.)"/></xsl:message> + <xsl:message>XLink:<xsl:value-of select="@xlink:href"/></xsl:message> + <xsl:copy> + <xsl:apply-templates select="@*[name(.) != 'xlink:href']"/> + + + <xsl:attribute name="href" namespace="http://www.w3.org/1999/xlink"> + <xsl:variable name="url" select="@xlink:href"/> + + <xsl:choose> + <xsl:when test="starts-with($url, $search)"> + <xsl:value-of select="$replace"/> + <xsl:value-of select="substring-after($url, $search)"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$url"/> + </xsl:otherwise> + </xsl:choose> + </xsl:attribute> + <xsl:apply-templates select="*"/> + </xsl:copy> + </xsl:template> +</xsl:stylesheet> \ No newline at end of file Modified: trunk/web/src/main/webapp/xml/schemas/iso19139/suggest.xsl =================================================================== --- trunk/web/src/main/webapp/xml/schemas/iso19139/suggest.xsl 2011-05-23 14:53:32 UTC (rev 7752) +++ trunk/web/src/main/webapp/xml/schemas/iso19139/suggest.xsl 2011-05-24 07:25:45 UTC (rev 7753) @@ -10,6 +10,7 @@ <xsl:include href="process/scale-denominator-formatter.xsl"/> <xsl:include href="process/add-extent-from-geokeywords.xsl"/> <xsl:include href="process/add-info-from-wms.xsl"/> + <xsl:include href="process/add-service-info-from-wxs.xsl"/> <xsl:include href="process/inspire-add-conformity.xsl"/> <xsl:include href="process/linked-data-checker.xsl"/> <xsl:include href="process/related-metadata-checker.xsl"/> @@ -20,6 +21,7 @@ <p>scale-denominator-formatter</p> <p>add-extent-from-geokeywords</p> <p>add-info-from-wms</p> + <p>add-service-info-from-wxs</p> <p>inspire-add-conformity</p> <p>linked-data-checker</p> <p>related-metadata-checker</p> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fxp...@us...> - 2011-10-26 16:53:16
|
Revision: 8335 http://geonetwork.svn.sourceforge.net/geonetwork/?rev=8335&view=rev Author: fxprunayre Date: 2011-10-26 16:53:09 +0000 (Wed, 26 Oct 2011) Log Message: ----------- Add suggestion / mapping between topicCategory and INSPIRE Themes. See #649. Modified Paths: -------------- trunk/web/src/main/webapp/xml/schemas/iso19139/suggest.xsl Added Paths: ----------- trunk/web/src/main/webapp/xml/schemas/iso19139/process/inspire-themes-and-topiccategory.xsl Added: trunk/web/src/main/webapp/xml/schemas/iso19139/process/inspire-themes-and-topiccategory.xsl =================================================================== --- trunk/web/src/main/webapp/xml/schemas/iso19139/process/inspire-themes-and-topiccategory.xsl (rev 0) +++ trunk/web/src/main/webapp/xml/schemas/iso19139/process/inspire-themes-and-topiccategory.xsl 2011-10-26 16:53:09 UTC (rev 8335) @@ -0,0 +1,396 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:exslt="http://exslt.org/common" xmlns:geonet="http://www.fao.org/geonetwork" + xmlns:skos="http://www.w3.org/2004/02/skos/core#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:dcterms="http://purl.org/dc/terms/" + xmlns:gco="http://www.isotc211.org/2005/gco" + xmlns:gmd="http://www.isotc211.org/2005/gmd" + xmlns:srv="http://www.isotc211.org/2005/srv" + version="2.0" exclude-result-prefixes="#all"> + <!-- + Analyze topic categories and INSPIRE themes in the metadata record and suggest to add matching : + + * missing topic category for current INSPIRE Themes + * missing INSPIRE theme for current topic category. + It makes easier to fill topic category according to INSPIRE themes and vice versa. + + The process is disabled by default in GeoNetwork because related to INSPIRE only. See iso19139/suggest.xsl file for configuration + + Mapping has been proposed by "Guide de saisie des éléments de métadonnées INSPIRE" + + TODO : Add INSPIRE themes translations when metadata record is multilingual + --> + <xsl:import href="process-utility.xsl"/> + + <xsl:variable name="inspire-th" + select="document(concat(system-property(concat(substring-after($baseUrl, '/'), '.data.dir')), '/codelist/external/thesauri/theme/inspire-theme.rdf'))"/> + + <xsl:variable name="itheme-topiccat-map"> + <!-- <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/1</itheme> + All + </entry>--> + <!--<entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/2</itheme> + All + </entry>--> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/3</itheme> + <topiccat>location</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/4</itheme> + <topiccat>boundaries</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/5</itheme> + <topiccat>location</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/6</itheme> + <topiccat>planningCadastre</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/7</itheme> + <topiccat>transportation</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/8</itheme> + <topiccat>inlandWaters</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/9</itheme> + <topiccat>environment</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/10</itheme> + <topiccat>elevation</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/11</itheme> + <topiccat>imageryBaseMapsEarthCover</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/12</itheme> + <topiccat>imageryBaseMapsEarthCover</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/13</itheme> + <topiccat>geoscientificInformation</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/14</itheme> + <topiccat>boundaries</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/15</itheme> + <topiccat>structure</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/16</itheme> + <topiccat>geoscientificInformation</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/17</itheme> + <topiccat>planningCadastre</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/18</itheme> + <topiccat>health</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/19</itheme> + <topiccat>utilitiesCommunication</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/20</itheme> + <topiccat>structure</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/21</itheme> + <topiccat>structure</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/22</itheme> + <topiccat>farming</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/23</itheme> + <topiccat>society</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/24</itheme> + <topiccat>planningCadastre</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/25</itheme> + <topiccat>geoscientificInformation</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/26</itheme> + <topiccat>climatologyMeteorologyAtmosphere</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/27</itheme> + <topiccat>climatologyMeteorologyAtmosphere</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/28</itheme> + <topiccat>oceans</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/29</itheme> + <topiccat>oceans</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/30</itheme> + <topiccat>biota</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/31</itheme> + <topiccat>biota</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/32</itheme> + <topiccat>biota</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/33</itheme> + <topiccat>economy</topiccat> + </entry> + <entry> + <itheme>http://rdfdata.eionet.europa.eu/inspirethemes/themes/34</itheme> + <topiccat>economy</topiccat> + </entry> + </xsl:variable> + + <!-- i18n information --> + <xsl:variable name="itheme-topiccat-loc"> + <msg id="a" xml:lang="en"> INSPIRE Themes and/or topic categories found with missing matching items. Run this suggestion to add all corresponding + values.</msg> + <msg id="a" xml:lang="fr"> thèmes INSPIRE et/ou des catégories ont été trouvés avec des correspondances manquantes. Lancer ce processus pour ajouter les correspondances.</msg> + </xsl:variable> + + + <xsl:template name="list-inspire-themes-and-topiccategory"> + <suggestion process="inspire-themes-and-topiccategory"/> + </xsl:template> + + <!-- Analyze the metadata record and return available suggestion + for that process --> + <xsl:template name="analyze-inspire-themes-and-topiccategory"> + <xsl:param name="root"/> + + <xsl:variable name="lang" select="if (normalize-space($root//gmd:MD_Metadata/gmd:language/gco:CharacterString + |$root//gmd:MD_Metadata/gmd:language/gmd:LanguageCode/@codeListValue)='') + then 'en' + else + substring($root//gmd:MD_Metadata/gmd:language/gco:CharacterString + |$root//gmd:MD_Metadata/gmd:language/gmd:LanguageCode/@codeListValue, 1, 2) + "/> + + <xsl:variable name="mappingAvailable"> + <!-- For all theme in metadata language --> + <xsl:for-each select="$inspire-th//skos:Concept[skos:prefLabel/@xml:lang = normalize-space($lang)]"> + <xsl:variable name="themeLabel" select="skos:prefLabel[@xml:lang = normalize-space($lang)]"/> + <!-- if in metadata --> + <xsl:if test="$root//gmd:keyword[gco:CharacterString = $themeLabel]"> + <xsl:variable name="themeId" select="@rdf:about"/> + <!-- and corresponding topic cat does not exist in metadata --> + <xsl:for-each select="$itheme-topiccat-map/entry[itheme=$themeId]/topiccat"> + <xsl:variable name="tcId" select="."/> + <xsl:if test="count($root//gmd:topicCategory[gmd:MD_TopicCategoryCode = normalize-space($tcId)]) != 1"> + YES + </xsl:if> + </xsl:for-each> + </xsl:if> + </xsl:for-each> + <xsl:for-each select="$root//gmd:topicCategory/gmd:MD_TopicCategoryCode"> + <xsl:variable name="tcId" select="."/> + + <xsl:for-each select="$itheme-topiccat-map/entry[topiccat = $tcId]/itheme"> + <xsl:variable name="themeId" select="."/> + <xsl:variable name="themeLabel" select="$inspire-th//skos:Concept[@rdf:about = $themeId]/skos:prefLabel[@xml:lang = normalize-space($lang)]"/> + + <xsl:if test="count($root//gmd:keyword[gco:CharacterString = $themeLabel]) != 1"> + YES + </xsl:if> + </xsl:for-each> + </xsl:for-each> + </xsl:variable> + + + <xsl:if test="normalize-space($mappingAvailable)!=''"> + <suggestion process="inspire-themes-and-topiccategory" category="keyword" target="keyword"> + <name> + <xsl:value-of select="geonet:i18n($itheme-topiccat-loc, 'a', $guiLang)"/></name> + <operational>true</operational> + <form/> + </suggestion> + </xsl:if> + </xsl:template> + + + + <xsl:template + match="gmd:identificationInfo/gmd:MD_DataIdentification| + gmd:identificationInfo/*[@gco:isoType='gmd:MD_DataIdentification']| + gmd:identificationInfo/srv:SV_ServiceIdentification| + gmd:identificationInfo/*[@gco:isoType='srv:SV_ServiceIdentification']" + priority="2"> + + <xsl:copy> + <xsl:copy-of select="@*"/> + <!-- Copy all elements from AbstractMD_IdentificationType--> + <xsl:copy-of + select="gmd:citation + |gmd:abstract + |gmd:purpose + |gmd:credit + |gmd:status + |gmd:pointOfContact + |gmd:resourceMaintenance + |gmd:graphicOverview + |gmd:resourceFormat + |gmd:descriptiveKeywords[not(contains(*/gmd:thesaurusName[1]/gmd:CI_Citation/gmd:title/gco:CharacterString, 'INSPIRE'))]"/> + + <!-- Add INSPIRE themes according to topic category. --> + <xsl:variable name="existingInspireThemes" select="gmd:descriptiveKeywords[contains(*/gmd:thesaurusName/gmd:CI_Citation/gmd:title/gco:CharacterString, 'INSPIRE')]"/> + + <!-- Default language is english if not set + else use the 2 first letter of the language code (skos xml:lang attribute is ISO 2 letter code) + --> + <xsl:variable name="lang" select="if (normalize-space(//gmd:MD_Metadata/gmd:language/gco:CharacterString + |//gmd:MD_Metadata/gmd:language/gmd:LanguageCode/@codeListValue)='') + then 'en' + else + substring(//gmd:MD_Metadata/gmd:language/gco:CharacterString + |//gmd:MD_Metadata/gmd:language/gmd:LanguageCode/@codeListValue, 1, 2) + "/> + <xsl:variable name="mdKeywords" select="gmd:descriptiveKeywords"/> + <xsl:variable name="missing-inspirethemes"> + <xsl:for-each select="gmd:topicCategory/gmd:MD_TopicCategoryCode"> + <xsl:variable name="tcId" select="."/> + + <xsl:for-each select="$itheme-topiccat-map/entry[topiccat = $tcId]/itheme"> + <xsl:variable name="themeId" select="."/> + <xsl:variable name="themeLabel" select="$inspire-th//skos:Concept[@rdf:about = $themeId]/skos:prefLabel[@xml:lang = normalize-space($lang)]"/> + + <xsl:if test="count($mdKeywords//gmd:keyword[gco:CharacterString = $themeLabel]) != 1"> + <elem><xsl:value-of select="$themeLabel"/></elem> + </xsl:if> + </xsl:for-each> + </xsl:for-each> + </xsl:variable> + + <xsl:choose> + <xsl:when test="normalize-space($missing-inspirethemes) != ''"> + <gmd:descriptiveKeywords> + <gmd:MD_Keywords> + <xsl:copy-of select="$existingInspireThemes/gmd:MD_Keywords/gmd:keyword"/> + <xsl:for-each-group select="exslt:node-set($missing-inspirethemes)//elem" group-by="."> + <gmd:keyword> + <!-- TODO : add translation according to gmd:locale--> + <gco:CharacterString><xsl:value-of select="."/></gco:CharacterString> + </gmd:keyword> + </xsl:for-each-group> + + <gmd:type> + <gmd:MD_KeywordTypeCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/Codelist/ML_gmxCodelists.xml#MD_KeywordTypeCode" codeListValue="theme"/> + </gmd:type> + <xsl:choose> + <xsl:when test="$existingInspireThemes/gmd:MD_Keywords/gmd:thesaurusName"> + <xsl:copy-of select="$existingInspireThemes[1]/gmd:MD_Keywords/gmd:thesaurusName"/> + </xsl:when> + <xsl:otherwise> + <gmd:thesaurusName> + <gmd:CI_Citation> + <gmd:title> + <gco:CharacterString><xsl:value-of select="$inspire-th//skos:ConceptScheme/dc:title"/></gco:CharacterString> + </gmd:title> + <gmd:date> + <gmd:CI_Date> + <gmd:date> + <gco:Date><xsl:value-of select="$inspire-th//skos:ConceptScheme/dcterms:issued"/></gco:Date> + </gmd:date> + <gmd:dateType> + <gmd:CI_DateTypeCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/Codelist/ML_gmxCodelists.xml#CI_DateTypeCode" codeListValue="publication"/> + </gmd:dateType> + </gmd:CI_Date> + </gmd:date> + </gmd:CI_Citation> + </gmd:thesaurusName> + </xsl:otherwise> + </xsl:choose> + </gmd:MD_Keywords> + </gmd:descriptiveKeywords> + </xsl:when> + <xsl:otherwise> + <xsl:copy-of select="$existingInspireThemes"/> + </xsl:otherwise> + </xsl:choose> + + <xsl:copy-of + select="gmd:resourceSpecificUsage + |gmd:resourceConstraints + |gmd:aggregationInfo"/> + <xsl:copy-of + select="gmd:spatialRepresentationType + |gmd:spatialResolution + |gmd:language + |gmd:characterSet + |gmd:topicCategory"/> + + <!-- Add topic categories according to INSPIRE themes. --> + <xsl:variable name="ident" select="."/> + <xsl:variable name="missing-topiccat"> + <xsl:for-each select="$inspire-th//skos:Concept[skos:prefLabel/@xml:lang = normalize-space($lang)]"> + <xsl:variable name="themeLabel" select="skos:prefLabel[@xml:lang = normalize-space($lang)]"/> + <!-- if in metadata --> + <xsl:if test="$ident//gmd:keyword[gco:CharacterString = $themeLabel]"> + <xsl:variable name="themeId" select="@rdf:about"/> + <!-- and corresponding topic cat does not exist in metadata --> + <xsl:for-each select="$itheme-topiccat-map/entry[itheme=$themeId]/topiccat"> + <xsl:variable name="tcId" select="."/> + <xsl:if test="count($ident//gmd:topicCategory[gmd:MD_TopicCategoryCode = normalize-space($tcId)]) != 1"> + <elem><xsl:value-of select="$tcId"/></elem> + </xsl:if> + </xsl:for-each> + </xsl:if> + </xsl:for-each> + </xsl:variable> + + <xsl:for-each-group select="exslt:node-set($missing-topiccat)//elem" group-by="."> + <gmd:topicCategory> + <gmd:MD_TopicCategoryCode><xsl:value-of select="."/></gmd:MD_TopicCategoryCode> + </gmd:topicCategory> + </xsl:for-each-group> + + <xsl:copy-of + select="gmd:environmentDescription + |gmd:extent + |gmd:supplementalInformation"/> + + + <!-- Service --> + <xsl:copy-of + select="srv:* + "/> + </xsl:copy> + </xsl:template> + + + <!-- Do a copy of every nodes and attributes --> + <xsl:template match="@*|node()"> + <xsl:copy> + <xsl:apply-templates select="@*|node()"/> + </xsl:copy> + </xsl:template> + + <!-- Remove geonet:* elements. --> + <xsl:template match="geonet:*" priority="2"/> + + +</xsl:stylesheet> Modified: trunk/web/src/main/webapp/xml/schemas/iso19139/suggest.xsl =================================================================== --- trunk/web/src/main/webapp/xml/schemas/iso19139/suggest.xsl 2011-10-26 14:40:44 UTC (rev 8334) +++ trunk/web/src/main/webapp/xml/schemas/iso19139/suggest.xsl 2011-10-26 16:53:09 UTC (rev 8335) @@ -14,8 +14,10 @@ <xsl:include href="process/inspire-add-conformity.xsl"/> <xsl:include href="process/linked-data-checker.xsl"/> <xsl:include href="process/related-metadata-checker.xsl"/> +<!-- Disabled by default because related to INSPIRE only + <xsl:include href="process/inspire-themes-and-topiccategory.xsl"/> +--> - <xsl:variable name="processes"> <p>keywords-comma-exploder</p> <p>scale-denominator-formatter</p> @@ -25,7 +27,9 @@ <p>inspire-add-conformity</p> <p>linked-data-checker</p> <p>related-metadata-checker</p> - </xsl:variable> +<!-- Disabled by default because related to INSPIRE only + <p>inspire-themes-and-topiccategory</p> +--> </xsl:variable> <xsl:param name="action" select="'list'"/> <xsl:param name="process" select="''"/> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fxp...@us...> - 2011-12-19 12:09:53
|
Revision: 8506 http://geonetwork.svn.sourceforge.net/geonetwork/?rev=8506&view=rev Author: fxprunayre Date: 2011-12-19 12:09:40 +0000 (Mon, 19 Dec 2011) Log Message: ----------- Add suggestion to create a topological consistency report when INSPIRE theme is Hydrography, Transport Networks or Utility and governmental services. Disable suggestions related to INSPIRE by default. Modified Paths: -------------- trunk/web/src/main/webapp/xml/schemas/iso19139/suggest.xsl Added Paths: ----------- trunk/web/src/main/webapp/xml/schemas/iso19139/process/inspire-add-dq-toporeport.xsl Added: trunk/web/src/main/webapp/xml/schemas/iso19139/process/inspire-add-dq-toporeport.xsl =================================================================== --- trunk/web/src/main/webapp/xml/schemas/iso19139/process/inspire-add-dq-toporeport.xsl (rev 0) +++ trunk/web/src/main/webapp/xml/schemas/iso19139/process/inspire-add-dq-toporeport.xsl 2011-12-19 12:09:40 UTC (rev 8506) @@ -0,0 +1,123 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Suggest the creation of a default topological consistency report + when INSPIRE theme is set to Hydrography, Transport Networks or Utility and governmental services +--> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" + xmlns:geonet="http://www.fao.org/geonetwork" xmlns:gml="http://www.opengis.net/gml" + xmlns:srv="http://www.isotc211.org/2005/srv" xmlns:gco="http://www.isotc211.org/2005/gco" + xmlns:gmd="http://www.isotc211.org/2005/gmd" xmlns:skos="http://www.w3.org/2004/02/skos/core#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + exclude-result-prefixes="gmd"> + + <xsl:import href="process-utility.xsl"/> + + <!-- i18n information --> + <xsl:variable name="inspire-add-dq-toporeport-loc"> + <msg id="a" xml:lang="en"> INSPIRE theme(s) found. Run this task to add a topological + consistency section.</msg> + <msg id="a" xml:lang="fr"> thème(s) INSPIRE trouvé(s). Exécuter cette action pour ajouter une + section sur la cohérence topologique.</msg> + </xsl:variable> + + <xsl:variable name="inspire-thesaurus-dq-topo" + select="document(concat(system-property(concat(substring-after($baseUrl, '/'), '.data.dir')), '/codelist/external/thesauri/theme/inspire-theme.rdf'))"/> + + <xsl:template name="list-inspire-add-dq-toporeport"> + <suggestion process="inspire-add-dq-toporeport"/> + </xsl:template> + + <!-- Analyze the metadata record and return available suggestion + for that process --> + <xsl:template name="analyze-inspire-add-dq-toporeport"> + <xsl:param name="root"/> + + <!-- TODO : PT_FreeText ? --> + <xsl:variable name="inspire-theme-found" + select="count($inspire-thesaurus-dq-topo//skos:Concept[ + skos:prefLabel = $root//gmd:keyword/gco:CharacterString and + ( + @rdf:about = 'http://rdfdata.eionet.europa.eu/inspirethemes/themes/8' or + @rdf:about = 'http://rdfdata.eionet.europa.eu/inspirethemes/themes/7' or + @rdf:about = 'http://rdfdata.eionet.europa.eu/inspirethemes/themes/19' + )])"/> + + <!-- Check no topological consistency section --> + <xsl:if test="$inspire-theme-found and count($root//gmd:DQ_TopologicalConsistency)=0"> + <suggestion process="inspire-add-dq-toporeport" category="keyword" target="keyword"> + <name> + <xsl:value-of select="$inspire-theme-found"/> + <xsl:value-of select="geonet:i18n($inspire-add-dq-toporeport-loc, 'a', $guiLang)"/> + </name> + <operational>true</operational> + <form/> + </suggestion> + </xsl:if> + </xsl:template> + + + <!-- Remove geonet:* elements. --> + <xsl:template match="geonet:*" priority="2"/> + + + <!-- ================================================================= --> + <!-- Add a topological consistency section --> + <!-- ================================================================= --> + <xsl:template match="/gmd:MD_Metadata|/*[@gco:isoType='gmd:MD_Metadata']"> + <xsl:copy> + <xsl:copy-of select="@*"/> + <xsl:copy-of + select="gmd:fileIdentifier| + gmd:language| + gmd:characterSet| + gmd:parentIdentifier| + gmd:hierarchyLevel| + gmd:hierarchyLevelName| + gmd:contact| + gmd:dateStamp| + gmd:metadataStandardName| + gmd:metadataStandardVersion| + gmd:dataSetURI| + gmd:locale| + gmd:spatialRepresentationInfo| + gmd:referenceSystemInfo| + gmd:metadataExtensionInfo| + gmd:identificationInfo| + gmd:contentInfo| + gmd:distributionInfo"/> + + <gmd:dataQualityInfo> + <gmd:DQ_DataQuality> + <xsl:copy-of select="gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:scope"/> + <xsl:copy-of select="gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report"/> + <gmd:report> + <gmd:DQ_TopologicalConsistency> + <gmd:nameOfMeasure gco:nilReason="missing"> + <gco:CharacterString/> + </gmd:nameOfMeasure> + <gmd:measureDescription gco:nilReason="missing"> + <gco:CharacterString/> + </gmd:measureDescription> + </gmd:DQ_TopologicalConsistency> + </gmd:report> + <xsl:copy-of select="gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:lineage"/> + </gmd:DQ_DataQuality> + </gmd:dataQualityInfo> + + <xsl:copy-of + select="gmd:portrayalCatalogueInfo| + gmd:metadataConstraints| + gmd:applicationSchemaInfo| + gmd:metadataMaintenance| + gmd:series| + gmd:describes| + gmd:propertyType| + gmd:featureType| + gmd:featureAttribute" + /> + </xsl:copy> + </xsl:template> + + <!-- ================================================================= --> + +</xsl:stylesheet> Modified: trunk/web/src/main/webapp/xml/schemas/iso19139/suggest.xsl =================================================================== --- trunk/web/src/main/webapp/xml/schemas/iso19139/suggest.xsl 2011-12-19 11:42:40 UTC (rev 8505) +++ trunk/web/src/main/webapp/xml/schemas/iso19139/suggest.xsl 2011-12-19 12:09:40 UTC (rev 8506) @@ -11,12 +11,13 @@ <xsl:include href="process/add-extent-from-geokeywords.xsl"/> <xsl:include href="process/add-info-from-wms.xsl"/> <xsl:include href="process/add-service-info-from-wxs.xsl"/> - <xsl:include href="process/inspire-add-conformity.xsl"/> <xsl:include href="process/linked-data-checker.xsl"/> <xsl:include href="process/related-metadata-checker.xsl"/> <!-- Disabled by default because related to INSPIRE only + <xsl:include href="process/inspire-add-conformity.xsl"/> + <xsl:include href="process/inspire-add-dq-toporeport.xsl"/> <xsl:include href="process/inspire-themes-and-topiccategory.xsl"/> ---> +--> <xsl:variable name="processes"> <p>keywords-comma-exploder</p> @@ -24,12 +25,14 @@ <p>add-extent-from-geokeywords</p> <p>add-info-from-wms</p> <p>add-service-info-from-wxs</p> - <p>inspire-add-conformity</p> <p>linked-data-checker</p> <p>related-metadata-checker</p> <!-- Disabled by default because related to INSPIRE only - <p>inspire-themes-and-topiccategory</p> ---> </xsl:variable> + <p>inspire-add-conformity</p> + <p>inspire-add-dq-toporeport</p> + <p>inspire-themes-and-topiccategory</p> +--> + </xsl:variable> <xsl:param name="action" select="'list'"/> <xsl:param name="process" select="''"/> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fxp...@us...> - 2012-03-27 09:29:47
|
Revision: 8916 http://geonetwork.svn.sourceforge.net/geonetwork/?rev=8916&view=rev Author: fxprunayre Date: 2012-03-27 09:29:36 +0000 (Tue, 27 Mar 2012) Log Message: ----------- Remove token parameter from language-index-fields (it's set in config-lucene.xml). Cleaning: remove unused namespace, use upper-case fct. Used normalize-space for full text criteria instead of recursive loop. Align bbox indexing in language-index-field to index-fields. See #837 Modified Paths: -------------- trunk/web/src/main/webapp/xml/schemas/iso19139/convert/functions.xsl trunk/web/src/main/webapp/xml/schemas/iso19139/index-fields.xsl trunk/web/src/main/webapp/xml/schemas/iso19139/language-index-fields.xsl Modified: trunk/web/src/main/webapp/xml/schemas/iso19139/convert/functions.xsl =================================================================== --- trunk/web/src/main/webapp/xml/schemas/iso19139/convert/functions.xsl 2012-03-27 09:14:09 UTC (rev 8915) +++ trunk/web/src/main/webapp/xml/schemas/iso19139/convert/functions.xsl 2012-03-27 09:29:36 UTC (rev 8916) @@ -4,13 +4,37 @@ xmlns:srv="http://www.isotc211.org/2005/srv" xmlns:ADO="http://www.defence.gov.au/ADO_DM_MDP" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:date="http://exslt.org/dates-and-times" - xmlns:che="http://www.geocat.ch/2008/che" + xmlns:date="http://exslt.org/dates-and-times" xmlns:java="java:org.fao.geonet.util.XslUtil" xmlns:joda="java:org.fao.geonet.util.JODAISODate" xmlns:mime="java:org.fao.geonet.util.MimeTypeFinder" - exclude-result-prefixes="java"> - + exclude-result-prefixes="#all"> + + <!-- ========================================================================================= --> + <!-- latlon coordinates indexed as numeric. --> + + <xsl:template match="*" mode="latLon"> + <xsl:variable name="format" select="'##.00'"></xsl:variable> + + <xsl:if test="number(gmd:westBoundLongitude/gco:Decimal) + and number(gmd:southBoundLatitude/gco:Decimal) + and number(gmd:eastBoundLongitude/gco:Decimal) + and number(gmd:northBoundLatitude/gco:Decimal) + "> + <Field name="westBL" string="{format-number(gmd:westBoundLongitude/gco:Decimal, $format)}" store="false" index="true"/> + <Field name="southBL" string="{format-number(gmd:southBoundLatitude/gco:Decimal, $format)}" store="false" index="true"/> + + <Field name="eastBL" string="{format-number(gmd:eastBoundLongitude/gco:Decimal, $format)}" store="false" index="true"/> + <Field name="northBL" string="{format-number(gmd:northBoundLatitude/gco:Decimal, $format)}" store="false" index="true"/> + + <Field name="geoBox" string="{concat(gmd:westBoundLongitude/gco:Decimal, '|', + gmd:southBoundLatitude/gco:Decimal, '|', + gmd:eastBoundLongitude/gco:Decimal, '|', + gmd:northBoundLatitude/gco:Decimal + )}" store="true" index="false"/> + </xsl:if> + + </xsl:template> <!-- ================================================================== --> <xsl:template name="fixSingle"> @@ -95,7 +119,9 @@ </xsl:template> <!-- ================================================================== --> - + <!-- iso3code of default index language --> + <xsl:variable name="defaultLang">eng</xsl:variable> + <xsl:template name="langId19139"> <xsl:variable name="tmp"> <xsl:choose> @@ -110,25 +136,21 @@ <xsl:value-of select="normalize-space(string($tmp))"></xsl:value-of> </xsl:template> - <xsl:variable name="UPPER">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable> - <xsl:variable name="LOWER">abcdefghijklmnopqrstuvwxyz</xsl:variable> - <!-- iso3code of default index language --> - <xsl:variable name="defaultLang">en</xsl:variable> <xsl:template name="defaultTitle"> <xsl:param name="isoDocLangId"/> - <xsl:variable name="poundLangId" select="concat('#',translate($isoDocLangId,$LOWER, $UPPER))" /> + <xsl:variable name="poundLangId" select="concat('#',upper-case($isoDocLangId))" /> <xsl:choose> <xsl:when test="string-length(/*[name(.)='gmd:MD_Metadata' or @gco:isoType='gmd:MD_Metadata']/gmd:identificationInfo/*[name(.)='gmd:MD_DataIdentification' or @gco:isoType='gmd:MD_DataIdentification']/gmd:citation/*/gmd:title//gmd:LocalisedCharacterString[@locale=$poundLangId and string-length(.) > 0]) != 0"> - <xsl:value-of select="string(/*[name(.)='gmd:MD_Metadata' or @gco:isoType='gmd:MD_Metadata']/gmd:identificationInfo/*[name(.)='gmd:MD_DataIdentification' or @gco:isoType='gmd:MD_DataIdentification']/gmd:citation/*/gmd:title//gmd:LocalisedCharacterString[@locale=$poundLangId and string-length(.) > 0])"></xsl:value-of> + <xsl:value-of select="string(/*[name(.)='gmd:MD_Metadata' or @gco:isoType='gmd:MD_Metadata']/gmd:identificationInfo/*[name(.)='gmd:MD_DataIdentification' or @gco:isoType='gmd:MD_DataIdentification']/gmd:citation/*/gmd:title//gmd:LocalisedCharacterString[@locale=$poundLangId and string-length(.) > 0])"/> </xsl:when> <xsl:when test="string-length(/*[name(.)='gmd:MD_Metadata' or @gco:isoType='gmd:MD_Metadata']/gmd:identificationInfo/*[name(.)='gmd:MD_DataIdentification' or @gco:isoType='gmd:MD_DataIdentification']/gmd:citation/*/gmd:title/gco:CharacterString[1]) != 0"> - <xsl:value-of select="string(/*[name(.)='gmd:MD_Metadata' or @gco:isoType='gmd:MD_Metadata']/gmd:identificationInfo/*[name(.)='gmd:MD_DataIdentification' or @gco:isoType='gmd:MD_DataIdentification']/gmd:citation/*/gmd:title/gco:CharacterString[1])"></xsl:value-of> + <xsl:value-of select="string(/*[name(.)='gmd:MD_Metadata' or @gco:isoType='gmd:MD_Metadata']/gmd:identificationInfo/*[name(.)='gmd:MD_DataIdentification' or @gco:isoType='gmd:MD_DataIdentification']/gmd:citation/*/gmd:title/gco:CharacterString[1])"/> </xsl:when> <xsl:otherwise> - <xsl:value-of select="string((/*[name(.)='gmd:MD_Metadata' or @gco:isoType='gmd:MD_Metadata']/gmd:identificationInfo/*[name(.)='gmd:MD_DataIdentification' or @gco:isoType='gmd:MD_DataIdentification']/gmd:citation/*/gmd:title//gmd:LocalisedCharacterString))"></xsl:value-of> + <xsl:value-of select="string((/*[name(.)='gmd:MD_Metadata' or @gco:isoType='gmd:MD_Metadata']/gmd:identificationInfo/*[name(.)='gmd:MD_DataIdentification' or @gco:isoType='gmd:MD_DataIdentification']/gmd:citation/*/gmd:title//gmd:LocalisedCharacterString))"/> </xsl:otherwise> </xsl:choose> </xsl:template> Modified: trunk/web/src/main/webapp/xml/schemas/iso19139/index-fields.xsl =================================================================== --- trunk/web/src/main/webapp/xml/schemas/iso19139/index-fields.xsl 2012-03-27 09:14:09 UTC (rev 8915) +++ trunk/web/src/main/webapp/xml/schemas/iso19139/index-fields.xsl 2012-03-27 09:29:36 UTC (rev 8916) @@ -6,10 +6,9 @@ xmlns:geonet="http://www.fao.org/geonetwork" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:gmx="http://www.isotc211.org/2005/gmx" - xmlns:java="java:org.fao.geonet.util.XslUtil" xmlns:skos="http://www.w3.org/2004/02/skos/core#"> - <xsl:include href="../iso19139/convert/functions.xsl"/> + <xsl:include href="convert/functions.xsl"/> <xsl:include href="../../../xsl/utils-fn.xsl"/> <!-- This file defines what parts of the metadata are indexed by Lucene @@ -544,34 +543,9 @@ <xsl:template match="*" mode="codeList"> <xsl:apply-templates select="*" mode="codeList"/> - </xsl:template> + </xsl:template> - <!-- ========================================================================================= --> - <!-- latlon coordinates indexed as numeric. --> - <xsl:template match="*" mode="latLon"> - <xsl:variable name="format" select="'##.00'"></xsl:variable> - - <xsl:if test="number(gmd:westBoundLongitude/gco:Decimal) - and number(gmd:southBoundLatitude/gco:Decimal) - and number(gmd:eastBoundLongitude/gco:Decimal) - and number(gmd:northBoundLatitude/gco:Decimal) - "> - <Field name="westBL" string="{format-number(gmd:westBoundLongitude/gco:Decimal, $format)}" store="false" index="true"/> - <Field name="southBL" string="{format-number(gmd:southBoundLatitude/gco:Decimal, $format)}" store="false" index="true"/> - - <Field name="eastBL" string="{format-number(gmd:eastBoundLongitude/gco:Decimal, $format)}" store="false" index="true"/> - <Field name="northBL" string="{format-number(gmd:northBoundLatitude/gco:Decimal, $format)}" store="false" index="true"/> - - <Field name="geoBox" string="{concat(gmd:westBoundLongitude/gco:Decimal, '|', - gmd:southBoundLatitude/gco:Decimal, '|', - gmd:eastBoundLongitude/gco:Decimal, '|', - gmd:northBoundLatitude/gco:Decimal - )}" store="true" index="false"/> - </xsl:if> - - </xsl:template> - <!-- ========================================================================================= --> <!-- inspireThemes is a nodeset consisting of skos:Concept elements --> Modified: trunk/web/src/main/webapp/xml/schemas/iso19139/language-index-fields.xsl =================================================================== --- trunk/web/src/main/webapp/xml/schemas/iso19139/language-index-fields.xsl 2012-03-27 09:14:09 UTC (rev 8915) +++ trunk/web/src/main/webapp/xml/schemas/iso19139/language-index-fields.xsl 2012-03-27 09:29:36 UTC (rev 8916) @@ -35,8 +35,8 @@ <xsl:if test="$isoLangId!=$isoDocLangId"> <Document locale="{$isoLangId}"> - <Field name="_locale" string="{$isoLangId}" store="true" index="true" token="false"/> - <Field name="_docLocale" string="{$isoDocLangId}" store="true" index="true" token="false"/> + <Field name="_locale" string="{$isoLangId}" store="true" index="true"/> + <Field name="_docLocale" string="{$isoDocLangId}" store="true" index="true"/> <xsl:variable name="poundLangId" select="concat('#',$langId)" /> <xsl:variable name="_defaultTitle"> @@ -45,13 +45,13 @@ </xsl:call-template> </xsl:variable> <!-- not tokenized title for sorting --> - <Field name="_defaultTitle" string="{string($_defaultTitle)}" store="true" index="true" token="false" /> + <Field name="_defaultTitle" string="{string($_defaultTitle)}" store="true" index="true" /> <xsl:variable name="title" select="/*[name(.)='gmd:MD_Metadata' or @gco:isoType='gmd:MD_Metadata']/gmd:identificationInfo//gmd:citation//gmd:title//gmd:LocalisedCharacterString[@locale=$poundLangId]"/> <!-- not tokenized title for sorting --> - <Field name="_title" string="{string($title)}" store="true" index="true" token="false" /> + <Field name="_title" string="{string($title)}" store="true" index="true" /> <xsl:apply-templates select="/*[name(.)='gmd:MD_Metadata' or @gco:isoType='gmd:MD_Metadata']" mode="metadata"> <xsl:with-param name="langId" select="$poundLangId"/> @@ -80,43 +80,43 @@ <xsl:for-each select="gmd:citation/gmd:CI_Citation"> <xsl:for-each select="gmd:identifier/gmd:MD_Identifier/gmd:code//gmd:LocalisedCharacterString[@locale=$langId]"> - <Field name="identifier" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="identifier" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <!-- not tokenized title for sorting --> - <Field name="_defaultTitle" string="{string(gmd:title/gco:CharacterString)}" store="true" index="true" token="false"/> + <Field name="_defaultTitle" string="{string(gmd:title/gco:CharacterString)}" store="true" index="true"/> <!-- not tokenized title for sorting --> - <Field name="_title" string="{string(gmd:title//gmd:LocalisedCharacterString[@locale=$langId])}" store="true" index="true" token="false"/> + <Field name="_title" string="{string(gmd:title//gmd:LocalisedCharacterString[@locale=$langId])}" store="true" index="true"/> <xsl:for-each select="gmd:title//gmd:LocalisedCharacterString[@locale=$langId]"> - <Field name="title" string="{string(.)}" store="true" index="true" token="true"/> + <Field name="title" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <xsl:for-each select="gmd:alternateTitle//gmd:LocalisedCharacterString[@locale=$langId]"> - <Field name="altTitle" string="{string(.)}" store="true" index="true" token="true"/> + <Field name="altTitle" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <xsl:for-each select="gmd:date/gmd:CI_Date[gmd:dateType/gmd:CI_DateTypeCode/@codeListValue='revision']/gmd:date/gco:Date"> - <Field name="revisionDate" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="revisionDate" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <xsl:for-each select="gmd:date/gmd:CI_Date[gmd:dateType/gmd:CI_DateTypeCode/@codeListValue='creation']/gmd:date/gco:Date"> - <Field name="createDate" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="createDate" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <xsl:for-each select="gmd:date/gmd:CI_Date[gmd:dateType/gmd:CI_DateTypeCode/@codeListValue='publication']/gmd:date/gco:Date"> - <Field name="publicationDate" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="publicationDate" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <!-- fields used to search for metadata in paper or digital format --> <xsl:for-each select="gmd:presentationForm"> <xsl:if test="contains(gmd:CI_PresentationFormCode/@codeListValue, 'Digital')"> - <Field name="digital" string="true" store="true" index="true" token="false"/> + <Field name="digital" string="true" store="true" index="true"/> </xsl:if> <xsl:if test="contains(gmd:CI_PresentationFormCode/@codeListValue, 'Hardcopy')"> - <Field name="paper" string="true" store="true" index="true" token="false"/> + <Field name="paper" string="true" store="true" index="true"/> </xsl:if> </xsl:for-each> </xsl:for-each> @@ -124,7 +124,7 @@ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <xsl:for-each select="gmd:abstract//gmd:LocalisedCharacterString[@locale=$langId]"> - <Field name="abstract" string="{string(.)}" store="true" index="true" token="true"/> + <Field name="abstract" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> @@ -133,34 +133,34 @@ <xsl:apply-templates select="gmd:geographicElement/gmd:EX_GeographicBoundingBox" mode="latLon"/> <xsl:for-each select="gmd:geographicElement/gmd:EX_GeographicDescription/gmd:geographicIdentifier/gmd:MD_Identifier/gmd:code//gmd:LocalisedCharacterString[@locale=$langId]"> - <Field name="geoDescCode" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="geoDescCode" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <xsl:for-each select="gmd:description//gmd:LocalisedCharacterString[@locale=$langId]"> - <Field name="extentDesc" string="{string(.)}" store="true" index="true" token="true"/> + <Field name="extentDesc" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <xsl:for-each select="gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent| gmd:temporalElement/gmd:EX_SpatialTemporalExtent/gmd:extent"> <xsl:for-each select="gml:TimePeriod/gml:beginPosition"> - <Field name="tempExtentBegin" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="tempExtentBegin" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <xsl:for-each select="gml:TimePeriod/gml:endPosition"> - <Field name="tempExtentEnd" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="tempExtentEnd" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <xsl:for-each select="gml:TimePeriod/gml:begin/gml:TimeInstant/gml:timePosition"> - <Field name="tempExtentBegin" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="tempExtentBegin" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <xsl:for-each select="gml:TimePeriod/gml:end/gml:TimeInstant/gml:timePosition"> - <Field name="tempExtentEnd" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="tempExtentEnd" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <xsl:for-each select="gml:TimeInstant/gml:timePosition"> - <Field name="tempExtentBegin" string="{string(.)}" store="true" index="true" token="false"/> - <Field name="tempExtentEnd" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="tempExtentBegin" string="{string(.)}" store="true" index="true"/> + <Field name="tempExtentEnd" string="{string(.)}" store="true" index="true"/> </xsl:for-each> </xsl:for-each> @@ -170,69 +170,69 @@ <xsl:for-each select="*/gmd:MD_Keywords"> <xsl:for-each select="gmd:keyword//gmd:LocalisedCharacterString[@locale=$langId]"> - <Field name="keyword" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="keyword" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <xsl:for-each select="gmd:type/gmd:MD_KeywordTypeCode/@codeListValue"> - <Field name="keywordType" string="{string(.)}" store="true" index="true" token="true"/> + <Field name="keywordType" string="{string(.)}" store="true" index="true"/> </xsl:for-each> </xsl:for-each> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <xsl:for-each select="gmd:pointOfContact/gmd:CI_ResponsibleParty/gmd:organisationName//gmd:LocalisedCharacterString[@locale=$langId]"> - <Field name="orgName" string="{string(.)}" store="true" index="true" token="true"/> - <Field name="_orgName" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="orgName" string="{string(.)}" store="true" index="true"/> + <Field name="_orgName" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <xsl:for-each select="gmd:pointOfContact/gmd:CI_ResponsibleParty/gmd:individualName/gco:CharacterString| gmd:pointOfContact/gmd:CI_ResponsibleParty/gmd:individualFirstName/gco:CharacterString| gmd:pointOfContact/gmd:CI_ResponsibleParty/gmd:individualLastName/gco:CharacterString"> - <Field name="creator" string="{string(.)}" store="true" index="true" token="true"/> + <Field name="creator" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <xsl:choose> <xsl:when test="gmd:resourceConstraints/gmd:MD_SecurityConstraints"> - <Field name="secConstr" string="true" store="true" index="true" token="false"/> + <Field name="secConstr" string="true" store="true" index="true"/> </xsl:when> <xsl:otherwise> - <Field name="secConstr" string="false" store="true" index="true" token="false"/> + <Field name="secConstr" string="false" store="true" index="true"/> </xsl:otherwise> </xsl:choose> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <xsl:for-each select="gmd:topicCategory/gmd:MD_TopicCategoryCode"> - <Field name="topicCat" string="{string(.)}" store="true" index="true" token="false"/> - <Field name="subject" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="topicCat" string="{string(.)}" store="true" index="true"/> + <Field name="subject" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <xsl:for-each select="gmd:language/gco:CharacterString"> - <Field name="datasetLang" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="datasetLang" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <xsl:for-each select="gmd:spatialRepresentationType/gmd:MD_SpatialRepresentationTypeCode/@codeListValue"> - <Field name="spatialRepresentation" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="spatialRepresentation" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <xsl:for-each select="gmd:spatialResolution/gmd:MD_Resolution"> <xsl:for-each select="gmd:equivalentScale/gmd:MD_RepresentativeFraction/gmd:denominator/gco:Integer"> - <Field name="denominator" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="denominator" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <xsl:for-each select="gmd:distance/gco:Distance"> - <Field name="distanceVal" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="distanceVal" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <xsl:for-each select="gmd:distance/gco:Distance/@uom"> - <Field name="distanceUom" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="distanceUom" string="{string(.)}" store="true" index="true"/> </xsl:for-each> </xsl:for-each> @@ -240,34 +240,34 @@ <!-- Fields use to search on Service --> <xsl:for-each select="srv:serviceType/gco:LocalName"> - <Field name="serviceType" string="{string(.)}" store="true" index="true" token="false"/> - <Field name="type" string="service-{string(.)}" store="true" index="true" token="false"/> + <Field name="serviceType" string="{string(.)}" store="true" index="true"/> + <Field name="type" string="service-{string(.)}" store="true" index="true"/> </xsl:for-each> <xsl:for-each select="srv:serviceTypeVersion/gco:CharacterString"> - <Field name="serviceTypeVersion" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="serviceTypeVersion" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <xsl:for-each select="//srv:SV_OperationMetadata/srv:operationName/gco:CharacterString"> - <Field name="operation" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="operation" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <xsl:for-each select="srv:operatesOn/@uuidref"> - <Field name="operatesOn" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="operatesOn" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <xsl:for-each select="srv:coupledResource"> <xsl:for-each select="srv:SV_CoupledResource/srv:identifier/gco:CharacterString"> - <Field name="operatesOnIdentifier" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="operatesOnIdentifier" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <xsl:for-each select="srv:SV_CoupledResource/srv:operationName/gco:CharacterString"> - <Field name="operatesOnName" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="operatesOnName" string="{string(.)}" store="true" index="true"/> </xsl:for-each> </xsl:for-each> <xsl:for-each select="//srv:SV_CouplingType/srv:code/@codeListValue"> - <Field name="couplingType" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="couplingType" string="{string(.)}" store="true" index="true"/> </xsl:for-each> </xsl:for-each> @@ -277,13 +277,13 @@ <xsl:for-each select="gmd:distributionInfo/gmd:MD_Distribution"> <xsl:for-each select="gmd:distributionFormat/gmd:MD_Format/gmd:name//gmd:LocalisedCharacterString[@locale=$langId]"> - <Field name="format" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="format" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <!-- index online protocol --> <xsl:for-each select="gmd:transferOptions/gmd:MD_DigitalTransferOptions/gmd:onLine/gmd:CI_OnlineResource/gmd:protocol//gmd:LocalisedCharacterString[@locale=$langId]"> - <Field name="protocol" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="protocol" string="{string(.)}" store="true" index="true"/> </xsl:for-each> </xsl:for-each> @@ -293,13 +293,13 @@ <!-- Service type --> <xsl:for-each select="gmd:identificationInfo/srv:SV_ServiceIdentification/srv:serviceType/gco:LocalName| gmd:identificationInfo/*[@gco:isoType='srv:SV_ServiceIdentification']/srv:serviceType/gco:LocalName"> - <Field name="serviceType" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="serviceType" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <!-- Service version --> <xsl:for-each select="gmd:identificationInfo/srv:SV_ServiceIdentification/srv:serviceTypeVersion/gco:CharacterString| gmd:identificationInfo/*[@gco:isoType='srv:SV_ServiceIdentification']/srv:serviceTypeVersion/gco:CharacterString"> - <Field name="serviceTypeVersion" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="serviceTypeVersion" string="{string(.)}" store="true" index="true"/> </xsl:for-each> @@ -309,30 +309,30 @@ <xsl:choose> <xsl:when test="gmd:hierarchyLevel"> <xsl:for-each select="gmd:hierarchyLevel/gmd:MD_ScopeCode/@codeListValue"> - <Field name="type" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="type" string="{string(.)}" store="true" index="true"/> </xsl:for-each> </xsl:when> <xsl:otherwise> - <Field name="type" string="dataset" store="true" index="true" token="false"/> + <Field name="type" string="dataset" store="true" index="true"/> </xsl:otherwise> </xsl:choose> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <xsl:for-each select="gmd:hierarchyLevelName//gmd:LocalisedCharacterString[@locale=$langId]"> - <Field name="levelName" string="{string(.)}" store="true" index="true" token="true"/> + <Field name="levelName" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <xsl:for-each select="gmd:fileIdentifier/gco:CharacterString"> - <Field name="fileId" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="fileId" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <xsl:for-each select="gmd:parentIdentifier/gco:CharacterString"> - <Field name="parentUuid" string="{string(.)}" store="true" index="true" token="false"/> + <Field name="parentUuid" string="{string(.)}" store="true" index="true"/> </xsl:for-each> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> @@ -343,19 +343,20 @@ <xsl:variable name="crs" select="concat(string(gmd:codeSpace/gco:CharacterString),'::',string(gmd:code/gco:CharacterString))"/> <xsl:if test="$crs != '::'"> - <Field name="crs" string="{$crs}" store="true" index="true" token="false"/> + <Field name="crs" string="{$crs}" store="true" index="true"/> </xsl:if> </xsl:for-each> </xsl:for-each> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <!-- === Free text search === --> - - <Field name="any" store="false" index="true" token="true"> + <Field name="any" store="false" index="true"> <xsl:attribute name="string"> - <xsl:apply-templates select="." mode="allText"> - <xsl:with-param name="langId" select="$langId"/> - </xsl:apply-templates> + <xsl:value-of select="normalize-space(//node()[@locale=$langId])"/> + <xsl:text> </xsl:text> + <xsl:for-each select="//@codeListValue"> + <xsl:value-of select="concat(., ' ')"/> + </xsl:for-each> </xsl:attribute> </Field> @@ -369,7 +370,7 @@ <xsl:template match="*[./*/@codeListValue]" mode="codeList"> <xsl:param name="name" select="name(.)"/> - <Field name="{$name}" string="{*/@codeListValue}" store="false" index="true" token="false"/> + <Field name="{$name}" string="{*/@codeListValue}" store="false" index="true"/> </xsl:template> <!-- ========================================================================================= --> @@ -378,51 +379,4 @@ <xsl:apply-templates select="*" mode="codeList"/> </xsl:template> - <!-- ========================================================================================= --> - <!-- latlon coordinates + 360, zero-padded, indexed, not stored, not tokenized --> - <!-- ========================================================================================= --> - - <xsl:template match="*" mode="latLon"> - - <xsl:for-each select="gmd:westBoundLongitude"> - <Field name="westBL" string="{string(gco:Decimal) + 360}" store="true" index="true" token="false"/> - </xsl:for-each> - - <xsl:for-each select="gmd:southBoundLatitude"> - <Field name="southBL" string="{string(gco:Decimal) + 360}" store="true" index="true" token="false"/> - </xsl:for-each> - - <xsl:for-each select="gmd:eastBoundLongitude"> - <Field name="eastBL" string="{string(gco:Decimal) + 360}" store="true" index="true" token="false"/> - </xsl:for-each> - - <xsl:for-each select="gmd:northBoundLatitude"> - <Field name="northBL" string="{string(gco:Decimal) + 360}" store="true" index="true" token="false"/> - </xsl:for-each> - - </xsl:template> - - <!-- ========================================================================================= --> - <!--allText --> - - <xsl:template match="*" mode="allText"> - <xsl:param name="langId"/> - <xsl:for-each select="@*"> - <xsl:if test="name(.) != 'codeList' "> - <xsl:value-of select="concat(string(.),' ')"/> - </xsl:if> - </xsl:for-each> - - <xsl:choose> - <xsl:when test="node()[@locale=$langId]"><xsl:value-of select="concat(string(.),' ')"/></xsl:when> - <xsl:when test="*"> - <xsl:apply-templates select="*" mode="allText"> - <xsl:with-param name="langId" select="$langId"/> - </xsl:apply-templates> - </xsl:when> - </xsl:choose> - </xsl:template> - - <!-- ========================================================================================= --> - </xsl:stylesheet> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |