代码之家  ›  专栏  ›  技术社区  ›  i8abug

使用多个架构文件/命名空间时发生XML验证错误

  •  1
  • i8abug  · 技术社区  · 16 年前

    我在多个文件中定义了一个模式,但无法使其工作。下面是一个例子

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

    图书馆图书.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>
    

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

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

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

    所以我得到的错误是“the”file:///C:/book.xsd:book'未找到元素'。

    :非常感谢大家。我离得很近,但只停留在一件小事上。真的很欣赏这个方向。我尝试了这两种方法,如果其他阅读本文的人想知道,在根节点输入多个schemaLocations的方法是

    xsi:schemaLocation="urn:MyNamespace file:///C:/libraryBooks.xsd
                        urn:MyNamespace2 file:///C:/book.xsd"
    
    1 回复  |  直到 16 年前
        1
  •  2
  •   Chris Lercher    16 年前

    对于第一个名称空间,您是正确的,但是对于第二个名称空间,您不知何故混淆了名称空间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:mn2 以及 xsi:schemaLocation