如何使用 xmllint 通过 XSD 验证 XML 文档?

问题描述 投票:0回答:2

我正在尝试使用 xmllint 来检查我的工作,同时开发基本的 XSD,即 XML 架构定义。然而它给了我一个错误:

验证失败:未找到 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"?>
<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>
</xsd:schema>

测试 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 文件并将其放入当前目录作为额外措施,但这似乎没有改变任何东西。

xml xsd libxml2 xsd-validation xmllint
2个回答
32
投票

--valid
适用于 DTD,而不是 XSD。

这对你有用:

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

3
投票

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 模式在顶部有一些关于规范结构模式的限定,因此实际上可能应该使用另一个文件,但这对我来说效果很好。

© www.soinside.com 2019 - 2024. All rights reserved.