簡體   English   中英

XML驗證:XSD中的並發無序和出現要求

[英]XML validation: Concurrent unordered and occurrence requirements in XSD

在XML Schema(XSD 1.0)中,我對四個元素有以下要求:

  1. element1將始終始終首先出現,其中minOccurs = 0和maxOccurs = 1
  2. element2將以minOccurs = 0和maxOccurs = 1出現
  3. element3將以minOccurs = 0和maxOccurs = Unbounded出現
  4. element2element3將以任何順序出現(在element1之后和element4之前)
  5. element4將始終以minOccurs = 0和maxOccurs = unbounded出現在最后
  6. 所有這些元素都是parent_element的子元素,並且所有元素的minOccurs = 0,但在父元素中至少應存在1個元素。

我創建了一個方案,該方案滿足#2#6之外的所有要求。 在我的架構中,element2和element3可以按任何順序出現,但是我無法限制element2僅出現一次。 另外,我無法確保parent_element中至少存在1個元素。

在下面查看我的架構,並提出更新建議,以滿足上述所有要求。

<xs:element name="parent_element">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="element1" type="type1" minOccurs="0" maxOccurs="1" />
            <xs:choice minOccurs="0" maxOccurs="unbounded" >
                <xs:element name="element2" type="type1" />
                <xs:element name="element3" type="type1" />
            </xs:choice>
            <xs:element name="element4" type="type2" minOccurs="0" maxOccurs="unbounded" />
        </xs:sequence>
    </xs:complexType>
</xs:element>

為了滿足要求2,我嘗試了將maxOccurs="1"與element2一起使用(內部選擇)的技巧,但是它不起作用,並且element2仍然可以按任意順序多次重復使用element3。

<xs:element name="parent_element">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="element1" type="type1" minOccurs="0" maxOccurs="1" />
            <xs:choice minOccurs="0" maxOccurs="unbounded" >
                <xs:element name="element2" type="type1" maxOccurs="1" />
                <xs:element name="element3" type="type1" />
            </xs:choice>
            <xs:element name="element4" type="type2" minOccurs="0" maxOccurs="unbounded" />
        </xs:sequence>
    </xs:complexType>
</xs:element>

要求#4和#6禁止使用XSD 1.0。

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="parent_element">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="element1" minOccurs="0" maxOccurs="1" />
          <xs:choice minOccurs="0" maxOccurs="unbounded" >
            <xs:element name="element2" />
            <xs:element name="element3" />
          </xs:choice>
          <xs:element name="element4" minOccurs="0" maxOccurs="unbounded" />
        </xs:sequence>
        <xs:assert test="count(element2) &lt; 2 
                          and (element1 or element2 or element3 or element4)"/>
      </xs:complexType>
    </xs:element>
</xs:schema>

暫無
暫無

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

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