允许对可选 XML 元素进行 XForm 控件
Posted
技术标签:
【中文标题】允许对可选 XML 元素进行 XForm 控件【英文标题】:Allowing XForm controls for optional XML elements 【发布时间】:2011-06-03 22:32:41 【问题描述】:在设计 XML 数据库的 XForm 接口(使用 eXist 和 XSLTForms)时,我想为可选元素包含一个输入控件。 XML 数据记录已经存在,有些包含可选元素,有些则不包含。为了更新记录,我使用现有的 XML 记录作为模型实例。问题是当可选元素不存在时表单控件不显示,这是合乎逻辑的,但是当用户想要将数据添加到可选元素时会出现问题。
更明确地说,这是一个示例数据记录,data.xml:
<a>
<b>content</b>
</a>
使用 RNC 架构:
start =
element a
element b text ,
element notes text ?
XForms 模型:
<xf:model>
<xf:instance xmlns="" src="data.xml"/>
<xf:submission id="save" method="post" action="update.xq" />
</xf:model>
和控制:
<xf:input ref="/a/notes">
<xf:label>Notes (optional): </xf:label>
</xf:input>
问题是'Notes'输入控件根本没有显示。
一个明显的解决方案是添加一个触发按钮,以允许用户在需要时插入元素,但最好只显示输入控件,并且为空。
我的问题是:是否有一些鲜为人知的属性/绑定/多个实例/xpath 表达式的微妙组合会导致控件始终显示?
【问题讨论】:
【参考方案1】:说实话,XForms 并不能很好地处理这种可选元素的情况。请参阅 Micah 博客上的 this related discussion。一个不太令人满意的解决方法是在从 eXist 检索数据后为这些可选元素添加空元素,并在将数据保存回 eXist 之前将其删除。
【讨论】:
感谢您的建议。从那以后我发现用插入添加 new 元素并不容易。 是的,xforms:insert
是一个相当复杂的构造,尤其是因为您可以在该元素上使用所有属性。但是它有 2-3 个主要用例,每个用例都需要不同的属性,一旦你掌握了这些,事情就会变得更简单。您可以在xforms:insert
上找到某种教程:wiki.orbeon.com/forms/how-to/repeat-insert-position【参考方案2】:
W3C Forms Group 已经讨论过这种情况:http://www.w3.org/2010/07/07-forms-minutes.html 使用新的 MIP 有助于在 XSLTForms 中实现这一点。
-阿兰
【讨论】:
Alain,非常感谢 XSLTForms!一个很棒的资源。并感谢这个指向未来可能解决此问题的方法的指针。以上是关于允许对可选 XML 元素进行 XForm 控件的主要内容,如果未能解决你的问题,请参考以下文章