Orbeon XPL - SQL处理器,HTTP Serializer&名称空间前缀

时间:2014-01-07 16:07:46

标签: xml orbeon

我正在尝试创建一个管道,该管道从数据库中获取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。谢谢!

1 个答案:

答案 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>