XML/XML Schema/Russian Doll
Russian Doll Design with attributes
<source lang="xml">
File: Data.xml
<?xml version="1.0"?> <Books xmlns="http://www.wbex.ru"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.wbex.ru Schema.xsd"> <Book Category = "autobiography" InStock = "true" Reviewer = "R1"> <Title>title 1</Title> <Author>author 1</Author> <Date>2008</Date> <ISBN>1-11111-111-1</ISBN> <Publisher>Publisher 1</Publisher> </Book> <Book Category = "fiction" InStock = "false" Reviewer = "R2"> <Title>title 2</Title> <Author>author 2</Author> <Date>2007</Date> <ISBN>0-111-11111-1</ISBN> <Publisher>Publisher 2</Publisher> </Book> <Book Category = "non-fiction" Reviewer = "R3"> <Title>title 3</Title> <Author>author 3</Author> <Date>2004</Date> <ISBN>0-11-111111-1</ISBN> <Publisher>Publisher 3</Publisher> </Book>
</Books>
File: Schema.xsd <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.wbex.ru" xmlns="http://www.wbex.ru" elementFormDefault="qualified"> <xsd:element name="Books"> <xsd:complexType> <xsd:sequence> <xsd:element name="Book" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name="Title" type="xsd:string"/> <xsd:element name="Author" type="xsd:string" maxOccurs="unbounded"/> <xsd:element name="Date" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="Publisher" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="Category" use="required"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="autobiography"/> <xsd:enumeration value="non-fiction"/> <xsd:enumeration value="fiction"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> <xsd:attribute name="InStock" type="xsd:boolean" default="false"/> <xsd:attribute name="Reviewer" type="xsd:string" default="none"/> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element>
</xsd:schema>
</source>
Russian Doll style
<source lang="xml">
File: Data.xml <?xml version="1.0"?> <Books xmlns="http://www.wbex.ru"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.wbex.ru Schema.xsd"> <Book> <Title>title 1</Title> <Author>author 1</Author> <Date>2008</Date> <ISBN>1-11111-111-1</ISBN> <Publisher>Publisher 1</Publisher> </Book> <Book> <Title>title 2</Title> <Author>author 2</Author> <Date>2007</Date> <ISBN>0-111-11111-1</ISBN> <Publisher>Publisher 2</Publisher> </Book>
</Books> File: Schema.xsd <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.wbex.ru" xmlns="http://www.wbex.ru" elementFormDefault="qualified"> <xsd:element name="Books"> <xsd:complexType> <xsd:sequence> <xsd:element name="Book" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name="Title" type="xsd:string"/> <xsd:element name="Author" type="xsd:string"/> <xsd:element name="Date" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="Publisher" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element>
</xsd:schema>
</source>
With the Russian Doll Design, the schema mirrors the structure of the instance document
<source lang="xml">
File: Data.xml <?xml version = "1.0" ?> <Customer xmlns = "http://www.wbex.ru/Customers"
customerID = "2442" clubCardMember = "true" > <FirstName>first</FirstName> <MiddleInitial>middle</MiddleInitial> <LastName>last</LastName>
</Customer> File: Schema.xsd <?xml version = "1.0" ?> <schema xmlns = "http://www.w3.org/2001/XMLSchema"
targetNamespace = "http://www.wbex.ru/Customers" xmlns:cust = "http://www.wbex.ru/Customers" elementFormDefault = "qualified" attributeFormDefault = "unqualified"> <element name = "Customer"> <complexType> <sequence> <element name = "FirstName" type = "string" /> <element name = "MiddleInitial" type = "string" minOccurs = "0" maxOccurs = "1" /> <element name = "LastName" type = "string" /> </sequence> <attribute name = "customerID" use = "required" type = "integer" /> <attribute name = "clubCardMember" type = "boolean" /> </complexType> </element>
</schema>
</source>