📄 z3950client.xsl.svn-base
字号:
<?xml version="1.0" encoding="UTF-8" ?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"xmlns:xalan= "http://xml.apache.org/xalan" exclude-result-prefixes="xalan"><xsl:import href="parser.xsl"/><xsl:variable name="regions" select="document('../regions.xml')"/><!--computes bounding box values--><xsl:variable name="region" select="string(/request/region)"/><xsl:variable name="regionData" select="$regions/regions/*[string(id)=$region]"/><xsl:variable name="westBL"> <xsl:choose> <xsl:when test="$region"><xsl:value-of select="$regionData/west"/></xsl:when> <xsl:otherwise><xsl:value-of select="/request/westBL"/></xsl:otherwise> </xsl:choose></xsl:variable><xsl:variable name="eastBL"> <xsl:choose> <xsl:when test="$region"><xsl:value-of select="$regionData/east"/></xsl:when> <xsl:otherwise><xsl:value-of select="/request/eastBL"/></xsl:otherwise> </xsl:choose></xsl:variable><xsl:variable name="southBL"> <xsl:choose> <xsl:when test="$region"><xsl:value-of select="$regionData/south"/></xsl:when> <xsl:otherwise><xsl:value-of select="/request/southBL"/></xsl:otherwise> </xsl:choose></xsl:variable><xsl:variable name="northBL"> <xsl:choose> <xsl:when test="$region"><xsl:value-of select="$regionData/north"/></xsl:when> <xsl:otherwise><xsl:value-of select="/request/northBL"/></xsl:otherwise> </xsl:choose></xsl:variable><!--compiles a request into a Z39.50 query--><xsl:template match="/"> <xsl:variable name="tree"> <!-- title --> <xsl:call-template name="textField"> <xsl:with-param name="expr" select="/request/title"/> <xsl:with-param name="use" select="4"/> <!-- title --> </xsl:call-template> <!-- abstract --> <xsl:call-template name="textField"> <xsl:with-param name="expr" select="/request/abstract"/> <xsl:with-param name="use" select="62"/> <!-- abstract --> </xsl:call-template> <!-- any --> <xsl:call-template name="textField"> <xsl:with-param name="expr" select="/request/any"/> <xsl:with-param name="use" select="1016"/> <!-- any --> </xsl:call-template> <!-- keywords --> <xsl:call-template name="textField"> <xsl:with-param name="expr" select="/request/themekey"/> <xsl:with-param name="use" select="2002"/> <!-- themekey --> </xsl:call-template> <!-- bounding box --> <xsl:if test="$region"> <xsl:choose> <!-- equal --> <xsl:when test="string(/request/relation)='equal'"> <xsl:call-template name="boundingField"> <xsl:with-param name="relation" select="3"/> <!-- equal --> </xsl:call-template> </xsl:when> <!-- overlaps --> <xsl:when test="string(/request/relation)='overlaps'"> <xsl:call-template name="boundingField"> <xsl:with-param name="relation" select="7"/> <!-- overlaps --> </xsl:call-template> </xsl:when> <!-- fullyOutsideOf --> <xsl:when test="string(/request/relation)='fullyOutsideOf'"> <xsl:call-template name="boundingField"> <xsl:with-param name="relation" select="10"/> <!-- fullyOutsideOf --> </xsl:call-template> </xsl:when> <!-- encloses --> <xsl:when test="string(/request/relation)='encloses'"> <xsl:call-template name="boundingField"> <xsl:with-param name="relation" select="9"/> <!-- encloses --> </xsl:call-template> </xsl:when> <!-- fullyEnclosedWithin --> <xsl:when test="string(/request/relation)='fullyEnclosedWithin'"> <xsl:call-template name="boundingField"> <xsl:with-param name="relation" select="8"/> <!-- fullyEnclosedWithin --> </xsl:call-template> </xsl:when> </xsl:choose> </xsl:if> </xsl:variable> <xsl:variable name="query"> <query attrset="{/request/attrset}"> <xsl:call-template name="binarizeTop"> <xsl:with-param name="list" select="xalan:nodeset($tree)/*"/> </xsl:call-template> </query> </xsl:variable> <xsl:copy-of select="$query"/> </xsl:template><xsl:template name="binarizeTop"> <xsl:param name="list"/> <xsl:choose> <xsl:when test="count($list)<2"> <xsl:copy-of select="$list"/> </xsl:when> <xsl:otherwise> <and> <xsl:copy-of select="$list[1]"/> <xsl:call-template name="binarizeTop"> <xsl:with-param name="list" select="$list[position()>1]"/> </xsl:call-template> </and> </xsl:otherwise> </xsl:choose> </xsl:template><!--compiles a text field with default structure=6 (word list) and relation=3 (equal)--><xsl:template name="textField"> <xsl:param name="expr"/> <xsl:param name="use"/> <xsl:param name="structure" select="6"/> <!-- word list --> <xsl:param name="relation" select="3"/> <!-- equal --> <xsl:if test="$expr!=''"> <xsl:call-template name="compile"> <xsl:with-param name="expr" select="$expr"/> <xsl:with-param name="use" select="$use"/> <xsl:with-param name="structure" select="$structure"/> <xsl:with-param name="relation" select="$relation"/> </xsl:call-template> </xsl:if></xsl:template><!--compiles a bounding coordinates field (2060) with structure=201 (coordinate String)--><xsl:template name="boundingField"> <xsl:param name="relation"/> <term use="2060" structure="201" relation="{$relation}"> <xsl:value-of select="concat($northBL, ' ', $westBL, ' ', $southBL, ' ', $eastBL)"/> </term></xsl:template><!--compiles a parse tree into a class tree--><xsl:template name="compile"> <xsl:param name="expr"/> <xsl:param name="use"/> <xsl:param name="structure"/> <xsl:param name="relation"/> <xsl:variable name="tree"> <xsl:call-template name="parse"> <xsl:with-param name="expr" select="$expr"/> </xsl:call-template> </xsl:variable> <xsl:variable name="btree"> <xsl:call-template name="binarize"> <xsl:with-param name="expr" select="$tree"/> </xsl:call-template> </xsl:variable> <xsl:call-template name="doCompile"> <xsl:with-param name="expr" select="xalan:nodeset($btree)/*"/> <xsl:with-param name="use" select="$use"/> <xsl:with-param name="structure" select="$structure"/> <xsl:with-param name="relation" select="$relation"/> </xsl:call-template></xsl:template><!--recursive compiler--><xsl:template name="doCompile"> <xsl:param name="expr"/> <xsl:param name="use"/> <xsl:param name="structure"/> <xsl:param name="relation"/> <xsl:choose> <!-- tree: build a boolean query --> <xsl:when test="name($expr)='tree'"> <xsl:element name="{$expr/@type}"> <xsl:call-template name="doCompile"> <xsl:with-param name="expr" select="$expr/*[1]"/> <xsl:with-param name="use" select="$use"/> <xsl:with-param name="structure" select="$structure"/> <xsl:with-param name="relation" select="$relation"/> </xsl:call-template> <xsl:call-template name="doCompile"> <xsl:with-param name="expr" select="$expr/*[2]"/> <xsl:with-param name="use" select="$use"/> <xsl:with-param name="structure" select="$structure"/> <xsl:with-param name="relation" select="$relation"/> </xsl:call-template> </xsl:element> </xsl:when> <!-- quoted string: build a phrase query --> <xsl:when test="$expr/@type='qstring'"> <term use="{$use}" structure="{$structure}" relation="{$relation}"> <xsl:text>"</xsl:text> <xsl:value-of select="$expr/@text"/> <xsl:text>"</xsl:text> </term> </xsl:when> <!-- prefix string: not supported, handle like a simple string --> <xsl:when test="$expr/@type='pstring'"> <term use="{$use}" structure="{$structure}" relation="{$relation}"> <xsl:value-of select="$expr/@text"/> <xsl:text>*</xsl:text> </term> </xsl:when> <!-- simple string --> <xsl:when test="$expr/@type='string'"> <term use="{$use}" structure="{$structure}" relation="{$relation}"> <xsl:value-of select="$expr/@text"/> </term> </xsl:when> </xsl:choose></xsl:template> </xsl:stylesheet>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -