我正在尝试创建一个XML模式来描述医院的某些方面。医院可能有24小时的覆盖范围:紧急服务,手术室,药剂师等。整个清单相对较短 - 大约10个。覆盖范围可能超过其中一项服务。
我的问题是如何最好地代表这一点。我正在思考:
<coverage>
<emergencyServices/>
<operatingRoom/>
</coverage>
基本上,这些服务是可选的,如果存在,则由医院提供。
或者,我可以:
<coverage>
<emergencyServices>true</emergencyServices>
<operatingRoom>true</operatingRoom>
<pharmacist>false</pharmacist>
</coverage>
在这种情况下,我需要所有元素,但值为false意味着不提供覆盖。
可能还有其他方法。
这样的事情的最佳做法是什么?而且,如果我使用第一个选项,那么元素应该在模式中使用什么类型?
答案 0 :(得分:3)
这里的最佳做法实际上取决于消费者。
简短的规则是标记用于结构,内容用于数据。因此,将它们包含xs:boolean
值通常是最佳方法。
现在,选择:
单独的无类型元素简单明了;有时处理系统可能难以读取它们,因为某些XML关系映射器可能看不到要放入关系表的元素中的任何数据。但如果他们有值<emergencyServices>true</emergencyServices>
,那么关系表就会有一个值。
同样,如果您有固定的元素名称,这意味着如果您的消费者使用的是将XML映射到数据库的系统,那么每次添加服务时,都必须进行架构更改。
还有其他几种方式;每个都有权衡:
将<xs:string>
与enumeration
一起使用,并允许多份副本。然后你可以<coverage>emergencyServices</coverage><coverage>operatingRoom</coverage>.
它使列表添加更简单,但允许重复。此方案不需要为消费者在数据库中更改架构。
您可以在<coverage>
元素上使用属性。它们将具有xs:boolean
类型,但仍需要更改架构。当然,这会唤起attribute vs. element论证。
一个好资源是Chapter 11 Effective XML。至少应该在做出最终决定之前阅读。