一、Html与Xhtml 的区别与联系
- 1999 W3C 发布 HTML 4.01 标准,
- 2000: W3C 采用了一个大胆的计划,把 XML 引入 HTML,XHTML1.0 作为 W3C 推荐标准发布。
- 2002-2006 XHTML 2.0 最终放弃
- 2009 W3C 宣布 XHTML2.0 不再继续,宣告死亡
- 现在是xhtml5,XHTML 5只是XML序列化的HTML 5数据。
XHTML1.0是“3种HTML 4文件根据XML 1.0标准重组”而成的,W3C推荐标准。
XHTML 1.0 Strict(严格版)是参照“HTML 4.01 Strict”改编,但不包括被弃用的元素。其文件类型描述为:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
XHTML 1.0 Transitional(过渡版)是参照“HTML 4.01 Transitional”改编,包括已于Strict版本被弃用的呈现性元素(例如<center>
, <font>
等)。其文件类型描述为:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
XHTML 1.0 Frameset(框架版)是参照“HTML 4.01 Frameset”改编,并允许于网页中定义框架元素。其文件类型描述为:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
xhtml1.0与html4.01的区别 https://www.w3.org/TR/2002/REC-xhtml1-20020801/#diffs
XHTML是XML的一种应用。基于这一事实,那些在以SGML为基础的HTML 4中,不完全合法的用法,应被改写。
文档应该是结构良好的
良好结构(Well-formed)[3]是由XML[4]引入的一个新概念。也就是说所有的元素都必须有结束标签或者以特殊的方式书写(如下所述),而且所有的标签必须合理地嵌套。
尽管如此,交叉使用在SGML中仍然是合法的,而且在现有的浏览器中也能够被广泛接受。
- 正确:元素嵌套
<p><em>这是一个要强调的段落。</em></p>
- 错误:元素交叉
<em><p>这是一个要强调的段落。</em></p>
元素名称和属性必须小写
XHTML文件要求所有的HTML元素名称和属性名称都要小写。因为XML本身大小写意义不同,因此必须区分开来。比如,<li>
和<LI>
是完全不同的。
要有结束标签
基于SGML的HTML 4里面,允许特定的标签省略结束标签;这些元素暗含有结束标记。XHTML不允许省略结束标记。所有元素(包括在DTD中声明为空的标签),都必须有结束标签。在DTD中声明为空的元素可以用结束标签或者使用空元素速记法(参见空元素)。
- 正确的:结束的元素
<p>這是一個段落。</p><p>這是另一個段落。</p>
- 錯誤的:没有结束的元素
<p>這是一個段落。<p>這是另一個段落。
- 等等等。。。直接看原文
- HTML 4.01和XHTML 1.0之间的相似性导致许多网站和内容管理系统采用最初的W3C XHTML 1.0建议书。为了帮助作者过渡,W3C提供了有关如何以HTML兼容的方式发布XHTML 1.0文档的指导,并将它们提供给非XHTML设计的浏览器。
这种“HTML兼容”内容使用HTML媒体类型(
text/html
)而不是XHTML(application/xhtml+xml
)的官方Internet媒体类型发送。 -
二、html与htm的区别
没有区别,但因DOS、Windows 95等早期系统采用的8.3命名规则只支持最长3字符的扩展名,为了兼容采用了htm,而linux或者ios都是支持多位扩展名的。
同理还有 jpg与jpeg 的区别。
三、shtml 与html的区别
本质上都属于静态网页一种,html属于纯静态,客户端浏览器读取html文件是什么就呈现给浏览者什么内容。而shtml则可以使用SSI。
SSI是为WEB服务器提供的一套命令,这些命令只要直接嵌入到HTML文档的注释内容之中即可。如:
<!–#include file=”info.htm”–>
就是一条SSI指令,其作用是将”info.htm”的内容拷贝到当前的页面中,当访问者来浏览时,会看到其它HTML文档一样显示info.htm其中的内容。假如我们A页面是shtml的静态网页,而A页面里我们使用了include包含嵌入B静态html页面,如果你的服务器空间支持Shtml SSI这个时候我们,浏览器打开A页面时候,就会在A页面显示A原本内容以及B页面内容,我们查看网页源代码,不会发现B页面引入痕迹,而是看到B页面内容完全在A页面里。
假如:
1、A shtml页面里内容是:
我包含页面B:<!–#include file=”b.html”–>2、B html网页内容:
我是B页面内容3、这个时候浏览器查看A页面HTML源代码:
A shtml页面里内容是:我是B页面内容这个就是shtml ssi 包含include魅力之处。
其它的SSI指令使用形式基本同刚才的举例差不多,可见SSI使用只是插入一点代码而已,使用形式非常简单。
当然,如果WEB服务器不支持SSI,它就会只不过将它当作注释信息,直接跳过其中的内容;浏览器也会忽略被包含信息,我们可以查看源代码看到include引入注解信息。
四、dtd的含义
经常能够看到dtd,那到底是什么意思呢?(ps,提前剧透一下,现在dtd已经被xsd取代了)
这首先要从xml,说起:下面举例的是早期2.3版本的web.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app id="WebApp_ID"> <display-name>q</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app>
第一行是 XML 声明。它定义 XML 的版本 (1.0) 和所使用的编码 (UTF-8)。
下面的是DOCTYPE声明。DOCTYPE是document type(文档类型)的简写,它规定了文档类型,文档类型遵循的协议名,以及文档类型协议的具体定义(也就是DTD,Document Type Definition)
在html中,我们也能看DOCTYPE,比如:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
说白了,dtd就是定义了文件中可以使用哪些标签,以及标签的用法。
所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:
- 元素
- 属性
- 实体
- PCDATA
- CDATA
(DTD就是用来定义这些模块的),dtd教程参考http://www.w3school.com.cn/dtd/index.asp
五、xsd的含义
XML Schema 是基于 XML 的 DTD 替代者。
XML Schema 描述 XML 文档的结构。
XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。
参考教程http://www.w3school.com.cn/schema/index.asp举个例子:3.1新版的web.xml 文件
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>o2o</display-name> </web-app>
第一行,没有变化,第二行不再是DOCTYPE了。
先讲xmlns,这个是xml namespace 的含义,也就是 xml 命名空间。 我重新将web.xml的代码编排一下,便于理解。 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>o2o</display-name> </web-app>xmlns="http://xmlns.jcp.org/xml/ns/javaee" 首先xmlns="http://xmlns.jcp.org/xml/ns/javaee" 代表了整个web.xml的默认命名空间。 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 表示如果标签遇到xsi:xxx的,就以这个http://www.w3.org/2001/XMLSchema-instance命名空间为准。 xsi:schemaLocation 后面跟的是一些列键值对,记录的是 <命名空间,命名空间的定义>
下面是springmvc.xml的配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> 。。。 </beans>
说明:上述例子中的命名空间xsi调用方法 xsi:schemaLocation或xsi:noNamespaceSchemaLocation 其实就是xsd中对命名空间调用方法进行设置。
这显然是逻辑自恰的,我们在xsd文件中,对命名空间调用一些方法进行设置。那么在xml文件中,自然就可以在命名空间中识别这些设置了。至于xml头中的xsi:schemaLocation,其实也是对命名空间xsi的设置。设置的目的就是将相应的命名空间和xsd文件进行键值对关联。至于xsi的命名空间,因为在本xml文件中,没有用到该命名空间,所以xsi是炮灰,纯粹就是为了让别的命名空间和xsd进行关联。
参考
https://www.w3.org/TR/xmlschema-1/#Instance_Document_Constructions
https://stackoverflow.com/questions/34202967/xmlns-xmlnsxsi-xsischemalocation-and-targetnamespace