如何使用允许模式0,1验证xs:unsignedInt和xsd中的空值?

时间:2014-07-11 07:28:44

标签: validation xsd xsd-validation

我需要验证以下元素: -

 <xs:element name="IsBucketRequired" type="xs:unsignedInt"/>

需要验证: -

  1. Allow 1,0 [Pattern]
  2. Allow Empty value.

我尝试使用以下代码: -

    <xs:element name="IsBucketRequired" nillable="true"  minOccurs="1">
      <xs:simpleType>
        <xs:restriction base="xs:unsignedInt">
          <xs:pattern value="[1,0]"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:element>

上述方法正确验证1,0但不允许空值。

另一次尝试相同的验证,但没有工作。

  <xs:element name="IsBucketRequired">
      <xs:simpleType>
        <xs:union>
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:length value="0"/>
            </xs:restriction>
          </xs:simpleType>
          <xs:simpleType>
            <xs:restriction base="xs:unsignedInt">
              <xs:pattern value="[1,0]"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:union>
      </xs:simpleType>
    </xs:element>

任何人都请告诉我如何为我的要求编写验证码。

谢谢

1 个答案:

答案 0 :(得分:0)

嗯,你的第一次尝试(nillabel =&#34; true&#34;)应该有效。你只需要表达XML实例中的元素为空(=&#34; null&#34;)xsi:nil =&#34; true&#34;属性。

<IsBucketRequired xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />

或者,您可以将简单类型定义为xs:string的限制。

<xs:simpleType name="zeroOrOneOrEmpty">
    <xs:restriction base="xs:string">
        <xs:enumeration value="" />
        <xs:enumeration value="1" />
        <xs:enumeration value="0" />
    </xs:restriction>
</xs:simpleType>

第三个选项可以使用像

这样的联合来定义
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:simpleType name="zeroOrOne">
        <xs:restriction base="xs:unsignedInt">
            <xs:enumeration value="0" />
            <xs:enumeration value="1" />
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="emptyString">
        <xs:restriction base="xs:string">
            <xs:length value="0" />
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="zeroOrOneOrEmpty">
        <xs:union memberTypes="zeroOrOne emptyString" />
    </xs:simpleType>

    <xs:element name="IsBucketRequired" type="zeroOrOneOrEmpty" />

</xs:schema>