asked on
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="test">
<xs:complexType>
<xs:sequence>
<xs:element ref="shell_styles" />
<xs:element ref="brands" />
</xs:sequence>
</xs:complexType>
<!-- Primary Key -->
<xs:key name="shell_id">
<xs:selector xpath="./shell_styles/shell"></xs:selector>
<xs:field xpath="@code"></xs:field>
</xs:key>
<!-- Foreign Keys -->
<!-- Brand: shell_style code -->
<xs:keyref name="shell_style_id" refer="shell_id" >
<xs:selector xpath="./brands/brand/shell_style"></xs:selector>
<xs:field xpath="@code"></xs:field>
</xs:keyref>
</xs:element>
<xs:element name="shell_styles">
<xs:complexType>
<xs:sequence>
<!-- Shell name and code -->
<xs:element name="shell" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="code" use="required">
<xs:simpleType><xs:restriction base="xs:string"><xs:pattern value="[A-Z]{2}[0-9]{2}"/></xs:restriction></xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<!-- Primary key -->
</xs:element>
<!-- Brands: by brand, a list of valid shell styles, and for each shell style, a list of valid colour codes -->
<xs:element name="brands">
<xs:complexType>
<xs:sequence>
<!-- Brand matrix -->
<xs:element name="brand" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<!-- Shell style collection -->
<xs:element name="shell_style" maxOccurs="unbounded">
<xs:complexType>
<!-- Colour code -->
<xs:sequence><xs:element name="colour_code" maxOccurs="unbounded" type="xs:string" /></xs:sequence>
<xs:attribute name="code" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
<!-- Brand name -->
<xs:attribute name="name" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>