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

Var*_*rde 6 schema xsd redefine simpletype

我正在尝试扩展和定制外部xsd架构(fixml标准).我需要更改某些元素的数据类型,而不是触及原始模式,而是重新定义它; 但一直发现它非常麻烦.

存在的是什么

场,base.xsd

<xs:simpleType name="LastUpdateTime_t">
           <xs:restriction base="UTCTimestamp">
<xs:simpleType>
Run Code Online (Sandbox Code Playgroud)

我希望它变成什么:

<xs:simpleType name="LastUpdateTime_t">
           <xs:restriction base="xs:string">
<xs:simpleType>
Run Code Online (Sandbox Code Playgroud)

我尝试了什么(但失败了):

<xs:redefine schemaLocation="fields-base.xsd">
            <xs:simpleType name="LastUpdateTime_t">
              <xs:restriction base="xs:string" />
            </xs:simpleType>
 </xs:redefine>
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*all 4

据我所知这是不可能的。

\n\n

我可以在 XMLSpy 中进行验证的唯一重新定义是:

\n\n
<xs:redefine schemaLocation="fields-base.xsd"> \n        <xs:simpleType name="LastUpdateTime_t"> \n          <xs:restriction base="LastUpdateTime_t" /> \n        </xs:simpleType> \n</xs:redefine> \n
Run Code Online (Sandbox Code Playgroud)\n\n

也就是说,新的限制必须基于基本限制。

\n\n

XMLSpy 对此可能是错误的。

\n\n

W3C XML Schema 定义中的这段有点神秘的引用:

\n\n
\n

在 [子项] 内,每个\n simpleType 必须在其 [子项] 中具有 \n,并且每个\n 复杂类型必须在其\n 孙子[子项] 之间具有限制\n 或扩展 \xc2\xb7 实际值\xc2 \xb7 的\n 其基[属性] 必须与其\n 名称属性的\xc2\xb7 实际值\xc2\xb7 加上目标命名空间相同;

\n
\n\n

可能正在谈论这个(这是 XMLSpy 针对此错误链接到的规范的一部分)。

\n\n

我能找到的唯一真正很好的重新定义简单类型的例子是here。在此示例中,重新定义仅适用于枚举。

\n