我正在为来自外部系统的xml创建架构。我在建模这个类型时遇到了问题:
<main>
...
<Foo TYPE="Numeric"/>
<Bar TYPE="Numeric">12.0</Bar>
...
</main>
我创建了一个扩展double的类型:
<xs:complexType name="myNumeric">
<xs:simpleContent>
<xs:extension base="xs:double">
<xs:attribute name="TYPE" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
....
<xs:element name="Foo" type="myNumeric" />
<xs:element name="Bar" type="myNumeric" />
然而,这还不够好,当我尝试验证架构时,我收到一个错误,抱怨:''不是'double'的有效值。
任何提示?
由于
答案 0 :(得分:2)
xs:double不能将空sting作为值。如果要将此类型标记为“null”,则可以使用xsi:nil =“true”来表示这是一个“空”双:
<Foo TYPE="Numeric" xsi:nil="true" />
允许在架构中使用nillable =“true”
<xs:element name="Foo" type="myNumeric" nillable="true" />
您需要在xml实例中包含对XML Schema实例命名空间的引用。
<MyRoot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ... >
...
</MyRoot>
答案 1 :(得分:2)
您可以创建一个由2种简单类型组合而成的特定类型。例如,下面的“myType”似乎回答了您的问题:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
xmlns:my="myNamespace" targetNamespace="myNamespace">
<xs:simpleType name="myType">
<xs:union memberTypes="xs:double my:empty"/>
</xs:simpleType>
<xs:simpleType name="empty">
<xs:restriction base="xs:string">
<xs:length value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>