首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xmllint无法验证XHTML1.0过渡文件

xmllint无法验证XHTML1.0过渡文件
EN

Stack Overflow用户
提问于 2016-05-15 18:54:14
回答 1查看 1.8K关注 0票数 4

在Debian Jessie GNU/Linux上复制的步骤。

查看xmllint版本:

代码语言:javascript
复制
$ xmllint --version
xmllint: using libxml version 20901
   compiled with: Threads Tree Output Push Reader Patterns Writer SAXv1 FTP HTTP DTDValid HTML Legacy C14N Catalog XPath XPointer XInclude Iconv ISO8859X Unicode Regexps Automata Expr Schemas Schematron Modules Debug Zlib Lzma 

通过将XHTML1.0转换文件保存为example.xhtml,生成一个XHTML1.0过渡文件

代码语言:javascript
复制
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>A title</title>
</head>

<body>
Some content
</body>

</html>

注:将example.xhtml的内容粘贴到W3C校验器中会产生“此文档被成功地检查为XHTML1.0过渡性!”,因此它在使用xmllint时也应该进行验证。

xmllint在线验证

这是失败的,尽管计算机可以上网:

代码语言:javascript
复制
$ xmllint --noout --valid example.xhtml
example.xhtml:1: warning: failed to load external entity "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
                                                                               ^
example.xhtml:2: validity error : Validation failed: no DTD found !
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
                                                                  ^

xmllint脱机验证

安装XHTML1.0 DTD和实体文件

代码语言:javascript
复制
$ wget -qO- https://www.w3.org/TR/xhtml1/xhtml1.tgz | tar xvz
xhtml1-20020801/
xhtml1-20020801/W3C-REC.css
xhtml1-20020801/xhtml.css
xhtml1-20020801/logo-REC.png
xhtml1-20020801/w3c_home.png
xhtml1-20020801/wcag1AAA.png
xhtml1-20020801/acks.html
xhtml1-20020801/Cover.html
xhtml1-20020801/definitions.html
xhtml1-20020801/diffs.html
xhtml1-20020801/dtds.html
xhtml1-20020801/guidelines.html
xhtml1-20020801/introduction.html
xhtml1-20020801/issues.html
xhtml1-20020801/normative.html
xhtml1-20020801/Overview.html
xhtml1-20020801/prohibitions.html
xhtml1-20020801/references.html
xhtml1-20020801/xhtml1-diff.html
xhtml1-20020801/DTD/
xhtml1-20020801/DTD/xhtml-lat1.ent
xhtml1-20020801/DTD/xhtml-special.ent
xhtml1-20020801/DTD/xhtml-symbol.ent
xhtml1-20020801/DTD/xhtml.soc
xhtml1-20020801/DTD/xhtml1-frameset.dtd
xhtml1-20020801/DTD/xhtml1-strict.dtd
xhtml1-20020801/DTD/xhtml1-transitional.dtd
xhtml1-20020801/DTD/xhtml1.dcl
xhtml1-20020801/xhtml1.ps
xhtml1-20020801/xhtml1.pdf

仍然失败:

代码语言:javascript
复制
$ xmllint --noout --dtdvalid xhtml1-20020801/DTD/xhtml1-transitional.dtd example.xhtml 
example.xhtml:1: warning: failed to load external entity "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
                                                                               ^

同样,如果使用--nonet选项:

代码语言:javascript
复制
$ xmllint --noout --nonet --dtdvalid xhtml1-20020801/DTD/xhtml1-transitional.dtd example.xhtml 
I/O error : Attempt to load network entity http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
example.xhtml:1: warning: failed to load external entity "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
                                                                               ^

问题

我有两个问题:

  1. 为什么这些验证尝试都没有成功?
  2. 第二个选项似乎失败了,因为尽管使用了--dtdvalid选项,但xmllint仍然试图访问http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd,因为它在example.xhtml中被引用。是否有办法告诉xmllint忽略该引用,而使用本地DTD (例如,已经存储在xhtml1-20020801/DTD/xhtml1-transitional.dtd的DTD)?
EN

回答 1

Stack Overflow用户

发布于 2016-05-15 20:29:52

似乎最简单的解决办法是:

代码语言:javascript
复制
$ sudo apt-get install w3c-dtd-xhtml

这将在本地安装相关的DTD。此后,验证成功:

代码语言:javascript
复制
$ xmllint --noout --valid example.xhtml
$

但是,尽管这允许我验证XHTML文件,但它并没有真正回答问题。因此,我不会把这个问题说成是“已回答”,而是希望有人能给出一个真正回答他们的答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37242391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档