使用 XSD 时出现 xmllint 验证错误 "no DTD found"
xmllint validation error "no DTD found" while using XSD
我在开发基本 XSD 即 XML Schema 模式时尝试使用 xmllint 检查我的工作。但是它给我一个错误
Validation failed: no DTD found.
我做错了什么?
我的 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>
</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 执行 return 上述 XSD。另外,我下载了 xsd 文件并将其作为额外措施放入当前目录,但这似乎并没有改变任何东西。
--valid
适用于 DTD,而非 XSD。
这对你有用:
xmllint --noout --schema http://lucas.ucs.ed.ac.uk/xml-schema/xmlns/simple.xsd lucas-basic.xml
OP 通过针对示例文件进行测试来尝试并接受 "validate" 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 模式在规范结构模式的顶部有一些限定条件,因此实际上可能应该使用另一个文件,但这对我来说效果很好。
我在开发基本 XSD 即 XML Schema 模式时尝试使用 xmllint 检查我的工作。但是它给我一个错误
Validation failed: no DTD found.
我做错了什么?
我的 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>
</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 执行 return 上述 XSD。另外,我下载了 xsd 文件并将其作为额外措施放入当前目录,但这似乎并没有改变任何东西。
--valid
适用于 DTD,而非 XSD。
这对你有用:
xmllint --noout --schema http://lucas.ucs.ed.ac.uk/xml-schema/xmlns/simple.xsd lucas-basic.xml
OP 通过针对示例文件进行测试来尝试并接受 "validate" 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 模式在规范结构模式的顶部有一些限定条件,因此实际上可能应该使用另一个文件,但这对我来说效果很好。