Saxon SQL扩展不适用于Saxon 9.8.0.8 PE或EE上的XSLT

时间:2018-08-06 23:05:33

标签: sql xslt saxon

目前,我正在尝试在Oracle DB上建立简单的sql连接;通过使用示例中描述的Saxon SQL扩展。

但是我的样式表没有在Oxygen XML Editor(v20)上编译,该编辑器默认使用Saxon 9.8.0.8,并且它没有给我任何跟踪信息:

    <xsl:stylesheet version="2.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
        xmlns:bsh="http://bsh-partner.com/PICenter" 
        xmlns:e="http://schemas.xmlsoap.org/soap/envelope/" 
        xmlns:xs="http://www.w3.org/2001/XMLSchema" 
        xmlns:saxon="http://saxon.sf.net/" 
        xmlns:sql="http://saxon.sf.net/sql"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        exclude-result-prefixes="saxon e xs bsh xsd xsi xsl">    
    <xsl:param name="jdbc.driver"   as="xsd:string" select="'oracle.jdbc.driver.OracleDriver'" />
        <xsl:param name="jdbc.database" as="xsd:string" select="'jdbc:oracle:thin:@localhost:1522/PDPP.MCH.BSHG.COM'" />
        <xsl:param name="jdbc.user" as="xsd:string" select="'dbuser'" />
        <xsl:param name="jdbc.pass" as="xsd:string" select="'dbpassword'" />
        <xsl:variable name="sql.conn" as="java:java.sql.Connection" xmlns:java="http://saxon.sf.net/java-type">
            <sql:connect driver="{$jdbc.driver}" database="{$jdbc.database}" user="{$jdbc.user}" password="{$jdbc.pass}">
                <xsl:fallback>
                    <xsl:message terminate="yes">SQL extenstions are not installed</xsl:message>
                </xsl:fallback>
            </sql:connect>
        </xsl:variable>
<xsl:template match="/e:Envelope/e:Body">
        <log>
            <xsl:apply-templates />
        </log>
    </xsl:template>
</xsl:stylesheet>

当前变量$ sql.conn给出错误:

Required item type of value of variable $sql.conn is Q{http://saxon.sf.net/java-type}java.sql.Connection; supplied value (<sql:connect {(attr{driver=...}, ...)}/>) has item type element()

所以我无法尝试此扩展在样式表中的工作方式,任何想法或支持将不胜感激。

2 个答案:

答案 0 :(得分:1)

声明extension-element-prefixes="sql"https://www.w3.org/TR/xslt20/#designating-extension-namespace),否则没有处理器可以将这些元素识别为扩展名。

答案 1 :(得分:0)

问题是相当具体的,需要在Oxygen上设置与Saxon处理器有关的某些配置,首先,正如在文档中所解释的那样,我需要通过参考以下XML来对我的转换方案进行特定的Saxon配置

<configuration xmlns="http://saxon.sf.net/ns/configuration" edition="EE">
  <global allowExternalFunctions="true" versionOfXml="1.0"/>
  <xslt>
    <extensionElement namespace="http://saxon.sf.net/sql"
      factory="net.sf.saxon.option.sql.SQLElementFactory"/>
  </xslt>
</configuration>

第二,我将ojdb6.jar放入目录$oxygen-installation-dir/lib中,然后重新启动Oxygen,扩展名可以正常工作而没有任何编译错误!