XML 文档未针对 XSD 架构进行验证

XML document not validating against XSD schema

提问人:Michael 提问时间:10/17/2023 最后编辑:Michael 更新时间:10/18/2023 访问量:31

问:

我有以下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,使其成为可选的,那么为什么我会收到错误呢?

xml xsd 解析 xml -验证

评论

0赞 Yitzhak Khabinsky 10/17/2023
在提出 XSD 问题时,您需要提供一个最小的可重现示例:(1) 格式正确的输入 XML。(2) 你的逻辑,以及尝试实现它的完整 XSD。(3) XSD 处理器及其符合 XSD 标准:1.0 或 1.1。

答:

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 到无界元素。selfnextprevmixOccurs="0"mixOccurs="0"href

这是可能的,但你不能遗漏这三个要素中的任何一个。<_links><self/><next/><prev/></_links>

评论

0赞 Michael Kay 10/18/2023
更具体地说,该元素是可选的,因此该元素可以为空,但该元素不是可选的,因此它必须存在。hrefnextnext
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>