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

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

我尝试为我的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,web-app和eclipse),我收到以下失败消息。

找到以元素'metainf'开头的无效内容。其中一个'{metainf}'是预料之中的。

要么

Cvc-complex-type.2.4.a:从元素'metainf'开始发现无效内容。其中一个'{metainf}'是预期的,'第5行',第13列。

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

xml xsd xsd-validation
1个回答
2
投票

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

<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属性的文档:

在此架构的目标命名空间中声明的元素的表单。该值必须为“合格”或“不合格”。默认为“不合格”。

  • “unqualified”表示目标名称空间中的元素不需要使用名称空间前缀进行限定。
  • “qualified”表示必须使用名称空间前缀限定目标名称空间中的元素。
© www.soinside.com 2019 - 2024. All rights reserved.