web-dev-qa-db-fra.com

erreur de validation xmllint "aucune DTD trouvée" lors de l'utilisation de XSD

J'essaie d'utiliser xmllint pour vérifier mon travail lors du développement d'un schéma de base XSD, à savoir XML Schema. Cependant cela me donne une erreur

La validation a échoué: aucune DTD trouvée.

Qu'est-ce que je fais mal?

Ma commande xmllint:

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

Tester le fichier XSD:

<?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 du fichier XML:

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

L'URL sur xsi: noNamespaceSchemaLocation renvoie le XSD ci-dessus. En outre, j'ai téléchargé le fichier xsd et l'ai placé dans le répertoire en cours à titre de mesure supplémentaire, mais cela ne semble avoir rien changé.

13
Tristan

--valid est destiné aux DTD, pas aux XSD.

Cela fonctionnera pour vous à la place:

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

La tentative de l'OP et sa réponse acceptée "valident" le XSD en le testant par rapport à un fichier exemple. Pour valider le fichier XSD par rapport à la spécification XSD, vous pouvez utiliser la commande suivante:

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

... et pour la v1.1, le schéma est https://www.w3.org/2009/XMLSchema/XMLSchema.xsd

REMARQUE: le schéma v1.0 a quelques qualifications au sommet concernant le schéma de structure normative, il est donc possible qu'un autre fichier soit réellement utilisé, mais cela a bien fonctionné pour moi.

0
claytond