cvc-complex-type.2.4.a: 具有子元素和属性的复杂类型

cvc-complex-type.2.4.a: complex type with child-element and attributes

我尝试为我的 xml 文件定义一些 xsd 方案。

xml 结构类似于

<?xml version="1.0" encoding="UTF-8"?>
<product name="abc" xmlns="http://example.org/productMetadata.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://example.org/productMetadata.xsd productMetadata.xsd">
    <metainf />
</product>

(具有一些已定义属性 "name" 和示例中的一些嵌套标签的根标签 "metainf")

我定义 xsd 的方法看起来像

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://example.org/productMetadata.xsd" xmlns="http://example.org/productMetadata.xsd">

    <xsd:element name="product">
        <xsd:complexType>
            <xsd:all>
                <xsd:element type="xsd:string" name="metainf" />
            </xsd:all>
            <xsd:attribute type="xsd:string" name="name" />
        </xsd:complexType>
    </xsd:element>

</xsd:schema>

不过,我无法根据 xsd 验证 xml。

根据验证器(我使用 java、网络应用程序和 eclipse),我收到以下失败消息。

Invalid content was found starting with element 'metainf'. One of '{metainf}' is expected.

Cvc-complex-type.2.4.a: Invalid Content Was Found Starting With Element 'metainf'. One Of '{metainf}' Is Expected., Line '5', Column '13'.

任何人都可以提示,我的 xsd 或 xml 有什么问题。

只需在 xsd:schema 声明中添加 elementFormDefault="qualified",如下所示:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    elementFormDefault="qualified"
    targetNamespace="http://example.org/productMetadata.xsd" xmlns="http://example.org/productMetadata.xsd">

根据 elementFormDefault 属性的文档:

The form for elements declared in the target namespace of this schema. The value must be "qualified" or "unqualified". Default is "unqualified".

  • "unqualified" indicates that elements from the target namespace are not required to be qualified with the namespace prefix.
  • "qualified" indicates that elements from the target namespace must be qualified with the namespace prefix.