使用未在 XML 中显式定义但存在于 XSD 中的默认命名空间时,如何使 XML 通过 XSD 验证

问题描述 投票:0回答:1

我有一个 XML,由于以下问题而验证失败: 元素“example:lotNumber”的前缀“example”未绑定。行“4”,列“19”。 元素“example:lotNumber”的前缀“example”未绑定。

我已经在 XSD 中声明了命名空间,因为它是默认命名空间,不需要再次包含在 XML 中。如何让XML通过XSD验证?

不希望在 XML 中包含命名空间

<note xmlns:example="urn:example:mda:">
,因为它是默认命名空间。即使我不在 XML 中包含默认命名空间,我也想确保 XML 通过验证。

以下是我的 XML: 以下是我的 XML 和 XSD:

<note >
<to>Tove</to>
<from>Jani</from>
<example:lotNumber>XML DEFAULT</example:lotNumber>
</note>

以下是包含默认命名空间的 XSD:

Folloiwng is XSD:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:example="urn:example:mda:">
  <xs:element name="note">
    <xs:complexType>
      <xs:sequence>
        <xs:element type="xs:string" name="to"/>
        <xs:element type="xs:string" name="from"/>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

这只是一个示例,但

example
可以包含任何元素,例如: 示例:helloXML 默认新新一个 示例:hello1XML 默认新新一个

因此,我无法在 XSD 中包含

lotNumber
并使其传递值是用户定义的,因此它可以是任何值。如何在不包含默认命名空间的情况下使 XML 通过 XSD 验证。

如果我在 XML 中包含命名空间,那么它会正常工作,但用户可以跳过,那么它也应该通过:

<note xmlns:example="urn:example:mda:">
<to>Tove</to>
<from>Jani</from>
<example:lotNumber>XML DEFAULT NEW NEW ONE</example:lotNumber>
</note>
xml xsd xsd-validation xml-validation
1个回答
0
投票

这与架构无关。在被认为适合使用模式进行验证之前,您的 XML 必须格式良好,如果它包含未声明的命名空间前缀,那么它的格式不正确。

© www.soinside.com 2019 - 2024. All rights reserved.