【问题标题】:XSD Include of schema does not work with maxOccurs="unbounded"架构的 XSD 包含不适用于 maxOccurs="unbounded"
【发布时间】:2013-03-19 01:54:41
【问题描述】:

在 stackoverflow 社区的大量帮助下,我正在缓慢但肯定地获得一些 XML。

我有一个工作正常的 XML 架构,并且包含很多类型定义。所以,我已经拆分了我的模式,将类型定义放在不同的模式中,这样我就可以在其他模式中使用它们。如果你跟随;这就是我所做的......

这是我的 XML

<?xml version="1.0" encoding="UTF-8"?>

<ns:Root
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:ns="urn:TestNamespace"  
    xsi:schemaLocation="urn:TestNamespace Test1.xsd"
    >
    <ns:element1 id="001">
        <ns:element2 id="001.1" order="1">
            <ns:element3 id="001.1.1" />
        </ns:element2>
        <ns:element2 id="001.2" order="2">
            <ns:element3 id="001.1.2" />
        </ns:element2>        
    </ns:element1>
    <ns:element1 id="002">
        <ns:element2 id="002.1" order="3">
        <ns:element3 id="002.1.1" />
        </ns:element2>
        <ns:element2 id="002.2" order="4">
            <ns:element3 id="002.1.2" />
        </ns:element2> 
    </ns:element1>    
</ns:Root>

这是我的 XSD

<?xml version="1.0"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="urn:TestNamespace"
            xmlns:ns="urn:TestNamespace"
            elementFormDefault="qualified">

    <xsd:include schemaLocation="TestTypes1.xsd"/>
    <xsd:element name="Root">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="element1" maxOccurs="unbounded" type="ns:element1Type"/>
            </xsd:sequence>
        </xsd:complexType>
        <xsd:unique name="uniqueElement2OrderInElement1">
            <xsd:selector xpath="./ns:element1" />
            <xsd:field xpath="ns:element2/@order" />
        </xsd:unique>        
    </xsd:element>
</xsd:schema>

这是我的新类型架构这里定义的元素直接从它们工作的上述架构中复制出来。

<?xml version="1.0"?>

<xsd:schema version="1.0"
           xmlns:xsd="http://www.w3.org/2001/XMLSchema"
           targetNamespace="urn:TestNamespace"
           xmlns:ns="urn:TestNamespace"           
           elementFormDefault="unqualified">
    <xsd:complexType name="element1Type">
        <xsd:sequence>
            <xsd:element name="element2" maxOccurs="unbounded" type="ns:element2Type"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>

    <xsd:complexType name="element2Type">
        <xsd:sequence>
            <xsd:element name="element3" type="ns:element3Type" />
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:string" />
        <xsd:attribute name="order" type="xsd:string" />
    </xsd:complexType>

    <xsd:complexType name="element3Type">
        <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>        
</xsd:schema>

当我现在尝试验证我的 XML 时,我收到了这个错误;

cvc-complex-type.2.4.a:发现以元素“ns:element2”开头的无效内容。需要“{element2}”之一。 [9] cvc-complex-type.2.4.a:发现以元素“ns:element2”开头的无效内容。需要“{element2}”之一。 [17]

第 9 行和第 17 行与每个 'element1' 中第一个 'element2' 的开头相关。正如我所说,这在我将它们分开之前有效,所以我想现在我一定丢失了一些东西,或者未能将某些东西从一个翻译到另一个。似乎在抱怨它需要一个“element2”,即使我删除了“element2”的第二个实例之一,我也会遇到同样的错误。元素的属性似乎是正确的,因为它允许无限次出现。

我想我误读了错误。

与以往一样,我们非常感谢任何帮助或指导。感谢期待

【问题讨论】:

    标签: xml xsd


    【解决方案1】:

    我怀疑你应该将elementFormDefault="qualified",而不是 elementFormDefault="unqualified" 放在类型架构中,因为它在主 xsd 中是合格的,并且在 xml 中是合格的。

    【讨论】:

    • 我从一个网站上盲目地复制了这部分,并没有意识到我复制了什么。非常感谢,这是一种享受:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 2015-04-26
    • 2014-07-05
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多