关于 XML 架构,无法找到 XML 文档的正确行为

Regarding XML schema, Unable to find correct behaviour of XML document

我是 XML 模式的新手,我正在尝试了解它们的工作原理。我写了一个简单的 schema.Below 是我的 xml 架构。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 
    <xs:element name="employees" type="comType"/>
    <xs:complexType name="comType">
        <xs:sequence>
            <xs:element ref="employee" maxOccurs="2"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="employee">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="name" type="xs:string"/>
                <xs:element name="address" type="xs:string"/>
            </xs:sequence>
            <xs:attribute name="id" type="xs:integer" use="required"/>
        </xs:complexType>
    </xs:element>
</xs:schema>

但是我有点困惑 XML 对此有效 schema.When 我正在使用 notpad++ 验证以下两个 XML 下面两个 XML 都是没有给出错误,因为我期望 XML with root element of employees 应该是正确的。

<?xml version="1.0" encoding="UTF-8"?>
<employees>
    <employee id="1">
        <name>xxxx</name>
        <address>xxx</address>
    </employee>
    <employee id="2">
        <name>yyyyy</name>
    <address>yyy</address>
    </employee>
</employees>    

第二个XML是

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

<employee id="1">
    <name>Deepak</name>
    <address>909</address>
</employee>

并且架构是

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 
<xs:element name="employees" type="comType"/>   
<xs:complexType name="comType">
<xs:sequence>
<xs:element ref="employee" maxOccurs="2"/>
</xs:sequence>
</xs:complexType>

<xs:element name="employee">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
</xs:sequence>
<xs:attribute name="id" type="xs:integer" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>

需要帮助...

两个Xml实例都是正确的,因为在Xml架构中,任何全局定义的<element>都可以作为根元素。 answers to this other question.

中也对此进行了讨论

因为您在架构的根级别上使用 <xsd:element> 元素定义了 employeesemployee(即直接嵌套在 <xsd:schema> 元素中),这些中的任何一个都可以用作架构的 Xml 实例文档的根。

为了防止 employee 有资格作为根元素,您可以完全内联 employee 元素的定义而不是使用 <xs:element ref="employee" maxOccurs="2"/>,或者您可以命名 content employee 元素并在模式根级别定义 complexType employee 元素。