3

我正在寻找一种基于 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 应用程序(这不是不可能的)仍然是一场斗争。

如我错了请纠正我!

4

2 回答 2

3

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>

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

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

-阿兰

于 2012-12-08T14:30:59.863 回答
2

我认为Oppidoc.fr的 Stephane Sire 在文档 Web 创作领域正在进行一些工作。

您可能想查看Axel 库XTiger 规范

于 2013-01-08T01:39:14.280 回答