通过 XSD 限制具有属性的元素数量?

2023-12-07

有一个 XML 片段

<items>
    <itemUID>uid-1</itemUID>
    <itemUID>uid-2</itemUID>
    <itemUID key="true">uid-3</itemUID>
    <itemUID>uid-4</itemUID>
    <itemUID>uid-5</itemUID>
    <itemUID key="true">uid-6</itemUID>
    <itemUID>uid-7</itemUID>
</items>

Rule: 元素items可以包含 1 到无限个元素itemUID,但只有 0 或 2 或 3 个具有属性的元素key.

我可以仅使用 XSD 限制来定义此规则吗?


您无法在 XSD 1.0 中表达您的约束,但在 XSD 1.1 中,您可以使用xs:assert来限制itemUID元素与key0、2、3 元素的属性如下:

  <xs:assert test="count(itemUID[@key]) = (0, 2, 3)"/>

这是完整 XSD 中的上下文:

XSD 1.1

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" 
  elementFormDefault="qualified" 
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
  vc:minVersion="1.1">

  <xs:element name="items">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="itemUID" minOccurs="1" maxOccurs="unbounded">
           <xs:complexType>
             <xs:simpleContent>
               <xs:extension base="xs:string">
                 <xs:attribute name="key" type="xs:boolean">
                 </xs:attribute>
               </xs:extension>
             </xs:simpleContent>
           </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:assert test="count(itemUID[@key]) = (0, 2, 3)"/>
    </xs:complexType>
  </xs:element>
</xs:schema>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 XSD 限制具有属性的元素数量? 的相关文章

随机推荐