【问题标题】:Orbeon XPL - issues with SQL Processor, HTTP Serializer & namespace prefixesOrbeon XPL - SQL 处理器、HTTP 序列化程序和命名空间前缀的问题
【发布时间】:2014-01-07 16:07:46
【问题描述】:

我正在尝试创建一个管道,该管道从数据库中获取一个 BLOB 并将其作为二进制文件通过浏览器传递给用户,使用 SQL 处理器为 HTTP 序列化程序提供数据。我在 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>

这里是文件-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>

通过这种配置,我得到 "Undeclared prefix in xsi:type: xs"

我错过了什么吗?这是我第一次尝试深入研究 xpl。谢谢!

【问题讨论】:

  • xsi:type="xs:base64Binary" 标签中的 xs:
  • @spojam - 我想了这么多,所以我尝试修复它是添加 xmlns:xs="w3.org/2001/XMLSchema" 到 标签...运气不好
  • w3.org/TR/xml-media-types 在名称空间中多了一个 xmime,请参阅第 1.2 节要求

标签: xml orbeon


【解决方案1】:

所以,我有一个解决方法可以完成这项工作(但是,我仍然对 SQL 处理器为什么不能正确输出必要的属性感到好奇)。解决方案是让 SQL 处理器创建没有属性的 &lt;document&gt; 标记,然后通过 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>

【讨论】:

  • 很高兴你能做到这一点,我没想到会在转换上指明类型
猜你喜欢
  • 2011-01-21
  • 1970-01-01
  • 2011-03-09
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
  • 2015-03-31
  • 1970-01-01
相关资源
最近更新 更多