2017-11-14 2 views
0

Ich versuche eine XML-Datei zu validieren zwei xsd-Dateien, aber ich bekomme jedes Mal einen Fehler bei der Validierung. Ich benutze den "xml copy editor" um zu validieren. Ich weiß nicht, ob das ein Problem von meinem xml/xsd oder dem Programm ist (das kann vielleicht nicht validieren mehrere xsd !?). Kann jemand helfen?Versuchen Sie eine XML-Datei mit mehr als einer xsd-Datei zu validieren

Ich versuche, das Beispiel auf page zu folgen.

XML-Datei:

<?xml version="1.0" encoding="UTF-8"?> 
<PostAdress xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="D:\XML\XSD1.xsd"> 
    <Meta> 
     <Name>Hallo</Name> 
    </Meta> 
</PostAdress> 

XSD1.xsd:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" xmlns:xs2="http://aa.bb.cc"> 
    <xs:import namespace="http://aa.bb.cc" schemaLocation="D:\XML\XSD0.xsd" /> 
    <xs:element name="PostAdress"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Meta" type="xs2:Adress" minOccurs="0" maxOccurs="unbounded"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

XSD0.xsd:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://aa.bb.cc"> 
    <xs:element name="Adress"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Name" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

PS: Ich erhalte die Fehlermeldung: „Fehler in Zeile 7: Spalte 96: Typ 'http://aa.bb.cc:Adress' nicht gefunden. " Ich denke, das Programm bedeutet Zeile 7 in XSD1.xsd.

PS2: Ich versuche auch eine kleine VB.net-App zur Validierung laufen zu lassen. Ich bekomme fast die gleiche Fehlermeldung. Also, ich denke, es gibt ein Problem mit den Dateien.

Antwort

0

Ich denke, Sie sollten eine Datei uri beim Importieren der anderen xsd Schema verwenden. Probieren Sie die Zeile

<xs:import namespace="http://aa.bb.cc" schemaLocation="D:\XML\XSD0.xsd" /> 

mit diesem

<xs:import namespace="http://aa.bb.cc" schemaLocation="file:D:/XML/XSD0.xsd" /> 

in Ihrem XSD1.xsd Schema

+0

Ich habe Ihre Lösung versucht, aber mit dem gleichen Ergebnis - die gleiche Fehlermeldung. – Cit

+0

es scheint mir, dass yor_validator_ die XSD0.xsd-Datei nicht lädt, als letzten Ausweg versuchen, eine relative URL/Pfad im SchemaLocation-Attribut zu verwenden, d. H. SchemaLocation = './XSD0.xsd' – gtosto

+0

Das gleiche Ergebnis. Ich denke, wie du, ist es vielleicht ein Problem des Programms. Kennen Sie ein Freeware-Tool für Windows, das mehrere xsd-Dateien verarbeiten kann? – Cit

0

Ich versuchte es auch mit Notepad ++, mit dem gleichen Ergebnis zu ersetzen. Also, ich denke es ist vielleicht kein Problem von zwei xsd-Dateien. Also lege ich alle notwendigen Inhalte in einen xsd und .... gleichen Fehler. Danach schaue ich ein wenig näher auf meine xsd-Datei und ich habe den Fehler gefunden. Ich hatte diese Struktur:

Instance.xml >> XSD1.xsd >> XSD0.xsd Usage "Postadresse" >> Definition von "Postadresse" unter Verwendung von "Adresse" als Typ >> Definition von „Adress "

Die falsche Zeile laut Definition der" Adresse ". Ich schrieb ...

<xs:element name="Adress"> 
    <xs:complexType> 
     ... 
    </xs:complexType> 
    </xs:element> 

Aber richtig ist:

<xs:complexType name="Adress"> 
     <xs:sequence> 
     ... 
     </xs:sequence> 
    </xs:complexType> 

Also meine Dateien wie folgt aussehen:

XSD1.xsd:

<xs:element name="PostAdress"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="Meta" type="andererNs:Adress" minOccurs="0" maxOccurs="unbounded"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

Und XSD0.xsd:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://aa.bb.cc"> 

    <xs:complexType name="Adress"> 
     <xs:sequence> 
     <xs:element name="Name" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> 
     </xs:sequence> 
    </xs:complexType> 

</xs:schema> 

Am Ende ist es möglich, mit mehr als einer XSD-Datei mit dem Programm "xml copy editor" (oder Notepad ++) zu validieren.Außerdem sind relative Dateinamen ausreichend, wenn sich die Dateien im selben Ordner befinden.

Danke an die Helfer.

Verwandte Themen