是否可以使用xsd:redefine来扩展,而不是限制?

时间:2011-10-07 10:32:13

标签: xml xsd

我有一个XML Schema(XSD),我想用它来验证XML数据,但是关于XML数据的一个非常具体的事情是不合规的。我想生成一个备用XSD来用于成功验证XML。更具体地说,我想扩展类型的定义,以允许原始XSD不允许的值。修改原始XSD是不切实际的。

以下是原始XSD的原始定义:

<simpleType name="fooType">
  <restriction base="token">
    <pattern value="[a-z]+"/>
    <enumeration value="foo"/>
  </restriction>
</simpleType>

对于使用此类型定义的实体,我也想允许值“123”。所以,我试过这个:

<redefine schemaLocation="original.xsd">
  <simpleType name="fooType">
    <extension base="orig:fooType">
      <enumeration value="123"/>
    </extension>
  </simpleType>
</redefine>

我承认我只是扯着它,我不知道XSD。但在我阅读标准之前,我想知道这是否可行?我可以找到xsd:redefine的所有(我的意思是所有)示例已经限制可能的值,而不是扩展它们。

如果不使用xsd:redefine,那我该怎么办呢?

修改:相关但无法提供信息:Extending XSD files

1 个答案:

答案 0 :(得分:2)

simpleType的内容只能是限制,列表或联合。因为重新定义类型时你必须引用你要重新定义的类型作为基类型,所以你会被卡住;限制是你唯一可以拥有的。

为了完整起见,有一种技术允许使用联合内容进行开放式枚举,但是,由于您无法触及原始模式,因此它不适用于您的情况。

还有一个观察:有一个模式和一个枚举,有点“没用”;在你的情况下,你唯一的价值就是“foo”。