2010-03-19 7 views
1

J'ai lu une tonne à propos de xml et j'ai beaucoup appris, mais je suis bloqué sur une erreur.Erreur de validation XML lors de l'utilisation de plusieurs fichiers de schéma/espaces de noms

J'ai un schéma défini dans plusieurs fichiers et je n'arrive pas à le faire fonctionner. Voici un exemple

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

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> 

Donc l'erreur que je reçois serait "Le 'file: /// C: /book.xsd: livre' élément est introuvable". Des idées? Je suis presque certain que c'est quelque chose de simple

Modifier: Merci beaucoup à tous. J'étais proche mais juste coincé sur une chose mineure. Vraiment apprécier la direction. J'ai essayé les deux méthodes et au cas où quelqu'un d'autre lecture de ce se demande, la façon d'entrer dans plusieurs schemaLocations au niveau du nœud racine est

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

Dans quelle langue essayez-vous d'analyser le code XML? – Rachel

+1

J'essayerais de déplacer xmlns: mn2 = "file: /// C: /book.xsd" au plus haut niveau – Grzenio

Répondre

2

Vous l'avez droit pour le premier espace de noms, mais pour le second, vous en quelque sorte obtenu l'URI de l'espace de noms et l'emplacement du schéma sont mélangés. Essayez ceci:

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

... vous pouvez vous déplacer en plus la xmlns:mn2 et la xsi:schemaLocation jusqu'au niveau supérieur (de façon similaire à ce que Grzenio suggéré), si vous voulez.

Questions connexes