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 问题:
改变
elementFormDefault="qualified"
vc:minVersion="1.1">>
至
vc:minVersion="1.1">
消除虚假的 >
和重复的 elementFormDefault
属性。
将 else false()
添加到您的断言测试中,使其格式正确。更好的是,重新写成没有复合 if-else
结构的逻辑等价物。
如果您想使用 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 的有效性作为练习留给提问者完成。
我已尝试在 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 问题:
改变
elementFormDefault="qualified" vc:minVersion="1.1">>
至
vc:minVersion="1.1">
消除虚假的
>
和重复的elementFormDefault
属性。将
else false()
添加到您的断言测试中,使其格式正确。更好的是,重新写成没有复合if-else
结构的逻辑等价物。如果您想使用
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 的有效性作为练习留给提问者完成。