Error: Element 'assert' Is Invalid, Misplaced, Or Occurs Too Often

Error: Element 'assert' Is Invalid, Misplaced, Or Occurs Too Often

我已尝试在 XSD 中断言,但出现错误

Element 'assert' Is Invalid, Misplaced, Or Occurs Too Often.

我的例子如下XML。

`<?xml version="1.0" encoding="utf-8"?>
<p:CustomerElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <recordCount>1234</recordCount>
  <Customer>
      <indicator>A</indicator>
      <test1>hdjfs</test1>
      <test2>idsfh</test2>
   <test3>idsfh</test3>
   <test4>idsfh</test4>
   <test5>idsfh</test5>
   <test6>idsfh</test6>
   <test7>idsfh</test7>
 </Customer>
    <Customer>
      <indicator>D</indicator>
      <test1>abcd</test1>
   <test3>jhf</test3>
    </Customer>
</p:CustomerElement>`

我为此创建的 XSD 是

<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" 
           xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           xmlns="http://My.Schema.Namespace" 
           targetNamespace="http://My.Schema.Namespace"
     xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
           elementFormDefault="qualified"
           vc:minVersion="1.1">>

  <xs:element name="customer">
    <xs:complexType>
 <xs:sequence>
      <xs:element name="indicator">
 <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="A" />
            <xs:enumeration value="B" />
          </xs:restriction>
    </xs:simpleType>
   </xs:element>
      <xs:choice>
        <xs:element name="test1" />
        <xs:element name="test2" />
  <xs:element name="test3" />
  <xs:element name="test4" />
  <xs:element name="test5" />
  <xs:element name="test6" />
  <xs:element name="test7" />
      </xs:choice>
   </xs:sequence>
    <xs:assert test="if(indicator eq 'A') then test1 and test2 and test3 and test4 
      and test5 and test6 and test7
      else if(indicator eq 'B') then test1 and test3"/>
 </xs:complexType>
  </xs:element>
 </xs:schema>

我在 xml 上面用 freeformat validator 中的 XSD 验证了这一点。

我猜断言的语法中几乎没有错误。任何人都可以在我正在寻找的条件下提供帮助,并在语法上帮助我,如果我添加了支持 XSD 1.1 架构的正确链接,请告诉我。

解决您的 XSD 问题:

  1. 改变

       elementFormDefault="qualified"
       vc:minVersion="1.1">>
    

       vc:minVersion="1.1">
    

    消除虚假的 > 和重复的 elementFormDefault 属性。

  2. else false() 添加到您的断言测试中,使其格式正确。更好的是,重新写成没有复合 if-else 结构的逻辑等价物。

  3. 如果您想使用 xs:assert,请使用 XSD 1.1 处理器。 Freeformat.com仅支持XSD1.0.

格式正确XSD

<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" 
  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  xmlns="http://My.Schema.Namespace" 
  targetNamespace="http://My.Schema.Namespace"
  xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
  vc:minVersion="1.1">

  <xs:element name="customer">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="indicator">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:enumeration value="A" />
              <xs:enumeration value="B" />
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
        <xs:choice>
          <xs:element name="test1" />
          <xs:element name="test2" />
          <xs:element name="test3" />
          <xs:element name="test4" />
          <xs:element name="test5" />
          <xs:element name="test6" />
          <xs:element name="test7" />
        </xs:choice>
      </xs:sequence>
      <xs:assert test="if (indicator eq 'A') 
        then test1 and test2 and test3 and test4 and test5 and test6 and test7
        else if (indicator eq 'B') then test1 and test3 else false()"/>
    </xs:complexType>
  </xs:element>
</xs:schema>

在假设可以克服上述障碍的情况下,实现你的 XML 反对此 XSD 的有效性作为练习留给提问者完成。