I'm trying to use xmllint to check my work while developing a basic XSD i.e. XML Schema schema. However it's giving me an error
Validation failed: no DTD found.
What am I doing wrong?
My xmllint command:
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 file:
<?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 file:
<?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>
The URL at xsi:noNamespaceSchemaLocation does return the above XSD. Also, I downloaded the xsd file and put it into the current directory as an extra measure, but this didn't seem to have changed anything.
--valid
is for DTDs, not XSDs.
This will work for you instead:
xmllint --noout --schema http://lucas.ucs.ed.ac.uk/xml-schema/xmlns/simple.xsd lucas-basic.xml
The OP attempt and accepted answer "validate" the XSD by testing it against a sample file. To validate the XSD file against the XSD specification, the following command may be used:
xmllint --noout --schema http://www.w3.org/2001/XMLSchema.xsd my_schema.xsd
... and for v1.1 the schema is https://www.w3.org/2009/XMLSchema/XMLSchema.xsd
NOTE: the v1.0 schema has some qualifications at the top about the normative structure schema so it's possible another file should actually be used but this worked fine for me.
来源:https://stackoverflow.com/questions/36317381/xmllint-validation-error-no-dtd-found-while-using-xsd