错误:元素"断言"无效、放错位置或发生频率太高



我尝试在XSD中断言,得到错误

元素"assert"无效、放置错误或发生频率过高。

我的示例是下面的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>

我正在freeformat验证器中用XSD验证上面的xml。

我想断言的语法中几乎没有错误。请任何人帮助我寻找的条件,帮助我语法,并让我知道我是否添加了支持XSD 1.1模式的正确链接。

解决XSD的问题:

  1. 更改

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

    vc:minVersion="1.1">
    

    以消除伪CCD_ 1和重复的CCD_。

  2. 在断言测试中添加一个else false(),使其格式正确。更好的是,在没有复合if-else构造的情况下重写逻辑等价物

  3. 如果要使用xs:assert,请使用XSD1.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>

假设可以克服上述障碍,那么根据此XSD实现XML的有效性将由询问者完成。

最新更新