是否有可能使用的xsd:重新定义扩展,而不是限制?
问题描述:
我有我想要使用验证XML数据的XML架构(XSD),但有关XML数据的一个非常具体的事情不符合。我想生成一个备用XSD来成功验证XML。更具体地讲,我想延长一个类型的定义,允许不是由原始XSD允许的值。修改原始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:重新定义,那么我该怎么办呢?
编辑:相关,但不提供信息:Extending XSD files
答
一个简单类型的内容只能是有限制的,列表或联盟。因为当重新定义一个类型时,你必须引用一个你正在重新定义的类型作为基础类型,然后你就被卡住了;限制是你唯一可以拥有的。
为了完整起见,有一种技术,允许开放的枚举,涉及利用工会的内容,但是,因为你不能碰的原始模式,它不会在你的情况下工作。
还有一个观察:具有图案和枚举,是种“无用”;在你的情况下,你可以拥有的唯一的价值是“富”。