7

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

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

4

1 回答 1

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 定义的这个有点神秘的引用:

在 [children] 中,每个 simpleType 在其 [children] 中必须有一个,并且每个 complexType 在其 grand-[children] 中必须有一个限制或扩展,其基本 [attribute] 的·实际值·必须与·自身名称属性加上目标命名空间的实际值;

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

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

于 2010-01-19T04:40:21.650 回答