就我而言,我有两个非常简单的XSD。第一个是Person.xsd
,其元素如:名称,年龄和第二个(Reader.xsd
)应该从Person.xsd
继承。我将XMLSpy用作验证器,它会引发错误。我是XSD文件的初学者,因此我认为为我的案例找到解决方案并不难。
Person.xsd:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified"
xmlns:p="http://www.demo.com"
targetNamespace="http://www.demo.com"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="PersonType">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="age" type="xs:int"/>
</xs:sequence>
<xs:attribute name="id" type="xs:int"/>
</xs:complexType>
<xs:element name="person" type="p:PersonType"/>
</xs:schema>
Reader.xsd:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:r="http://www.demo.com"
targetNamespace="http://www.demo.com"
elementFormDefault="qualified">
<xs:include schemaLocation="person.xsd"/>
<!--<xs:element name="person" type="p:PersonType"/>-->
<xs:complexType name="ReaderType">
<xs:complexContent>
<xs:extension base="PersonType"> // THERE IS A RED MARKER ('must
refer to an existing simple or complex type')
<xs:sequence>
<xs:element name="bookId" type="xs:int" minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="xs:int" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="reader" type="r:ReaderType"/>
<xs:complexType name="ReadersType">
<xs:sequence>
<xs:element ref="r:reader" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:element name="readers" type="r:ReadersType"/>
</xs:schema>
答案 0 :(得分:1)
复杂类型的名称位于包含的架构文档的targetNamespace中,因此复杂类型的名称为{http://www.demo.com}PersonType
。由于前缀r
已绑定到该命名空间,因此可以使用QName base="r:PersonType"
来引用类型。
答案 1 :(得分:1)
我知道了。 reader.xsd
应该是:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:r="http://www.demo.com/reader" xmlns:p="http://www.demo.com/person"
targetNamespace="http://www.demo.com/reader" elementFormDefault="qualified">
<xs:import namespace="http://www.demo.com/person" schemaLocation="person.xsd"/>
<xs:complexType name="ReaderType">
<xs:complexContent>
<xs:extension base="p:PersonType">
<xs:sequence>
<xs:element name="bookId" type="xs:int" minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="reader" type="r:ReaderType"/>
<xs:complexType name="ReadersType">
<xs:sequence>
<xs:element ref="r:reader" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:element name="readers" type="r:ReadersType"/>
</xs:schema>