我正在寻找一种基于 Web 的结构化文档创作解决方案,适用于非常不同的文档类型,因此也适用于非常不同的内容模型。许多(但不是全部)文档类似于杂志文章,具有顶级元数据,例如关键字、作者和标题,然后是一系列可能包含其他部分的各种类型的有序部分。

内容不断发展,因此需要相当频繁地创建新的文档类型。
要求是可以使用创作系统(而不是硬编码软件)定义文档模板本身。

我被推荐查看基于 Xforms 的解决方案,例如 BetterForm、XSLTForms 和 Orbeon,其中可以创建 Xforms 来定义文档模板,然后可以使用 Xforms 创建 XML 文档。

我知道 XRX 是一个好主意,一切都在 XML 技术的范围内,但是虽然有一些非常好的用户界面来创建 Xforms 然后使用这些 Xforms 创建 XML 文档,但在我看来 Xforms 不支持排序和嵌套不同的可选部分类型。

任何建议将不胜感激。

编辑:

我一直在更仔细地研究 Xforms 技术并得出结论,使用它来创作我需要创建的结构化文档类型并不是它的设计目的。

具体来说,我有包含重复多态部分的文档:例如,我有一篇包含部分的文章。我想添加、删除、重新排序和删除部分。对于每个部分,我想选择下一个部分是文本部分还是图像部分或引用部分等。我可能想将文本部分更改为图像部分。

如果我选择使用 Xforms 来实现这一点,这意味着我基本上需要在运行时动态重写底层 Xforms 标记来为我的文档创建一个定制的模板,在这种情况下为我的特定文章布置了所有正确类型的部分.

虽然 XForms 提供了诸如 xforms:repeat 和 xforms:switch 之类的元素,但由于缺乏对运行时表单结构动态操作的原生支持,而且没有对继承进行建模的原生机制(而 XML Schema 具有抽象类型),这使得建模多态内容变得非常困难。很难,而且不太可能存在任何开箱即用的 Xforms 解决方案,而且构建定制的 Web 应用程序(这并非不可能)仍然是一场斗争。

如我错了请纠正我!

最佳答案

XForms 本身并不支持排序,但可以使用如下方式实现它:

<xf:group ref="preceding-sibling::*[1]">
  <xf:trigger>
    <xf:label>Move Up</xf:label>
    <xf:action ev:event="DOMActivate">
      <xf:insert nodeset="self::*" origin="following-sibling::*[1]" position="before"/>
      <xf:delete nodeset="following-sibling::*[1]"/>
    </xf:action>
  </xf:trigger>
</xf:group>
<xf:group ref="following-sibling::*[1]">
  <xf:trigger>
    <xf:label>Move Down</xf:label>
    <xf:action ev:event="DOMActivate">
      <xf:insert nodeset="self::*" origin="preceding-sibling::*[1]" position="after"/>
      <xf:delete nodeset="preceding-sibling::*[1]"/>
    </xf:action>
  </xf:trigger>
</xf:group>

嵌套可以以类似的方式执行。

创建结构时,当前需要在工作实例中定义此结构才能复制它。添加节点而不复制它们将需要额外的功能。

-阿兰

关于xml - 基于 Web 的结构化文档创作解决方案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13777777/

10-11 15:17