我从W3C recommendation复制了示例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.
答案 0 :(得分:0)
我退出Xerces并改用xmllint。
xmllint适用于上述sample.xml。首先,您需要手动下载all schema files并将它们保存在保留sample.xml的位置。
然后使用主要的xsd文件进行验证:
$ xmllint --schema xhtml11.xsd sample.xml --noout
sample.xml validates
xmllint花了32秒来验证sample.xml
在Ubuntu上的libxml 2.9.4和OS X Capitan的默认xmllint上使用xmllint进行了测试。
答案 1 :(得分:0)
删除示例中的以下两行
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
和Xerces将起作用。使用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。