2017-06-14 78 views
2

我知道您可以使用xmllint命令來驗證local xsd files或xsd網絡文件位置,但是我想要做的是指示xmllint根據其「內部指定的」xsd驗證XML文件,例如此XML指定一個XSD位置:如何使用xmllint對內部指定的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進行「驗證」?

回答

1

xsi:schemaLocation應該包含一個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,其中包含位置提示,表示沒有目標名稱空間的模式。

0

出現它不能。但是,您可能能夠手動提取XSD(從XML文件)並將其通過命令行傳遞給xmllint [?]