我正在尝试扩展和定制外部xsd架构(fixml标准)。我需要更改某些元素的数据类型,而不是触及原始模式,而是重新定义它;但一直发现它非常麻烦。
存在什么:
字段-base.xsd
<xs:simpleType name="LastUpdateTime_t">
<xs:restriction base="UTCTimestamp">
<xs:simpleType>
我希望它成为:
<xs:simpleType name="LastUpdateTime_t">
<xs:restriction base="xs:string">
<xs:simpleType>
我尝试过(但失败了):
<xs:redefine schemaLocation="fields-base.xsd">
<xs:simpleType name="LastUpdateTime_t">
<xs:restriction base="xs:string" />
</xs:simpleType>
</xs:redefine>
书籍和网络似乎也没有太多帮助,所以我开始质疑这在理论上是否可行。
答案 0 :(得分:4)
据我所知,这是不可能的。
我可以在XMLSpy中进行验证的唯一重新定义是:
<xs:redefine schemaLocation="fields-base.xsd">
<xs:simpleType name="LastUpdateTime_t">
<xs:restriction base="LastUpdateTime_t" />
</xs:simpleType>
</xs:redefine>
也就是说,新限制必须基于基本限制。
可能是XMLSpy对此有误。
来自W3C XML Schema definition的这个有点神秘的引语:
在[孩子]内,各自 simpleType必须有一个 在其[孩子]和每个人之间 complexType必须有限制 或其中的延伸 grand- [children]的实际值 其基[属性]必须是 与其自身的实际值相同 name属性加上目标命名空间;
可能正在讨论这个问题(这是XMLSpy为此错误链接的规范的一部分)。
重新定义我能找到的简单类型的唯一真正好的例子是here。在此示例中,重新定义仅适用于枚举。