XHTML 1.1使用<link sizes“”=“”/>进行严格扩展

时间:2012-06-11 09:28:09

标签: validation xhtml doctype dtd

今天我遇到了一个新问题。

正如大多数人可能已经知道的那样,a:target =“_ blank”不会验证XHTML Strict。但今天我想在网站上添加iPod,iPhone和iPad的图标。这需要的代码是:

<link rel="apple-touch-icon" href="logo_144.png" sizes="144x144" />

正如您猜测的那样,属性大小也无效。最大的问题是XHTML1.1是必须的。所以我不能去HTML5或过渡。我发现我可以使用自定义DTD,这不是首选。我还发现可以添加一些自定义DTD线来扩展原始版本。代码是:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" [
    <!ATTLIST link sizes CDATA #IMPLIED >
]>

这显然没有完成这项工作,打印了']&gt;'进入页面,给我更多的错误,如没有charset。我试图将'PUBLIC'改为'SYSTEM'而没有任何运气。

有没有正确的方法呢?提前谢谢!

4 个答案:

答案 0 :(得分:1)

  

有没有正确的方法呢?

没有

您可以使用XHTML 1.1(没有XHTML 1.1 Strict之类的东西),也可以在sizes元素上使用link属性。

如果您使用自定义DTD,那么您不再使用XHTML 1.1(您使用的是自定义语言)。

答案 1 :(得分:1)

您始终可以使用type而不是size。

<link rel="apple-touch-icon" type="72x72" href="/theme/mobile/72x72.png" />

答案 2 :(得分:0)

根据您的偏好,有两种正确的方法可以执行此操作。

您的上述示例看起来是正确的,我不确定您正在尝试打印]>的哪个浏览器 - 它可能是ATTLIST末尾的额外空间:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" [
    <!ATTLIST link sizes CDATA #IMPLIED>
]>

另一个 - 可能稍微容易一点 - 选择是选择the XML serialization of HTML5 (often called XHTML5);因为在HTML5中添加了size属性,它似乎最有意义。使用此功能,您可以将文档类型完全排除为HTML5 validator opts for RELAX NG Schema for validation purposes instead of DTDs,但通常建议使用HTML5 Polyglot

将doctype保留为一般可移植性以及与IE8及以下版本的兼容性
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">

答案 3 :(得分:0)

如果您想要抑制属性大小验证错误以便验证文档的其余部分,您可以在验证时动态插入<!ATTLIST link sizes CDATA #IMPLIED>。这是一个xmllint示例:

sed '/<!DOCTYPE/ {
        s/\([^>]*\)/\1 [<!ATTLIST link sizes CDATA #IMPLIED>]/
    }
    ' input.html | \
xmllint --noout --valid - 2>/dev/null || \
echo "Not valid: input.html"