代码之家  ›  专栏  ›  技术社区  ›  Hayra

Saxon SQL扩展不能在Saxon 9.8.0.8pe或EE上使用XSLT

  •  0
  • Hayra  · 技术社区  · 6 年前

    目前,我试图在Oracle DB上建立一个简单的sql连接;方法是使用示例中描述的saxonsql扩展。

    但是,我的样式表不是在Oxygen XML编辑器(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 回复  |  直到 6 年前
        1
  •  1
  •   Martin Honnen    6 年前

    宣布 extension-element-prefixes="sql" ( https://www.w3.org/TR/xslt20/#designating-extension-namespace ),否则任何处理器都无法将这些元素识别为扩展。

        2
  •  0
  •   Hayra    6 年前

    关于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和extension,没有任何编译错误!