Posts Tagged ‘xhtml’
二
.xhtml扩展名
作者: boke ,分类: markup language, mobile web
今天在研究手机开发时的javascript应用时,不经意间发现了个小问题,现来看一下这两个文件:
a.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<title>1</title>
<script type="text/javascript">
window.onload = function()
{
var pp = document.documentElement.childNodes;
for (p in pp)
{
alert(pp[p]);
}
}
</script>
</head>
<body>
</body>
</html>
b.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<title>1</title>
<script type="text/javascript">
window.onload = function()
{
var pp = document.documentElement.childNodes;
for (p in pp)
{
alert(pp[p]);
}
}
</script>
</head>
<body>
</body>
</html>
发现两个文件的不同之处了吗?其实上面两个文件是完全一样的,除了扩展名。
由于要做手机开发,有人建议说用.xhtml这个扩展名更好一些,于是就用了。本想用js得到body这个节点,结果试了几次pp[0]都不对。
我用的是XHTML-MP 1.2的DOCTYPE,难道DOCTYPE不对?好,换成标准的xhtml的DOCTYPE,就是a.xhtml这样的,还是不对啊!
难道js代码写的有问题?(这里有段小插曲,在下篇文章详述)百度一下,再翻出以前写的看看,没问题啊!还有哪儿不对呢?
按网上和我以前的经验来说,pp[0]是<head>,pp[1]是<body>才正对呀!不管了,先把pp都alert出来看看是啥东西再说。这一alert发现问题了,多出三个[object Text],分别位于<head>前面,<head>和<body>之间,<body>之后。这种情况,甭问肯定是换行符所致,删掉,果然没问题了。
记得以前没出现这种情况,那可能就是扩展名的问题了,另存为b.html,再试,没问题了,这才恍然大悟,怪不得年前看过一个手机页面,一个换行符也没有。
来个刨根问底,查查这个.xhtml到底咋回事,百度了半天,没找到,google了半天,好像(为什么加个好像呢?答案看我2月12号的饭否)也没找到。
哪位有缘人路过提点提点,期待ing!!!
一
HTML 4与XHTML 1.0区别
作者: boke ,分类: markup language, mobile web
翻译w3c的http://www.w3.org/TR/xhtml1/ 第四部分,具体的不同还要参考DOM(不是很喜欢DOM的个别地方,用JS操作一个元素时,原本简单的东西往往得很多句才能搞定,再次抱怨一下,呵呵)和XML。
编写手机页面时所用的xhtml mp和xhtml basic 依照xhtml标准,虽然浏览器一般都较宽容,但不推荐旧的写法。
XHTML文档必须具有良好完整的排版(well-formed)
编排良好性(Well-formedness)是XML引入的一个新概念.从本质上说,元素必须有结束标签,或者必须以特殊方式书写,而且元素必须嵌套.
尽管SGML规定重叠(overlapping)是非法的,但现有的浏览器普遍允许重叠.
正确:嵌套元素(nested elements)
<p>梦之都<em>XHTML教程</em>.</p>
不正确:层叠元素(overlapping elements)
<p>梦之都 <em>XHTML教程</p>.</em>
元素和属性名必须小写
对于所有HTML元素和属性名, XHTML文档必须使用小写. 因为XML是大小写敏感的.如 <li> 和 <LI> 是不同的标签.
对非空元素,必须使用结束标签
在基于SGML的HTML4中的一些隐含结束意义的元素允许忽略结束标签.XML不允许忽略结束标签.除了在DTD中被声明为空的元素,所有元素必须有结束标签.
正确:结束的元素(terminated elements)
<p>梦之都的XHTML教程.</p><p>梦之都的CSS教程.</p>
不正确:未结束的元素(unterminated elements)
<p>梦之都的XHTML教程.<p>梦之都的CSS教程.
属性值必须在引号中
所有的属性值必须在引号中,即使是以数字形式的属性值
正确:在引号中的属性值(quoted attribute values)
<tablerows="3">
不正确:不在引号中的属性值(unquoted attribute values)
<table rows=3>
属性最小化
XML不支持属性最小化.属性-属性值必须完整成对的写出.像disabled,checked这样的属性名不能在不指定属性值的情况下出现.
正确:非最小化属性(unminimized attributes)
<inputchecked="checked">
不正确:最小化属性(minimized attributes)
<input checked>
空元素
空元素必须有结束标签,或者起始标签必须以/>结束.例如,<br/>或<hr></hr>.参看HTML兼容性指导HTML Compatibility Guidelines中的信息,以保证向后兼容HTML 4用户代理程序.
正确:结束的空元素(terminated empty elements)
<br/><hr/>
错误:未结束的空标签(unterminated empty elements)
<br><hr>
属性值中的空白字符处理
- 删去引导和后序空白符
- 将一个或多个空白符(包括换行)转换成单个字符间空间
Script and Style 元素
XHTML中,script和style元素被声明为#PCDATA内容形式,因此,<和&被看作是标识的开始,<和&等HTML实体将被XML处理器看作为实体引用而分别被认为是<和&.将script和style元素的内容隐蔽在CDATA标记中避免了这些实体的扩张.
<script><![CDATA[ ... unescaped script content ... ]]></script>
CDATA部分被XML处理器识别,表现为文档对象模型中的一个结点.替代的方式是使用外部script和style文档.
SGML排斥
SGML给作者的DTD可以指定在一个元素内部禁止出现的元素.这样的禁止在XML中是不可能的.
例如,严格的HTML 4 DTD”禁止”任何深度的’a'元素对另一’a'元素的嵌套.在XML中无法写出这些的”禁止”.虽然这些禁止不能被定义在DTD中,但是一些元素不应该被嵌套.对不能被嵌套的元素Element Prohibitions的总结.
具有’id’和’name’属性的元素
HTML4定义了name属性的元素有a,applet,form,frame,iframe,img and map.HTML4还引入了id属性.这两个属性都是被设计用为片段标识符.
在 XML中,片段标识符是ID,每个元素只能有一个ID类型的属性.因此,在XHTML1.0中,id属性被定义为ID类型.为保证XHTML1.0文档是 结构良好(well-structured)的XML文档,在定义一个片段标识符时,XHTML文档必须使用id属性,即使是对那些以前用name属性的 元素.参看 HTML Compatibility Guidelines,确保XHTML文档以text/html媒体类型使用时,这些”锚(anchors)”能向后兼容.
注意,在XHTML 1.0中,name属性是不赞成使用的,在以后的XHTML版本中将被删除。
有预定义值的属性
在HTML 4和XHTML都有一些属性,它们有预先确定且有限的值(例如, type属性的input元素) 。在SGML和XML中 ,这些被称为枚举属性。在HTML 4中 ,这些值是不区分大小写的,所以TEXT和text是一样的。在XML中,这些值是区分大小写的,而在XHTML 1所有这些值都应该是小写的。