📄 iso19139.xsl.svn-base
字号:
<?xml version="1.0" encoding="UTF-8" ?><xsl:stylesheet version="1.0" xmlns:gmd="http://www.isotc211.org/2005/gmd" xmlns:gco="http://www.isotc211.org/2005/gco" xmlns:gml="http://www.opengis.net/gml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- ========================================================================================= --> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" /> <!-- ========================================================================================= --> <xsl:template match="/"> <Document> <xsl:apply-templates select="gmd:DS_DataSet/gmd:has/gmd:MD_Metadata" mode="metadata"/> </Document> </xsl:template> <!-- ========================================================================================= --> <xsl:template match="*" mode="metadata"> <!-- === Data Identification === --> <!-- the double // here seems needed to index MD_DataIdentification when it is nested in a SV_ServiceIdentification class --> <xsl:for-each select="gmd:identificationInfo//gmd:MD_DataIdentification"> <xsl:for-each select="gmd:citation/gmd:CI_Citation"> <xsl:for-each select="gmd:identifier/gmd:MD_Identifier/gmd:code/gco:CharacterString"> <Field name="identifier" string="{string(.)}" store="true" index="true" token="false"/> </xsl:for-each> <xsl:for-each select="gmd:title/gco:CharacterString"> <Field name="title" string="{string(.)}" store="true" index="true" token="true"/> </xsl:for-each> <xsl:for-each select="gmd:alternateTitle/gco:CharacterString"> <Field name="altTitle" string="{string(.)}" store="true" index="true" token="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="changeDate" string="{string(.)}" store="true" index="true" token="false"/> </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"/> </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"/> </xsl:if> <xsl:if test="contains(gmd:CI_PresentationFormCode/@codeListValue, 'Hardcopy')"> <Field name="paper" string="true" store="true" index="true" token="false"/> </xsl:if> </xsl:for-each> </xsl:for-each> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <xsl:for-each select="gmd:abstract/gco:CharacterString"> <Field name="abstract" string="{string(.)}" store="true" index="true" token="true"/> </xsl:for-each> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <xsl:for-each select="gmd:extent/gmd:EX_Extent"> <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/gco:CharacterString"> <Field name="geoDescCode" string="{string(.)}" store="true" index="true" token="false"/> </xsl:for-each> <xsl:for-each select="gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent"> <xsl:for-each select="gml:TimePeriod/gml:beginPosition"> <Field name="tempExtentBegin" string="{string(.)}" store="true" index="true" token="false"/> </xsl:for-each> <xsl:for-each select="gml:TimePeriod/gml:endPosition"> <Field name="tempExtentEnd" string="{string(.)}" store="true" index="true" token="false"/> </xsl:for-each> </xsl:for-each> </xsl:for-each> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <xsl:for-each select="gmd:descriptiveKeywords/gmd:MD_Keywords"> <xsl:for-each select="gmd:keyword/gco:CharacterString"> <Field name="keyword" string="{string(.)}" store="true" index="true" token="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"/> </xsl:for-each> </xsl:for-each> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <xsl:for-each select="gmd:pointOfContact/gmd:CI_ResponsibleParty/gmd:organisationName/gco:CharacterString"> <Field name="orgName" string="{string(.)}" store="true" index="true" token="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"/> </xsl:when> <xsl:otherwise> <Field name="secConstr" string="false" store="true" index="true" token="false"/> </xsl:otherwise> </xsl:choose> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <xsl:for-each select="gmd:topicCategory/gmd:MD_TopicCategoryCode/@codeListValue"> <Field name="topicCat" string="{string(.)}" store="true" index="true" token="false"/> </xsl:for-each> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <xsl:for-each select="gmd:language/gco:CharacterString"> <Field name="datasetLang" string="{string(.)}" store="true" index="true" token="false"/> </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"/> </xsl:for-each> <xsl:for-each select="gmd:distance/gco:Distance"> <Field name="distanceVal" string="{string(.)}" store="true" index="true" token="false"/> </xsl:for-each> <xsl:for-each select="gmd:distance/gco:Distance/@uom"> <Field name="distanceUom" string="{string(.)}" store="true" index="true" token="false"/> </xsl:for-each> </xsl:for-each> </xsl:for-each> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <!-- === Distribution === --> <xsl:for-each select="gmd:distributionInfo/gmd:MD_Distribution"> <xsl:for-each select="gmd:distributionFormat/gmd:MD_Format/gmd:name/gco:CharacterString"> <Field name="format" string="{string(.)}" store="true" index="true" token="false"/> </xsl:for-each> </xsl:for-each> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <!-- === General stuff === --> <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"/> </xsl:for-each> </xsl:when> <xsl:otherwise> <Field name="type" string="dataset" store="true" index="true" token="false"/> </xsl:otherwise> </xsl:choose> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <xsl:for-each select="gmd:hierarchyLevelName/gco:CharacterString"> <Field name="levelName" string="{string(.)}" store="true" index="true" token="true"/> </xsl:for-each> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <xsl:for-each select="gmd:language/gco:CharacterString"> <Field name="language" string="{string(.)}" store="true" index="true" token="false"/> </xsl:for-each> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <xsl:for-each select="gmd:fileIdentifier/gco:CharacterString"> <Field name="fileId" string="{string(.)}" store="true" index="true" token="false"/> </xsl:for-each> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <xsl:for-each select="gmd:parentIdentifier/gco:CharacterString"> <Field name="parentId" string="{string(.)}" store="true" index="true" token="false"/> </xsl:for-each> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <!-- === Reference system info === --> <xsl:for-each select="gmd:referenceSystemInfo/gmd:MD_ReferenceSystem"> <xsl:for-each select="gmd:referenceSystemIdentifier/gmd:RS_Identifier"> <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"/> </xsl:if> </xsl:for-each> </xsl:for-each> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <!-- === Free text search === --> <Field name="any" store="false" index="true" token="true"> <xsl:attribute name="string"> <xsl:apply-templates select="." mode="allText"/> </xsl:attribute> </Field> <xsl:apply-templates select="." mode="codeList"/> </xsl:template> <!-- ========================================================================================= --> <!-- codelist element, indexed, not stored nor tokenized --> <xsl:template match="*[./*/@codeListValue]" mode="codeList"> <xsl:param name="name" select="name(.)"/> <Field name="{$name}" string="{*/@codeListValue}" store="false" index="true" token="false"/> </xsl:template> <!-- ========================================================================================= --> <xsl:template match="*" mode="codeList"> <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:for-each select="@*"> <xsl:if test="name(.) != 'codeList' "> <xsl:value-of select="concat(string(.),' ')"/> </xsl:if> </xsl:for-each> <xsl:choose> <xsl:when test="*"><xsl:apply-templates select="*" mode="allText"/></xsl:when> <xsl:otherwise><xsl:value-of select="concat(string(.),' ')"/></xsl:otherwise> </xsl:choose> </xsl:template> <!-- ========================================================================================= --></xsl:stylesheet>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -