使用多个模式文件/命名空间时的XML验证错误

时间:2010-03-19 21:28:04

标签: xml xsd

我一直在读大量关于xml并且学到很多东西,但我遇到了一个错误。

我有一个在多个文件中定义的架构,我无法让它工作。这是一个例子

==================================

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>
</xsd: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>

所以我得到的错误是“找不到'file:/// C:/book.xsd:book'元素”。 有任何想法吗?我几乎可以肯定这很简单

编辑:非常感谢大家。我很接近但只是坚持一件小事。真的很欣赏方向。我尝试了两种方法,如果其他人读到这个想知道,在根节点输入多个schemaLocations的方法是

xsi:schemaLocation="urn:MyNamespace file:///C:/libraryBooks.xsd
                    urn:MyNamespace2 file:///C:/book.xsd"

1 个答案:

答案 0 :(得分:2)

你对第一个命名空间是正确的,但对于第二个命名空间,你以某种方式得到了命名空间URI和架构位置混淆了。试试这个:

 <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>

...如果您愿意,还可以将xmlns:mn2xsi:schemaLocation升级到最高级别(与Grzenio建议的类似)。