xmllint验证错误"未找到DTD"使用XSD时

时间:2016-03-30 18:55:36

标签: xml xsd libxml2 xsd-validation xmllint

我正在尝试使用xmllint检查我的工作,同时开发基本的XSD,即XML Schema架构。但是它给了我一个错误

  

验证失败:未找到DTD。

我做错了什么?

我的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

测试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>

测试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>

xsi:noNamespaceSchemaLocation上的URL确实返回上面的XSD。此外,我下载了xsd文件并将其作为额外措施放入当前目录,但这似乎没有改变任何内容。

2 个答案:

答案 0 :(得分:17)

--valid适用于DTD,而非XSD。

这对你有用:

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

答案 1 :(得分:0)

OP尝试并接受回答“验证”XSD,方法是对样本文件进行测试。要根据XSD规范验证XSD文件,可以使用以下命令:

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

...对于v1.1,架构为https://www.w3.org/2009/XMLSchema/XMLSchema.xsd

注意:v1.0架构在规范结构架构的顶部有一些资格,所以可能实际上应该使用另一个文件,但这对我来说很好。