我从W3C建议中复制了示例XHTML文件:
$ cat > sample.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html version="-//W3C//DTD XHTML 1.1//EN"
xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/1999/xhtml
http://www.w3.org/MarkUp/SCHEMA/xhtml11.xsd"
>
<head>
<title>Virtual Library</title>
</head>
<body>
<p>Moved to <a href="http://example.org/">example.org</a>.</p>
</body>
</html>
命令行工具sax.Counter
不适用于示例:
$ java -classpath /usr/share/java/xercesImpl-2.11.0.jar:/usr/share/java/xercesSamples.jar sax.Counter -v -n -np -s -f sample.xml
error: Parse error occurred - http://www.w3.org/TR/xhtml11/DTD/xhtml-datatypes-1.mod
java.io.FileNotFoundException: http://www.w3.org/TR/xhtml11/DTD/xhtml-datatypes-1.mod
因为缺少包含的文件之一:
$ wget http://www.w3.org/TR/xhtml11/DTD/xhtml-datatypes-1.mod
--2018-10-22 23:08:30-- http://www.w3.org/TR/xhtml11/DTD/xhtml-datatypes-1.mod
404 Not Found
2018-10-22 23:08:45 ERROR 404: Not Found.
删除示例中的以下两行
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
和薛塞斯将工作。使用 Java 11 和 libxerces 2.11.0:
$ export CLASSPATH=/usr/share/java/xercesImpl.jar:/usr/share/java/xercesSamples.jar
$ java sax.Counter -v -n -np -s -f sample.xml
sample.xml: 25176 ms (6 elems, 10 attrs, 0 spaces, 59 chars)
我很困惑为什么主dtd
文件可用,而组件mod
文件不可用。但至少 w3 已经将xsd
文件的组件保持在线 - 直到有一天他们放弃它,转而使用一些更新的方法来验证 XML。
我退出了Xerces,改用xmllint。
XMLLINT适用于所述样品.xml。首先,您需要手动下载所有架构文件,并将它们保存在保存 sample.xml 的同一位置。
然后使用主 xsd 文件进行验证:
$ xmllint --schema xhtml11.xsd sample.xml --noout
sample.xml validates
XMLLINT 花了 32 秒来验证样本.xml
在 Ubuntu 上随 libxml 2.9.4 附带的 xmllint 以及 OS X Capitan 上的默认 xml lint 进行测试。