加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xsd – 如何使用XML模式允许类型化值为空?

发布时间:2020-12-16 07:46:04 所属栏目:百科 来源:网络整理
导读:我有一些 XML文档,我无法控制它.它们的结构是明确定义的,但它在一堆PDF中描述,尽管非常精确,但它们并不能使自动化验证变得易于处理.我正在尝试编写XML模式,以使(大部分)PDF文件中的规则可执行. 所有要素都是强制性的.但其中大约一半可能是空的或具有简单的类
我有一些 XML文档,我无法控制它.它们的结构是明确定义的,但它在一堆PDF中描述,尽管非常精确,但它们并不能使自动化验证变得易于处理.我正在尝试编写XML模式,以使(大部分)PDF文件中的规则可执行.

所有要素都是强制性的.但其中大约一半可能是空的或具有简单的类型内容.

在为这些元素定义数据类型时,我定义了两个版本:一个是“普通”,另一个是空.我通过使用空数据类型定义联合来完成此操作:

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

<xs:simpleType name="codPostal">
  <xs:restriction base="xs:string">
    <xs:pattern value="^[0-9]{4}-[0-9]{3}$"/>
  </xs:restriction>
</xs:simpleType>
<xs:simpleType name="opt_codPostal">
  <xs:union memberTypes="empty codPostal"/>
</xs:simpleType>

这样做的重复性较低吗?

您可以使用xs:nillable.

在XSD中

<xs:simpleType name="codPostal">
  <xs:restriction base="xs:string">
    <xs:pattern value="^[0-9]{4}-[0-9]{3}$"/>
  </xs:restriction>
</xs:simpleType>

<xs:element name="OptionalString" type="codPostal" nillable="true" />

在文件中

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

这对于非字符串类型(例如日期时间等)非常有用,对于可以使用零长度的字符串.

<OptionalString />

不幸的是,您需要在文档中指定“nil”属性.据我所知,做你想做的唯一非侵入式的方法是你已经选择的联合类型方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读