complexType with restriction
File: Data.xml <?xml version="1.0"?> <Books xmlns="http://www.java2s.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= "http://www.java2s.com Schema.xsd"> <Publication xsi:type="MagazineType"> <Title>title 1</Title> <Date>2008</Date> </Publication> <Publication xsi:type="BookType"> <Title>title 1</Title> <Author>author 1</Author> <Date>2008</Date> <ISBN>1-11111-111-1</ISBN> <Publisher>publisher 1</Publisher> </Publication> <Publication xsi:type="BookType"> <Title>title 3</Title> <Author>author 3</Author> <Date>2008</Date> <ISBN>3-33-33333-3</ISBN> <Publisher>publisher 3</Publisher> </Publication> </Books> File: Schema.xsd <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.java2s.com" xmlns="http://www.java2s.com" elementFormDefault="qualified"> <xsd:complexType name="PublicationType" abstract="true"> <xsd:sequence> <xsd:element name="Title" type="xsd:string"/> <xsd:element name="Author" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/> <xsd:element name="Date" type="xsd:gYear"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="BookType"> <xsd:complexContent> <xsd:extension base="PublicationType" > <xsd:sequence> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="Publisher" type="xsd:string"/> </xsd:sequence> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:complexType name="MagazineType"> <xsd:complexContent> <xsd:restriction base="PublicationType"> <xsd:sequence> <xsd:element name="Title" type="xsd:string"/> <xsd:element name="Author" type="xsd:string" minOccurs="0" maxOccurs="0"/> <xsd:element name="Date" type="xsd:gYear"/> </xsd:sequence> </xsd:restriction> </xsd:complexContent> </xsd:complexType> <xsd:element name="Publication" type="PublicationType"/> <xsd:element name="Books"> <xsd:complexType> <xsd:sequence> <xsd:element ref="Publication" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>