xproc - 序列输入到在 XProc 1.0 中?
问题描述
XProc是否<p:filter>
能够接受一系列文档作为输入?当我喂葫芦时:
<?xml version="1.0" encoding="UTF-8"?>
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc" xmlns:c="http://www.w3.org/ns/xproc-step"
version="1.0">
<p:input port="source" sequence="true">
<p:inline>
<doc>
<content>Hello world!</content>
</doc>
</p:inline>
<p:inline>
<doc>
<content>Goodbye world!</content>
</doc>
</p:inline>
</p:input>
<p:output port="result" sequence="true"/>
<p:filter select="//content">
<p:input port="source" sequence="true"/>
</p:filter>
</p:declare-step>
它引发以下错误:
err:XD0006 : 2 个文档出现在“源”端口上。如果未指定序列,或值为 false,则这是一个动态错误,除非在声明的端口上恰好出现一个文档。
@sequence
已指定,并且值为“true”。如果我从输入中删除第二个内联文档,则处理会成功完成。如果我留下这两个输入,但<p:filter>
用其他接受序列的东西替换,比如<p:count>
,它也会成功运行完成。
我很困惑,因为错误消息没有说<p:filter>
不能接受序列;它告诉我指定一个序列,我已经做到了。并且由于 XPath 过滤可以应用于 XPathcollection()
函数,所以不清楚(嗯,对我来说)为什么不能(至少在原则上)在 XProc 中过滤文档序列。
我也不确定如何阅读规范,其中说明了<p:filter>
这一点:
除了选择表达式是动态计算的之外,此步骤的行为就像带有选择表达式的 p:input。
由于<p:input>
可以接受一个序列,如果<p:filter>
据说除了过滤之外的行为方式相同,这似乎意味着它<p:filter>
也应该能够接受一个序列。
我认为选项是:
<p:filter>
接受多个输入,但我没有正确指定。<p:filter>
不接受多个输入,并且错误消息和规范具有误导性,或者我未能正确理解它们。
我很高兴(好吧,愿意)在任何一种情况下都承认用户错误,但我会很感激澄清。
<p:wrap-sequence>
是的,我可以通过使用将多个输入形成单个 XML 树来解决该问题,但我的问题是关于如何<p:filter>
工作,而不是关于如何获得特定的结果结果。在我的实际代码中,读取和传递我的真实输入文档需要 1.5 秒,如果我添加包装它们的步骤,则需要 4.5 秒,我想节省 3 秒,特别是因为包装将是一个短暂的工作 -左右,因为无论如何我只是要提取内容并在过滤步骤之后得到多个文档。
解决方案
根据 XProc 语言的建议,在7.1.9 p:filter阅读以下步骤定义:
<p:declare-step type="p:filter"> <p:input port="source"/> <p:output port="result" sequence="true"/> <p:option name="select" required="true"/> <!-- XPathExpression --> </p:declare-step>
您会注意到源端口没有用 声明sequence="true"
,因此您上面提到的第二个选项是正确的。
作为解决方法,您确实可以使用<p:wrap>
.
推荐阅读
- sql - SQL 查询以查找包含组的 2 个表之间的缺失数据
- next.js - Next.js:FetchError: invalid json response body Unexpected token < in JSON at position 0
- c# - 使用 Azure KeyVault 签署 CSR 并使用 Bouncy Castle 链接 CA
- c# - Unity OnTriggerEnter 启动游戏时自动激活
- datetime - 日期转换问题
- css - 通过元素映射时的 CSS 网格布局
- java - 如何在 TabsLayout 中将一个片段的内容替换为另一个片段的内容?
- python - 如何清除在注册表单中上传文件时需要填写此字段的表单错误
- r - geom_jitter 点大于定义值的小提琴图
- python-logging - 如何在 pythong 日志记录中获取特定的日志记录配置