元素必须指现有的简单或复杂类型

时间:2016-10-21 08:09:14

标签: xml xsd

我正在尝试使xsd有效。我有这个“简单”的文件

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">

<xs:element name="Pairs">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="t1" type="xs:string"/>
            <xs:element name="t2" type="xs:string" />
        </xs:sequence>
    </xs:complexType>
</xs:element>

<xs:element name="Configuration">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="pairs" type="Pairs" minOccurs="1" maxOccurs="unbounded"/>
            <xs:element name="elems" type="xs:string" minOccurs="1" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

我收到了这个错误:

'Pairs' must refer to an existing simple or complex type.

我已经阅读了这篇文章:Error: Must refer to an existing simple or complex type和其他人,但我仍然不明白为什么我会遇到这个错误。

非常感谢,

S上。

1 个答案:

答案 0 :(得分:0)

我想我在xsd中发现了问题。 我不能用

<xs:element name="pairs" type="Pairs" minOccurs="1" maxOccurs="unbounded"/>

因为 Pairs 不是类型,但它是元素。 然后,我可以将引用用于元素

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">

<xs:element name="Pairs">
<xs:complexType>
        <xs:sequence>
            <xs:element name="t1" type="xs:string"/>
            <xs:element name="t2" type="xs:string" />
        </xs:sequence>
        </xs:complexType>
</xs:element>


<xs:element name="Configuration">
    <xs:complexType>
            <xs:sequence>
                <xs:element ref="Pairs" minOccurs="1" maxOccurs="unbounded"/>
                <xs:element name="elems" type="xs:string" minOccurs="1" maxOccurs="unbounded"/>
            </xs:sequence>
    </xs:complexType>
</xs:element>

或将 Pairs 声明为 complexType

<xs:complexType name="Pairs">
        <xs:sequence>
            <xs:element name="t1" type="xs:string"/>
            <xs:element name="t2" type="xs:string" />
        </xs:sequence>
</xs:complexType>


<xs:element name="Configuration">
    <xs:complexType>
            <xs:sequence>
                <xs:element name="pairs" type="Pairs" minOccurs="1" maxOccurs="unbounded"/>
                <xs:element name="elems" type="xs:string" minOccurs="1" maxOccurs="unbounded"/>
            </xs:sequence>
    </xs:complexType>
</xs:element>

最后一个xsd为我解决了这个问题。

我希望这个答案有用。

S上。