我是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有点困惑。当我使用notpad ++验证以下两个XML时,以下两个XML都没有给出错误,因为我期望带有员工根元素的XML应该正确的。
<?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>
需要帮助......
答案 0 :(得分:0)
两个Xml实例都是正确的,如在Xml Schema中,任何全局定义的<element>
都可以作为根元素。这也在answers to this other question中进行了讨论。
由于您已在模式的根级别上使用employees
元素定义了employee
和<xsd:element>
(即直接嵌套在<xsd:schema>
元素中),这些可以用作架构的Xml实例文档的根目录。
要防止employee
符合作为根元素的条件,您可以完全内联employee
元素的定义,而不是使用<xs:element ref="employee" maxOccurs="2"/>
,或者您可以命名 employee
元素的内容并在架构根级别定义complexType
,因此您将获得一个可重复使用的复杂类型,然后您可以将其指示为{{1}的类型} element。