问题
I am trying to extend and tailor an external xsd schema (of the fixml standard). I need to change the data type of some of the elements, without touching the original schema, but by redefining it; but have been finding it exceedingly cumbersome.
What exists:
fields-base.xsd
<xs:simpleType name="LastUpdateTime_t">
<xs:restriction base="UTCTimestamp">
<xs:simpleType>
what I want it to become:
<xs:simpleType name="LastUpdateTime_t">
<xs:restriction base="xs:string">
<xs:simpleType>
What I have tried (but failed) :
<xs:redefine schemaLocation="fields-base.xsd">
<xs:simpleType name="LastUpdateTime_t">
<xs:restriction base="xs:string" />
</xs:simpleType>
</xs:redefine>
Books and net dont seem to have helped too much either, so I am starting to question if this is theoretically possible at all.
回答1:
As far as I can tell this is not possible.
The only redefine I could make validate in XMLSpy was:
<xs:redefine schemaLocation="fields-base.xsd">
<xs:simpleType name="LastUpdateTime_t">
<xs:restriction base="LastUpdateTime_t" />
</xs:simpleType>
</xs:redefine>
That is, the new restriction must be based on the base restriction.
Could be that XMLSpy is wrong about this.
This somewhat cryptic quote from the W3C XML Schema definition:
Within the [children], each simpleType must have a among its [children] and each complexType must have a restriction or extension among its grand-[children] the ·actual value· of whose base [attribute] must be the same as the ·actual value· of its own name attribute plus target namespace;
might be talking about this (it is that part of the spec the XMLSpy links to for this error).
The only really good example of redefining simple types I could find was here. In this example, the redefinition is only for enumerations.
来源:https://stackoverflow.com/questions/2090855/xsd-how-to-redefine-the-data-type-of-a-simpletype-eg-from-xsstring-to-xsinte