2010-03-19 2 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

+1

Я бы попытался переместить xmlns: mn2 = "file: /// C: /book.xsd" на верхний уровень – Grzenio

ответ

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:mn2 и xsi:schemaLocation до верхнего уровня (аналогично тому, что предложил Grzenio), если вы хотите.

Смежные вопросы