关于 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>
元素定义了 employees
和 employee
(即直接嵌套在 <xsd:schema>
元素中),这些中的任何一个都可以用作架构的 Xml 实例文档的根。
为了防止 employee
有资格作为根元素,您可以完全内联 employee
元素的定义而不是使用 <xs:element ref="employee" maxOccurs="2"/>
,或者您可以命名 content employee
元素并在模式根级别定义 complexType
employee
元素。
我是 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>
元素定义了 employees
和 employee
(即直接嵌套在 <xsd:schema>
元素中),这些中的任何一个都可以用作架构的 Xml 实例文档的根。
为了防止 employee
有资格作为根元素,您可以完全内联 employee
元素的定义而不是使用 <xs:element ref="employee" maxOccurs="2"/>
,或者您可以命名 content employee
元素并在模式根级别定义 complexType
employee
元素。