可选或布尔元素,用于指定XML模式中的特征?

时间:2009-08-11 13:12:01

标签: xsd

我正在尝试创建一个XML模式来描述医院的某些方面。医院可能有24小时的覆盖范围:紧急服务,手术室,药剂师等。整个清单相对较短 - 大约10个。覆盖范围可能超过其中一项服务。

我的问题是如何最好地代表这一点。我正在思考:

<coverage>
    <emergencyServices/>
    <operatingRoom/>
</coverage>

基本上,这些服务是可选的,如果存在,则由医院提供。

或者,我可以:

<coverage>
    <emergencyServices>true</emergencyServices>
    <operatingRoom>true</operatingRoom>
    <pharmacist>false</pharmacist>
</coverage>

在这种情况下,我需要所有元素,但值为false意味着不提供覆盖。

可能还有其他方法。

这样的事情的最佳做法是什么?而且,如果我使用第一个选项,那么元素应该在模式中使用什么类型?

1 个答案:

答案 0 :(得分:3)

这里的最佳做法实际上取决于消费者。

简短的规则是标记用于结构,内容用于数据。因此,将它们包含xs:boolean值通常是最佳方法。

现在,选择:

  1. 单独的无类型元素简单明了;有时处理系统可能难以读取它们,因为某些XML关系映射器可能看不到要放入关系表的元素中的任何数据。但如果他们有值<emergencyServices>true</emergencyServices>,那么关系表就会有一个值。

  2. 同样,如果您有固定的元素名称,这意味着如果您的消费者使用的是将XML映射到数据库的系统,那么每次添加服务时,都必须进行架构更改。

  3. 还有其他几种方式;每个都有权衡:

  4. <xs:string>enumeration一起使用,并允许多份副本。然后你可以<coverage>emergencyServices</coverage><coverage>operatingRoom</coverage>.它使列表添加更简单,但允许重复。此方案不需要为消费者在数据库中更改架构。

  5. 您可以在<coverage>元素上使用属性。它们将具有xs:boolean类型,但仍需要更改架构。当然,这会唤起attribute vs. element论证。

  6. 一个好资源是Chapter 11 Effective XML。至少应该在做出最终决定之前阅读。