我正在尝试学习如何在xml架构中使用扩展。我采用了这个例子(例子2:http://www.w3schools.com/schema/el_extension.asp)
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="employee" type="fullpersoninfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="fullpersoninfo">
<xs:complexContent>
<xs:extension base="personinfo">
<xs:sequence>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
并制作了一个演示xml数据文件:
<?xml version="1.0"?>
<personinfo>
<firstname>John</firstname>
<lastname>Doe</lastname>
</personinfo>
但是当我尝试验证它时,我得到了:
xmllint --schema myschema.xsd data.xml
<?xml version="1.0"?>
<personinfo>
<firstname>John</firstname>
<lastname>Doe</lastname>
</personinfo>
data.xml:3: element personinfo: Schemas validity error : Element 'personinfo': No matching global declaration available for the validation root.
data.xml fails to validate
任何人都可以解释我做错了吗?
答案 0 :(得分:1)
您的XML文件有一个名为personinfo
的根元素,但您的架构不包含具有该名称的元素的声明。它包含一个名为personinfo
的类型的声明,但唯一的元素声明适用于employee
(类型为fullpersoninfo
)。< / p>
针对当前架构验证的示例XML文件类似于
<?xml version="1.0"?>
<employee>
<firstname>John</firstname>
<lastname>Doe</lastname>
<address>5 Somewhere Street</address>
<city>Anytown</city>
<country>Australia</country>
</employee>