2016-03-30 18 views
6

Ich versuche, xmllint zu verwenden, um meine Arbeit während der Entwicklung eines grundlegenden XSD, d. H. XML Schema Schema zu überprüfen. Aber es gibt mir einen Fehlerxmllint Validierungsfehler "keine DTD gefunden" bei der Verwendung von XSD

Validierung fehlgeschlagen: keine DTD gefunden.

Was mache ich falsch?

Mein xmllint Befehl:

xmllint --noout --valid --schema simple.xsd lucas-basic.xml 
lucas-basic.xml:5: validity error : Validation failed: no DTD found ! 
     > 
     ^
lucas-basic.xml validates 

Test-XSD-Datei:

<?xml version = "1.0" encoding = "UTF-8"?> 
<!--Generated by XML Authority. Conforms to w3c http://www.w3.org/2001/XMLSchema--> 
<xsd:schema xmlns:xsd = "http://www.w3.org/2001/XMLSchema"> 
     <xsd:element name = "vehicles"> 
       <xsd:complexType> 
         <xsd:sequence> 
           <xsd:element name = "nickname" type = "xsd:string" maxOccurs = "unbounded"/> 
         </xsd:sequence> 
       </xsd:complexType> 
     </xsd:element> 

Test-XML-Datei:

<?xml version="1.0"?> 
<vehicles 
       xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
       xsi:noNamespaceSchemaLocation = "http://lucas.ucs.ed.ac.uk/xml-schema/xmlns/simple.xsd" 
     > 
     <nickname>Bog Hopper</nickname> 
     <nickname>Wee Beastie</nickname> 
     <nickname>Count Zero</nickname> 
</vehicles> 

Die URL an xsi: noNamespaceSchemaLocation funktioniert die oben XSD zurück. Außerdem habe ich die xsd-Datei heruntergeladen und als zusätzliche Maßnahme in das aktuelle Verzeichnis gestellt, aber das hat anscheinend nichts geändert.

+0

Nun, da ich es funktioniert habe, sollte ich kommentieren, dass die Verwendung einer lokalen Datei oder die Angabe eines entfernten Schemas genauso gut funktioniert, z. --schema simple.xsd ODER --schema http://lucas.ucs.ed.ac.uk/xml-schema/xmlns/simple.xsd – Tristan

Antwort

10

--valid ist für DTDs, nicht XSDs.

Dies wird für Sie arbeiten stattdessen:

xmllint --noout --schema http://lucas.ucs.ed.ac.uk/xml-schema/xmlns/simple.xsd lucas-basic.xml 
+0

Das scheint zu funktionieren, danke! Bedeutet dies, dass ein Dokument, das mit einer XSD anstelle einer DTD geschrieben wurde, technisch nicht gültiges XML ist? – Tristan

+3

Haha, nein, es bedeutet, dass ihre Wahl der Befehlszeilenschalter-Namen unvollständig war. – kjhughes

-1

Der OP Versuch und akzeptierte Antwort „validieren“, um die XSD, indem sie gegen eine Beispieldatei zu testen. Um die XSD-Datei gegen die XSD-Spezifikation zu validieren, der folgende Befehl verwendet werden können:

xmllint --noout --schema http://www.w3.org/2001/XMLSchema.xsd my_schema.xsd 

... und für v1.1 das Schema https://www.w3.org/2009/XMLSchema/XMLSchema.xsd

HINWEIS: das v1.0 Schema hat einige Qualifikationen an der Spitze über das normative Strukturschema, so ist es möglich, dass eine andere Datei tatsächlich verwendet werden sollte, aber das hat für mich gut funktioniert.