【问题标题】:Can Orbeon controls have multiple values?Orbeon 控件可以有多个值吗?
【发布时间】:2015-09-21 21:49:58
【问题描述】:

我认为答案是否定的,但问题已提交给我,所以我想确认一下。我的理解是,我为在 Form Builder 中使用而创建的任何自定义 XBL 控件都可以只有一个值。这是正确的吗?

我一直假设这是因为控件名称随后在数据实例中用作包含该值的节点的名称。

这个问题来自于希望拥有具有多个值的可重用组件,例如,一个地址控件,以便可以一致地记录地址并且不需要多次添加同一组字段。 Orbeon 确实以部分模板的形式对此提供了一些支持,但由于在部分模板的每个实例中控件名称保持相同,这不适用于我们的设计。

我的最佳想法是记录多个值的自定义控件可以将所有值编码为单个文本字符串,例如 JSON。当然,这并不理想。

还有其他选择吗?

【问题讨论】:

    标签: orbeon


    【解决方案1】:

    控件可以有多个值。发生这种情况时,这些值通常存储在嵌套元素中。 IE。控件可以绑定到元素<address>,并且可以创建嵌套元素<street><city><country> 等来存储地址的不同部分。

    在实践中,您可以在 Image Annotation 注释控件(参见 wpaint.xbl)中查看这是如何完成的,它利用 @987654329 创建嵌套元素 <image><annotation> @ 功能。

    【讨论】:

    • 当您说“通常”时,其他情况是什么?除了嵌套元素之外,还可以使用属性(并与 Image Annotation 一起使用)。或者,可以存储任何复杂的数据结构,例如 JSON(我们实际上使用 GeoJSON 来进行地图控制)。
    • 嵌套元素的唯一问题是它们不包含在 XML 模式中,我们依靠它来解析数据中的各个字段值。我对此感到有些惊讶,因为嵌套元素确实出现在表单定义中的 xf:instance 中。
    • @awilkinson 正确:可以使用属性,并且可以插入 JSON。将 JSON 放入 XML 中有些“不纯”,但有时它是最好的解决方案。
    • @awilkinson 关于生成的架构没有考虑到那些嵌套元素,你是对的;我没有想过。我认为最好的方法是让 XBL 组件有一种方法来声明元素的内容是什么(使用 XML Schema,在一些元数据中),并且模式生成器应该使用该信息。你怎么看?
    • 对。 XBL 组件需要以某种方式定义内容的结构,以便准确生成模式。它也可以定义为 XML 模式。这样,组件负责确保架构对其数据准确无误。我认为这会很好。
    猜你喜欢
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 2010-09-16
    • 2020-08-19
    • 2021-07-28
    • 1970-01-01
    相关资源
    最近更新 更多