为什么在XML Schema中只使用一个只有一个成员类型的联合?

时间:2014-05-30 18:18:18

标签: xml xsd

我在Office Open XML规范中找到了一种以这种方式定义的类型。

<xsd:simpleType name="ST_TextBulletSize">
  <xsd:union memberTypes="ST_TextBulletSizePercent"/>
</xsd:simpleType>
<xsd:simpleType name="ST_TextBulletSizePercent">
  <xsd:restriction base="xsd:string">
    <xsd:pattern value="0*((2[5-9])|([3-9][0-9])|([1-3][0-9][0-9])|400)%"/>
  </xsd:restriction>
</xsd:simpleType>

1 个答案:

答案 0 :(得分:0)

为什么OOXML架构的创建者以这种方式做到了,没有人可以告诉我们。但我想你是在猜测,而不是权威的答案。我能想象的原因:

  • 过去常常有三种成员类型,但随着架构设计的改变,其中两种成员就会消失。
  • 设计师认为这是下一个版本可能需要多种ST_TextBulletSize(百分比,绝对值,开尔文度,马格南度,额外值,......)的地方,因此他们通过使它成为一个联盟来预备现在输入,即使只有一个成员。 (就像在Pascal或C中的条件的then-或else子句周围写begin ... end{ ... },即使它包含只有一个语句:你不需要这样做,但是当你不这样做时,你可能会忘记在将一个语句更改为一系列语句时添加它,这会导致麻烦。)
  • 写这篇文章的人只是想知道如果一个联盟只有一种类型,验证者会抛出什么错误信息,然后忘记把它改成一些不那么古怪的东西。