目前,我正在尝试在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()
所以我无法尝试此扩展在样式表中的工作方式,任何想法或支持将不胜感激。
答案 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,扩展名可以正常工作而没有任何编译错误!