Validation XHTML 1.1严格扩展为<;链接大小“&引用&燃气轮机;

Validation XHTML 1.1严格扩展为<;链接大小“&引用&燃气轮机;,validation,xhtml,doctype,dtd,Validation,Xhtml,Doctype,Dtd,今天我遇到了一个新问题 正如大多数人可能已经知道的,a:target=“\u blank”不是严格的验证XHTML。但今天我想在网站上添加iPod、iPhone和iPad的图标。这需要一段代码: <link rel="apple-touch-icon" href="logo_144.png" sizes="144x144" /> 正如您可能猜到的,属性大小也无效。最大的问题是XHTML1.1是必须的。所以我不能去HTML5或者过渡版。我发现我可以使用自定义DTD,这不是首选。我

今天我遇到了一个新问题

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

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

正如您可能猜到的,属性大小也无效。最大的问题是XHTML1.1是必须的。所以我不能去HTML5或者过渡版。我发现我可以使用自定义DTD,这不是首选。我还发现可以添加一些自定义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 >
]>

这显然不起作用,它将“]>”直接打印到页面中,给了我更多的错误,例如没有字符集。我试图在没有任何运气的情况下将“公共”改为“系统”

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

有没有正确的方法

没有

您可以使用XHTML1.1(没有XHTML1.1Strict这样的东西),也可以使用
链接
元素上带有
size
属性的东西


如果您使用自定义DTD,那么您就不再使用XHTML1.1(您使用的是自定义语言)。

根据您的偏好,有两种正确的方法可以做到这一点

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

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

另一个可能稍微容易一点的选择是选择;由于在HTML5中添加了size属性,这似乎是最有意义的。使用此选项,您可以将doctype完全排除在外,但通常建议使用


您始终可以使用类型而不是大小

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

如果要抑制属性大小验证错误以验证文档的其余部分,可以在验证时动态插入
。下面是一个
xmllint
示例:

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

太糟糕了,我认为这是可能的,因为有些人在XHTML 1.0中使用了上述方法。XHTML1.1不是一直都很严格吗?接下来,当我将该行添加到DTD本身时,它仍然作为XHTML1.1进行验证。当使用该技术时,它不再是XHTML1.0过渡或XHTML1.1,而是成为某种自定义语言。XHTML1.1将XHTML1.0 Strict作为起点,但它不是Strict(因为没有必要将它与不存在的XHTML1.1过渡版和XHTML1.1框架集区分开来)这是非常清楚的我仍然会遇到同样的错误。因此,当我使用自定义DTD并内联添加代码时,这甚至是不可能的?而不是使用一些常见的标记语法分析器。HTML 5放弃了DTD的想法,因为浏览器不支持SGML/XML。
sed '/<!DOCTYPE/ {
        s/\([^>]*\)/\1 [<!ATTLIST link sizes CDATA #IMPLIED>]/
    }
    ' input.html | \
xmllint --noout --valid - 2>/dev/null || \
echo "Not valid: input.html"