如何使用xmllint验证内部指定的xsd?

我知道您可以使用xmllint命令来验证local xsd files或xsd网络文件位置,但我想要做的是指示xmllint根据其“内部指定的”xsd验证XML文件,例如此XML指定XSD位置:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ord-archive:XXX xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                    xsi:schemaLocation="http://somewhere/something.xsd">
 ...

有没有办法使用xmllint并指定“验证”其内部指定的schemaLocation?

最佳答案
xsi:schemaLocation应该包含一个URI列表,这两个URI按语义分组.出现在奇数位置的每个URI指定一个名称空间,出现在下一个偶数位置的URI指定用于此名称空间的模式的位置提示.位置提示可以是本地的或远程的.

这是一个有三个名称空间的示例:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ord-archive:XXX
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

    xmlns:ord-archive="http://www.example.com/namespace" 
    xmlns:prefix="http://www.example.com/another-namespace" 
    xmlns:other-prefix="http://www.example.com/and-another-namespace" 

    xsi:schemaLocation="
      http://www.example.com/namespace
      http://somewhere.example.com/something.xsd
      http://www.example.com/another-namespace
      some-relative-path-to-a-directory/some-local-file.xsd
      http://www.example.com/and-another-namespace
      file:///some-absolute-path-to-a-directory/some-local-file.xsd">

   <!-- the document itself, which contains elements in the three
        namespaces, referenced with the bound prefixes. -->
</ord-archive:XXX>

XML Schema规范为验证引擎留下了一定程度的自由度,因此理论上它们可能会或可能不会遵循提示,它们可能会使用某些名称空间的缓存版本等.但是,在实践中,大多数验证引擎都会使用您的提示或提供特定于实现的控制其行为的方式.

在问题中的链接下给出的示例使用xsi:noNamespaceSchemaLocation,其中包含没有目标命名空间的模式的位置提示.

转载注明原文:如何使用xmllint验证内部指定的xsd? - 代码日志