2010-03-19 39 views
1

我一直在阅读关于xml的很多知识并学习了很多,但我陷入了一个错误。使用多个模式文件/名称空间时的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> 

所以错误我得到的将是 “ '文件:/// C:/book.xsd:书' 元素没有找到”。 任何想法?我几乎可以肯定这是简单的东西

编辑:非常感谢你。我很接近,但只是停留在一件小事上。真的很欣赏方向。我想这两种方法,并在情况下,任何人读这很纳闷,在根节点输入多个schemaLocations的方式是

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

用什么语言解析XML – Rachel 2010-03-20 01:47:37

+1

我会尝试将xmlns:mn2 =“file:/// C:/book.xsd”移动到顶层 – Grzenio 2010-03-20 10:26:26

回答

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建议),如果你想。

相关问题