Xml XSD自引用问题

Xml XSD自引用问题,xml,xsd,odata,Xml,Xsd,Odata,我们正在从ODataXML创建自己的模式,使其更简单、更通用,以便我们的合作伙伴能够使用。然而,我偶然发现了这个问题,它调用自己的类型(自引用),我无法找到解决这个问题的方法 这是片段,有什么想法吗 <xsd:element name="User" type="userType"/> <xsd:complexType name="userType"> <xsd:all> <xsd:element name="customManag

我们正在从ODataXML创建自己的模式,使其更简单、更通用,以便我们的合作伙伴能够使用。然而,我偶然发现了这个问题,它调用自己的类型(自引用),我无法找到解决这个问题的方法

这是片段,有什么想法吗

<xsd:element name="User" type="userType"/>
<xsd:complexType name="userType">
    <xsd:all>
        <xsd:element name="customManagerList">
            <xsd:annotation>
                <xsd:documentation>Custom Manager</xsd:documentation>
            </xsd:annotation>
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element name="customManager" type="userType" maxOccurs="unbounded"/>
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
    </xsd:all>
</xsd:complexType>
</xsd:schema>

客户经理

到目前为止,我认为没有任何问题。只需将您的代码片段包含在
标记中,例如:

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

...

并通过了验证。它起作用了。允许complexType引用自身。

根据XSD规范,架构确实有效;然而,出于所有实际原因,它是无效的,因为无法根据它创建有效的XML实例。要使其工作,需要将minOccurs=“0”添加到customManager元素粒子。我看到的一些验证器正确地捕捉到了这一不可能,并将其报告为错误。只需在customManager元素粒子中添加一个minOccurs=“0”,就可以了。