Ошибка проверки XML при использовании нескольких файлов схемы / пространств имен - PullRequest
1 голос
/ 20 марта 2010

Я много читал о 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' не найден». Есть идеи? Я почти уверен, что это что-то простое

Редактировать : Большое спасибо всем. Я был близок, но застрял на одной незначительной вещи. Действительно ценю направление. Я попробовал оба метода, и в случае, если кому-то еще это интересно, способ ввести несколько схемных расположений в корневом узле -

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

1 Ответ

2 голосов
/ 21 марта 2010

Вы правильно поняли для первого пространства имен, но для второго вы каким-то образом перепутали 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 на верхний уровень (аналогично тому, что предложил Грзенио), если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...