XSD:如何重新定义simpleType的数据类型,例如。从xs:string到xs:integer

时间:2010-01-19 03:25:47

标签: schema xsd redefine simpletype

我正在尝试扩展和定制外部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>

书籍和网络似乎也没有太多帮助,所以我开始质疑这在理论上是否可行。

1 个答案:

答案 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。在此示例中,重新定义仅适用于枚举。