繁体   English   中英

当w3.org停止提供某些文件时,如何在命令行上使用Xerces验证XHTML?

[英]How to validate XHTML with Xerces on commandline when w3.org stopped serving some files?

我从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.

我退出Xerces并改用xmllint。

xmllint适用于上述sample.xml。 首先,您需要手动下载所有 架构 文件 ,并将它们保存在保留sample.xml的位置。

然后使用主要的xsd文件进行验证:

$ xmllint --schema xhtml11.xsd sample.xml --noout
sample.xml validates

xmllint用了32秒来验证sample.xml

在Ubuntu上的libxml 2.9.4附带的xmllint以及OS X Capitan的默认xmllint上进行了测试。

删除示例中的以下两行

<!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文件的组件保持在线状态-直到有一天,他们放弃了xsd文件,以寻求一种更新的方法来验证XML。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM