簡體   English   中英

通過XSD限制具有屬性的元素數量?

[英]Limit number of elements with attribute via XSD?

有一個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>

規則 :元素items可以包含1到無界元素itemUID ,但只能包含具有屬性key 0或2或3個元素。

我可以僅使用XSD限制來定義此規則嗎?

您不能在XSD 1.0中表達約束,但是在XSD 1.1中,可以使用xs:assert將具有key屬性的itemUID元素限制為itemUID元素,如下所示:

  <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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM