我正在尝试在XSD中定义一个元素类型,我想要一个可选属性,如果存在,可以包含一个浮点数,或者为空(但仍然存在).
即:
<xs:element name="MyElement"> <xs:complexType> <xs:attribute name="optionalFloatAttribute" type="xs:float" use="optional"/> </xs:complexType> </xs:element>
需要“修复”以允许以下所有xml: –
<MyElement/> or <MyElement optionalFloatAttribute=""/> or <MyElement optionalFloatAttribute="3.14159"/>
我能看到这样做的唯一方法是将类型更改为xs:string,并将xs:restriction与正则表达式一起使用.但这对我来说似乎并不理想.有没有更好的办法?
我必须能够支持xml的这些变体 – 程序和现有的xml是遗留的,我试图反向创建一个模式,以匹配我在我们必须视为有效的xml时看到的无数变体.
解决方法
我不认为有办法处理这个并使用xs:float.从根本上说,它归结为空字符串不是有效数字的事实.您通常期望值为0,或者元素完全丢失.作为以下问题的答案有一个很好的解释:
Empty elements for primitve datatypes forbidden in XSD
似乎使用xs:string和regexp的选项可能是您最好的计划.