我正在尝试创建一个管道,该管道从数据库中获取BLOB,并使用提供HTTP Serializer的SQL处理器通过浏览器将其作为二进制文件传递给用户。我在Orbeon 4.4。这是我的page-flow.xml:
<controller xmlns="http://www.orbeon.com/oxf/controller">
<page path="/dl/" model="file-get.xpl"/>
<epilogue url="oxf:/config/epilogue.xpl"/>
</controller>
这是file-get.xpl:
<p:config xmlns:p="http://www.orbeon.com/oxf/pipeline"
xmlns:sql="http://orbeon.org/oxf/xml/sql"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:oxf="http://www.orbeon.com/oxf/processors"
xmlns:xi="http://www.w3.org/2001/XInclude">
<p:processor name="oxf:sql">
<p:input name="datasource" href="/config/datasource-sql.xml"/>
<p:input name="config">
<sql:config>
<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:base64Binary">
<sql:connection>
<sql:execute>
<sql:query>
select blob_col from blob_table where rownum = 1
</sql:query>
<sql:result-set>
<sql:row-iterator>
<sql:get-column-value column="blob_col"/>
</sql:row-iterator>
</sql:result-set>
</sql:execute>
</sql:connection>
</document>
</sql:config>
</p:input>
<p:output name="data" id="image-data"/>
</p:processor>
<p:processor name="oxf:http-serializer">
<p:input name="config">
<config>
<content-type>image/jpeg</content-type>
<force-content-type>true</force-content-type>
</config>
</p:input>
<p:input name="data" href="#image-data"/>
</p:processor>
</p:config>
通过这种配置,我得到“xsi中的未声明前缀:类型:xs”
我错过了什么吗?这是我第一次尝试深入研究xpl。谢谢!
答案 0 :(得分:1)
所以,我有一个解决方法来完成这项工作(但是,我仍然很好奇为什么SQL处理器不能正确输出必要的属性)。解决方案是让SQL处理器创建没有属性的<document>
标记,然后通过XSLT处理器发送它以使用样式表添加属性。
新的.xpl:
<p:config xmlns:p="http://www.orbeon.com/oxf/pipeline"
xmlns:sql="http://orbeon.org/oxf/xml/sql"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:oxf="http://www.orbeon.com/oxf/processors"
xmlns:xi="http://www.w3.org/2001/XInclude">
<p:processor name="oxf:sql">
<p:input name="datasource" href="/config/datasource-sql.xml"/>
<p:input name="config">
<sql:config>
<document>
<sql:connection>
<sql:execute>
<sql:query>
select blob_col from blob_table where rownum = 1
</sql:query>
<sql:result-set>
<sql:row-iterator>
<sql:get-column-value column="blob_col"/>
</sql:row-iterator>
</sql:result-set>
</sql:execute>
</sql:connection>
</document>
</sql:config>
</p:input>
<p:output name="data" id="sql-data"/>
</p:processor>
<p:processor name="oxf:xslt">
<p:input name="config">
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="document">
<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:base64Binary">
<xsl:apply-templates/>
</document>
</xsl:template>
</xsl:stylesheet>
</p:input>
<p:input name="data" href="#sql-data"/>
<p:output name="data" id="image-data"/>
</p:processor>
<p:processor name="oxf:http-serializer">
<p:input name="config">
<config>
<content-type>image/jpeg</content-type>
<force-content-type>true</force-content-type>
</config>
</p:input>
<p:input name="data" href="#image-data"/>
</p:processor>
</p:config>