我正在寻找一种基于网络的结构化文档创作解决方案,适用于各种各样的文档类型,因此内容模型也非常不同。许多(但不是全部)文档类似于具有顶级元数据的杂志文章,例如关键字,作者和标题,然后是一系列可能包含其他部分的各种类型的有序部分。
内容不断发展,因此需要相当频繁地创建新的文档类型。 要求是文档模板本身可以使用创作系统(而不是硬编码软件)来定义。
我被建议查看基于Xforms的解决方案,例如betterForm,XSLTForms和Orbeon,其中可以创建Xforms来定义文档模板,然后可以使用Xforms创建XML文档。
我认为XRX是一个好主意,一切都在XML技术的范围内,但是虽然有一些非常好的用户界面来创建Xforms,然后使用这些Xforms来创建XML文档,但我认为Xforms赢得了' t支持不同可选择部分类型的排序和嵌套。
任何建议都将不胜感激。
编辑:
我一直在密切关注Xforms技术,并得出结论,用它来创作我需要创建的结构化文档类型并不是它的设计目标。
具体来说,我有重复多态部分的文档:例如,我有一篇带有部分的文章。我想添加,删除,重新排序和删除部分。对于每个部分,我想选择下一部分是文本部分还是图像部分或引用部分等。我可能想要将文本部分更改为图像部分。
如果我选择使用Xforms来实现这一点,这意味着我基本上需要在运行时动态重写底层Xforms标记,为我的文档创建一个定制模板,并为我的特定文章布置所有正确类型的部分,在这种情况下。
虽然XForms提供了诸如xforms:repeat和xforms:switch之类的元素,但缺乏对运行时动态操作表单结构的本机支持,以及没有用于模型继承的本机机制(而XML Schema具有抽象类型)多态内容非常困难,并且不太可能存在任何开箱即用的Xforms解决方案,而且构建定制的Web应用程序(这不是不可能的)仍然是一个难题。
如果我错了,请纠正我!
答案 0 :(得分: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>
嵌套可以以类似的方式执行。
创建结构时,当前需要在工作实例中定义此结构才能复制它。添加节点而不复制它们需要额外的功能。
-Alain
答案 1 :(得分:2)
我认为Stephane Sire正在Oppidoc.fr进行文档网络创作领域的一些正在进行的工作。
您可能希望查看Axel library和XTiger specification。