gpt4 book ai didi

xml - 为了它的好处而使用无效的 XHTML 1.0 Strict 可以吗?

转载 作者:数据小太阳 更新时间:2023-10-29 02:39:23 26 4
gpt4 key购买 nike

我一直在让我的网页使用无效的 XHTML 1.0 Strict,以获得我网页中自定义实体的好处,以及其他可扩展性功能。

这样做有什么问题吗,或者这是一种编写网页的完全有效的方法(除了无法在不理解 XHTML mime 类型的浏览器中显示之外)?

我很好奇我是否可以插入它使用 XML 技术将我自己网页的 bootstrap div hell 包装成有意义的标签,而无需使用 javascript 来解析自定义标签。

特别是,编写有效的 XHTML 非常困难,因为许多 HTML5 标记(例如 canvas 和 nav)未定义为有效元素,并且尽管现代网络实践有效,但仍有许多奇怪的方法使其无效。这是一个更大的问题,因为这使得无法使用 AngularJS 指令创建自定义标签,或使用自定义标签使用 javascript 进行解析(因为我不知道如何扩展现有的 XHTML 文档类型以使其理解这些标签以有效)。

例子:

index.php:

<?php header('Content-Type: application/xhtml+xml'); ?>
<!-- Not intended to be validated, but exploit XHTML benefits anyway -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml-strict.dtd"
[
<!ENTITY page-title "Daily Bits and Bytes">
]>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>&page-title;</title>
</head>
<body>
</body>
</html>

考虑因素:

我正在考虑完全放弃严格的文档类型,而只是使用我自己的文档类型并将网页作为 application/xhtml+xml 发送。据我了解,XHTML DTD 甚至没有被现代浏览器查看,并且 XHTML 不提供 HTML 在默认情况下没有的任何额外实体/定义,因此它似乎没有为网页增加任何值(value),而自定义实体却有。

例如:

<?php header('Content-Type: application/xhtml+xml'); ?>
<!DOCTYPE my-dtd
[
<!ENTITY page-title "Daily Bits and Bytes">
]>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>&page-title;</title>
</head>
<body>
</body>
</html>

另一个好处

例如,为 p 标签创建自定义颜色属性:

index.xhtml:

<?xml-stylesheet type="application/xml" href="style.xsl"?>
<!DOCTYPE my-dtd
[
<!ENTITY page-title "Daily Bits and Bytes">
]>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>&page-title;</title>
</head>
<body>
<p color="blue">This paragraph is blue</p>
<p>hello</p>
</body>
</html>

style.xsl:

<xsl:stylesheet xmlns="http://www.w3.org/1999/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>

<xsl:template match="xhtml:p[@color]">
<xsl:element name="xhtml:p">
<xsl:attribute name="style">
color:
<xsl:value-of select="./@color" />
;
</xsl:attribute>
<xsl:apply-templates select="@*|node()" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>

还有一个好处

自定义域特定元素,例如导航栏,

转身

<navigation-bar>
<link to="someplace">text</link>
</navigation-bar>

<nav class="navbar navbar-inverse">
<ul class="nav navbar-nav>
<li><a href="someplace">text</a></li>
</ul>
</nav>

没有 javascript(仍然会使页面加载变慢,但一旦生产结束,您可以通过仅提供转换结果来优化 xsl,这比翻译基于 jquery/javascript 的转换更容易)。

index.xhtml:

<?xml-stylesheet type="application/xml" href="style.xsl"?>
<!DOCTYPE my-dtd
[
<!ENTITY page-title "Daily Bits and Bytes">
]>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>&page-title;</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
</head>
<body>
<navigation-bar>
<link to="https://stackoverflow.com">StackOverflow</link>
<link to="https://facebook.com">Facebook</link>
<link to="https://twitter.com">Twitter</link>
</navigation-bar>
<p color="blue">I am red</p>
<p>hello</p>
</body>
</html>

style.xsl:

<xsl:stylesheet xmlns="http://www.w3.org/1999/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>

<xsl:template match="xhtml:p[@color]">
<xsl:element name="xhtml:p">
<xsl:attribute name="style">
color:
<xsl:value-of select="./@color" />
;
</xsl:attribute>
<xsl:apply-templates select="@*|node()" />
</xsl:element>
</xsl:template>

<xsl:template match="xhtml:navigation-bar">
<xsl:element name="nav">
<xsl:attribute name="class">navbar navbar-inverse</xsl:attribute>
<xsl:element name="ul">
<xsl:attribute name="class">nav navbar-nav</xsl:attribute>
<xsl:for-each select="current()/xhtml:link">
<li>
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="@to" />
</xsl:attribute>
<xsl:value-of select="text()" />
</xsl:element>

</li>
</xsl:for-each>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>

最佳答案

不,但是...

我的整个平台都使用 XHTML5,即 HTML5 + XML 解析器 (application/xhtml+xml)。 总是一种有效的方式来严格地编写代码实现您的目标。请参阅我的网站个人资料中的链接。您仍然可以将所有 XHTML/XML 与 HTML5 一起使用。你很幸运,我看到了这个,大多数人都在抨击 XHTML,因为 W3C 在 XHTML 2.0 上走的路很糟糕。您将不得不使用 not-a-doctype-doctype,并且仍然需要使用 XML 声明。

此外,您没有正确进行内容协商。仅当客户端的用户代理明确声明支持时,您才需要将页面作为 application/xhtml+xml 提供。在示例中,IE7 的 $_SERVER['HTTP_ACCEPT'] header 是 *.*,这完全是废话,因为 IE7 不支持 squat-diddly。此外,如果客户端的浏览器不支持 application/xhtml+xml,则您不应提供 XML 声明(这也会在旧版本的 IE 中触发怪癖模式)。

   if (isset($_SERVER['HTTP_ACCEPT']) && stristr($_SERVER['HTTP_ACCEPT'],'application/xhtml+xml'))
{
header('Content-Type: application/xhtml+xml; charset=UTF-8');
echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";
}

确保浏览器的 Web 开发工具(对于网络请求通常为“Net”)将主页显示为具有 application/xhtml+xml media type/mime/type。

关于xml - 为了它的好处而使用无效的 XHTML 1.0 Strict 可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37777502/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com