Джон Сондерс прав, нет предопределенного способа сделать это. Но, если вам это действительно нужно, вы можете определить схему для документов, которые содержат схему и экземпляр в одном файле. Аналогичный подход используется в языке описания веб-сервисов . Вот сжатая идея:
schema.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="instance">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="types" type="Types"/>
<xsd:element name="document" type="Document"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="Types">
<xsd:sequence>
<xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Document">
<xsd:sequence>
<xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
instance.xml
<?xml version="1.0" encoding="UTF-8"?>
<instance xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:noNamespaceSchemaLocation='schema.xsd'>
<types>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetnamespace="library">
<element name="book">
<complexType>
<sequence>
<element name="title" type="string"/>
<element name="author" type="string"/>
</sequence>
</complexType>
</element>
</schema>
</types>
<document>
<book xmlns="library">
<title>Memoirs</title>
<author>John Smith</author>
</book>
</document>
</instance>
Позже вы будете читать схему из <types>
и использовать ее для проверки содержимого <document>
.