无法将名称 X 解析为递归 xml 架构中的元素声明组件

Fel*_* D. 3 xml schema xsd

我刚刚开始使用 XML 模式。我正在创建一个简单的架构,但我不明白为什么在尝试实现一个简单的递归元素时会出错。我确定这完全是微不足道的。

在这里,我收到以下错误:E [Xerces] src-resolve:无法将名称“节点”解析为 (n)“元素声明”组件。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:element name="root">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="node">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element ref="node" />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

在这里,没有root元素,我没有收到错误...

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:element name="node">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="node" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

我完全被0_0迷住了。我怎样才能做到这一点?

hel*_*cha 5

如果你想引用一个元素,它必须被声明为顶级。您可以同时使用rootnode引用相同的元素:

<xs:element ref="node" />
Run Code Online (Sandbox Code Playgroud)

这就是为什么你的第二个例子有效。您可以使用此架构:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

    <xs:element name="node">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="node" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="root">
       <xs:complexType>
           <xs:sequence>
               <xs:element ref="node" />
           </xs:sequence>
       </xs:complexType>
   </xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)