Chi scrive scjemi XML si sarà posto il problema, probabilmente, di riusare i tipi creati in schemi esterni. Immaginiamo, a titolo di esempio, di aver creato uno schema XML come il seguente:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="urn:peway:person" xmlns="urn:peway:person" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="Person" type="PersonType"/>
<xs:complexType name="PersonType">
<xs:sequence>
<xs:element name="FirstName" type="xs:string"/>
<xs:element name="LastName" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
Vogliamo usare il tipo PersonType senza riscriverlo (copy&paste) nel nuovo schema. Basterà importarlo:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="urn:peway:profile" xmlns="urn:peway:profile" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" xmlns:person="urn:peway:person">
<xs:import namespace="urn:peway:person" schemaLocation="Person.xsd"/>
<xs:element name="Profile">
<xs:complexType>
<xs:sequence>
<xs:element name="Person" type="person:PersonType"/>
<xs:element name="Person" type="person:PersonType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Ovviamente, se dobbiamo leggere lo schema molte volte (in un processo di valiazione), potrebbe comunque essere utile avere il tipo incluso nel nuovo schema, oppure affidarci a meccanismi di caching.