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

至少一个在XSD中没有重复的XML元素

发布时间:2020-12-16 23:14:30 所属栏目:百科 来源:网络整理
导读:我正在尝试创建一个验证场景,我想从列表中选择至少一个非重复元素. 在某些地方: xs:choice minOccurs="1" maxOccurs="7" xs:element name="Sunday"/ xs:element name="Monday"/ xs:element name="Tuesday"/ xs:element name="Wednesday"/ xs:element name="
我正在尝试创建一个验证场景,我想从列表中选择至少一个非重复元素.

在某些地方:

<xs:choice minOccurs="1" maxOccurs="7">
    <xs:element name="Sunday"/>
    <xs:element name="Monday"/>
    <xs:element name="Tuesday"/>
    <xs:element name="Wednesday"/>
    <xs:element name="Thursday"/>
    <xs:element name="Friday"/>
    <xs:element name="Saturday"/>
</xs:choice>

但是,上述解决方案允许重复元素出现在列表中,这是我不想要的.

有效XML的示例:

<Monday/>
<Tuesday/>
<Friday/>

无效XML的示例:

<Monday/>
<Monday/>

这可以通过XSD实现,而无需对所有可能的序列进行硬编码吗?如果是这样的话?

解决方法

XSD 1.0解决方案

我不相信你的约束可以在XSD 1.0中表示,而不必硬编码所有可能的序列“(但是参见C. M. Sperberg-McQueen’s clever solution显着减少了组合学).使用xsd:unique可以强制元素的值是唯一的,但xsd:unique使用的XPath的子集不包括name(),否则可以帮助创建关于元素名称的唯一性声明.

XSD 1.1解决方案

您的约束可以使用xs:assert在XSD 1.1中表示:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" elementFormDefault="qualified"
  vc:minVersion="1.1">
  <xs:element name="Days">
    <xs:complexType>
      <xs:choice minOccurs="1" maxOccurs="7">
        <xs:element name="Sunday"/>
        <xs:element name="Monday"/>
        <xs:element name="Tuesday"/>
        <xs:element name="Wednesday"/>
        <xs:element name="Thursday"/>
        <xs:element name="Friday"/>
        <xs:element name="Saturday"/>
      </xs:choice>
      <xs:assert test="count(*[name() = following-sibling::*/name()]) = 0"/>
    </xs:complexType>
  </xs:element>  
</xs:schema>

(编辑:李大同)

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

    推荐文章
      热点阅读