web-dev-qa-db-de.com

xmllint-Validierungsfehler "keine DTD gefunden" bei Verwendung von XSD

Ich versuche, xmllint zu verwenden, um meine Arbeit zu überprüfen, während ich ein grundlegendes XSD-Schema, d. Es gibt jedoch einen Fehler

Validierung fehlgeschlagen: Es wurde 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

XSD-Datei testen:

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

XML-Datei testen:

<?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 bei xsi: noNamespaceSchemaLocation gibt die oben genannte XSD zurück. Außerdem habe ich die xsd-Datei heruntergeladen und als zusätzliche Maßnahme in das aktuelle Verzeichnis eingefügt. Dies scheint jedoch nichts geändert zu haben.

13
Tristan

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

Dies wird stattdessen für Sie funktionieren:

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

Der OP-Versuch und die akzeptierte Antwort "validieren" die XSD durch Testen gegen eine Beispieldatei. Um die XSD-Datei anhand der XSD-Spezifikation zu überprüfen, kann der folgende Befehl verwendet werden:

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

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

ANMERKUNG: Das v1.0-Schema hat oben einige Qualifikationen bezüglich des normativen Strukturschemas. Es ist daher möglich, dass eine andere Datei verwendet werden sollte. Dies funktionierte jedoch einwandfrei.

0
claytond