XML validation error when using multiple schema files/namespaces
I've been reading a ton about xml and learning a lot but I am stuck on one error.
I have a schema defined in multiple files and I can't get it to work. Here is an example
==================================
libraryBooks.xsd
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="urn:MyNamespace"
targetNamespace="urn:MyNamespace"
elementFormDefault="qualified"
>
<xsd:element name="libraryBooks" type="libraryBooksType"/>
<xsd:complexType name="libraryBooksType">
<xsd:sequence>
<xsd:any minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:schema>
==================================
book.xsd
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="urn:MyNamespace2"
targetNamespace="urn:MyNamespace2"
elementFormDefault="qualified"
>
<xsd:element name="book" type="booksType"/>
<xsd:complexType name="bookType">
<xsd:attribute name="title" type="xsd:string"/>
</xsd:complexType>
</x开发者_运维百科sd:schema>
==================================
myXml.xml
<?xml version="1.0" encoding="utf-8" ?>
<libraryBooks
xmlns="urn:MyNamespace"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:MyNamespace file:///C:/libraryBooks.xsd"
name="CentralLibrary">
<mn2:book
xmlns:mn2="file:///C:/book.xsd"
title="How to make xml work the way I want">
</mn2:book>
</libraryBooks>
So the error I get would be "The 'file:///C:/book.xsd:book' element is not found". Any ideas? I'm almost certain it is something simple
Edit: Thank you so much everyone. I was close but just stuck on one minor thing. Really appreciate the direction. I tried both methods and in case anyone else reading this is wondering, the way to enter multiple schemaLocations at the root node is
xsi:schemaLocation="urn:MyNamespace file:///C:/libraryBooks.xsd
urn:MyNamespace2 file:///C:/book.xsd"
You got it right for the first namespace, but for the second one, you somehow got the namespace URI and the schema location mixed up. Try this:
<mn2:book
xmlns:mn2="urn:MyNamespace2"
xsi:schemaLocation="urn:MyNamespace2 file:///C:/book.xsd"
title="How to make xml work the way I want">
</mn2:book>
... you can additionally move the xmlns:mn2
and the xsi:schemaLocation
up to the top level (similarly to what Grzenio suggested), if you want.
精彩评论