INT Type的XML空值

时间:2014-12-05 06:29:27

标签: xml validation xsd

 <xs:element name="EmpVisionPlanExist" minOccurs ="0">
 <xs:simpleType>
 <xs:union memberTypes="INT EmptyStrings "/>
 </xs:simpleType>
 </xs:element>

<xs:simpleType name="Int">
<xs:restriction base="xs:integer">
<xs:pattern value="[01]"/>
</xs:restriction>
</xs:simpleType>

<xs:simpleType name="EmptyStrings">
<xs:restriction base="xs:token">
<xs:enumeration value=""/>
</xs:restriction>
</xs:simpleType>

如果我将xml作为

<EmpVisionPlanExist></EmpVisionPlanExist>

在xsd验证中是合适的。 但我希望它被允许。

2 个答案:

答案 0 :(得分:0)

如果您定义EmptyStrings这样的类型,它应该有效:

  <xs:simpleType name="EmptyStrings">
    <xs:restriction base="xs:string">
      <xs:maxLength value="0" />
    </xs:restriction>
  </xs:simpleType>

但是,允许非字符串简单类型元素为空的正统方法是使元素可以为空:

<xs:element name="EmpVisionPlanExist" type="INT" nillable="true" />

如果你选择这条路线,你需要在空白的无效元素中加入xsi:nil属性:

<EmpVisionPlanExist xsi:nil="true"></EmpVisionPlanExist>   <!-- valid -->
<EmpVisionPlanExist></EmpVisionPlanExist>                  <!-- not valid -->

xsi这里指的是命名空间http://www.w3.org/2001/XMLSchema-instance

最后,如果您要定义一个只能包含值01的类型,我认为&#34; Bit&#34;是一个比它更好的名字&#34; Int&#34;。我也想知道你为什么不使用布尔类型,这是一种标准类型,并允许值truefalse01

答案 1 :(得分:0)

如果我通过s / INT / Int /更正你的模式并删除minOccurs =“0”,那么你的实例是有效的(由Saxon验证)。你得到了什么错误信息,以及你使用的模式处理器?