【问题标题】:XSD complex type is null but simple type inside can't be emptyXSD复杂类型为null但里面的简单类型不能为空
【发布时间】:2017-10-04 07:23:23
【问题描述】:

当您遇到以下情况时,我正在寻找确保不会引发错误的最佳方法:

我有一个简单类型的电话号码,由 XSD 通过以下方式验证:

<xs: simpleType name="phone-number">
<xs:restriction Base="xs:token">
<xs:pattern value="\d{9}"/>
</xs:restriction>
<xs:SimpleType>

该模式不允许空值,只有 9 位值。

现在我有一个 complexType person-data,里面有一个 phone-number 类型的元素。

<xs:complexType name="person-data">
        <xs:all>
        <xs:element name="phone-number" type="phone-number" minOccurs="0"/>

确保空值验证通过(或根本不验证)的最佳方法是什么?

当 XML 文件不包含 person-data 标记时出现问题(将其设为 null) - 然后电话号码类型的验证失败

【问题讨论】:

  • 世界上有哪些地方使用 9 位数的电话号码?
  • 不清楚你在问什么。 “确保验证通过(或根本不验证)空值的最佳方法是什么?”。如果不存在人员数据元素,那么您向我们展示的架构位是无关紧要的,因为它们只影响它存在时发生的事情。您是说希望允许个人数据元素包含内容为空的电话号码元素吗?

标签: xml validation xsd null is-empty


【解决方案1】:

改变

<xs:pattern value="\d{9}"/>

<xs:pattern value="\d{9}|"/>

允许 9 位数字或空字符串。

另请注意,XML 和 XSD 区分大小写,因此您必须对 phone-number 的定义进行一些额外的更改:

  <xs:simpleType name="phone-number">
    <xs:restriction base="xs:token">
      <xs:pattern value="\d{9}|"/>
    </xs:restriction>
  </xs:simpleType>

上述定义在语法上是正确的,并且允许由 9 位数字或无字符组成的标记。

最后说明:xs:token 将允许前导和尾随空格;如果您不想要这些,请使用xs:string

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多