提问人:Michael 提问时间:10/17/2023 最后编辑:Michael 更新时间:10/18/2023 访问量:31
XML 文档未针对 XSD 架构进行验证
XML document not validating against XSD schema
问:
我有以下XML架构:
<xs:element name="_links">
<xs:complexType>
<xs:sequence>
<xs:element name="self">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="href" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="next">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="href" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="prev">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="href" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
我正在验证的特定 XML 文档中没有“下一个”字段(尽管某些文档可以)。当我加载此文档时,我收到错误:
Error validating source XML against schema - The element '_links' in namespace 'http://www.orbis-software.com/WebSvcCon' has invalid child element 'prev' in namespace 'http://www.orbis-software.com/WebSvcCon'. List of possible elements expected: 'next' in namespace 'http://www.orbis-software.com/WebSvcCon'.
根据 XSD,“next”元素设置为 minOccurs=0,使其成为可选的,那么为什么我会收到错误呢?
答:
0赞
Martin Honnen
10/18/2023
#1
在架构中,元素的内容在_links
<xs:element name="_links">
<xs:complexType>
<xs:sequence>
<xs:element name="self">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="href" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="next">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="href" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="prev">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="href" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
作为三个元素的序列,即 和 。这些元素都不是可选的,因为它们都没有 ,每个元素的内容只有一个,因为它们可以包含 0 到无界元素。self
next
prev
mixOccurs="0"
mixOccurs="0"
href
这是可能的,但你不能遗漏这三个要素中的任何一个。<_links><self/><next/><prev/></_links>
评论
0赞
Michael Kay
10/18/2023
更具体地说,该元素是可选的,因此该元素可以为空,但该元素不是可选的,因此它必须存在。href
next
next
0赞
Michael
10/18/2023
#2
如果有人感兴趣,我通过指定最小值出现两次来工作:
<xs:element name="_links">
<xs:complexType>
<xs:sequence>
<xs:element name="self">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="href" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="next">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="href" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="prev">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="href" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
评论