XML - 在针对模式进行验证时接收cvc-complex-type.2.4.a错误

时间:2014-02-02 22:27:09

标签: xml validation xsd

我确信这很简单,但我收到的验证错误是我无法解决的。如果我只有一个link_texthref元素出现,则验证正常。如果我包含多个link_texthref元素,则会收到验证错误:

  

cvc-complex-type.2.4.a:从元素'link_text'开始发现无效内容。其中一个是{{http://www.codeshop.ca/ns“:href}'。

我把它们都设置为无限制,所以我很难搞清楚这一点。我已经包含了代码的链接:

https://gist.github.com/anonymous/d04d007056b10a76b251

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

您已在架构中使用sequence内容模型组。 要求您按照指定的确切顺序使用元素。

您的架构说:

<!--Menu containing links -->
<element name="menu">
    <complexType>
        <sequence>
            <element name="link_text" maxOccurs="unbounded" />
            <element name="href" maxOccurs="unbounded" />
         </sequence>
    </complexType>
</element>

这意味着在<menu>内您首先需要指定一个或多个<link_text>元素,然后指定一个或多个<href>元素。 (并且您不能拥有字符内容,因此您需要从输入文件中删除“+”)

作为参考,由于您没有直接将其包含在您的问题中,只有链接,输入中导致错误的部分是:

<menu>
    <link_text>Vice Fightland Magazine</link_text>
    <href>http://www.vice.com</href>
+
    <link_text>MMAJunkie</link_text>
    <href>http://www.mmajunkie.com</href>
</menu>

看起来您希望每个link_text和href都属于一起。除了需要删除的“+”外,您还可以将其建模为一系列序列:

<element name="menu">
    <complexType>
        <sequence>
            <sequence maxOccurs="unbounded">
                <element name="link_text" />
                <element name="href" />
            </sequence>
        </sequence>
    </complexType>
</element>

但是我个人会将输入更改为:

<menu>
    <link>
        <text>Vice Fightland Magazine</text>
        <href>http://www.vice.com</href>
    </link>
    <link>
        <text>MMAJunkie</text>
        <href>http://www.mmajunkie.com</href>
    </link>
</menu>

它更清楚地表明文本和href属于一起,它可以为它创建一个complexType,您可以在多个位置引用,以及xml模式支持复杂类型的其他方式(而不仅仅是模型组) )。