XML详解:第一部分

XML概述
XML是eXtensible Markup Language(可扩展标记语言)的缩写。
XML和HTML一样,都衍生于SGML (Standard Generalized Markup Language,标准通用化标记语言)。
SGML有非常强大的适应性,同时也非常复杂,其复杂程度无法适应网络上的日常应用,以致在小型的应用中难以普及。XML的产生就是为了简化SGML,以便用于更加通用的目的。
W3C于1998年2月批准了XML的1.0版本,XML既具有SGML的强大功能和可扩展性,同时又具有HTML.的简单性。它是一个非常简单的SGML语言,方便普通人的使用。可以认为,XML是SGML的一个子集,而HTML则是SGML的一个应用。
XML只是用来传递数据,它是一种纯文本格式,与平台没有关系。
XML与HTML比较
1、 HTML.将数据和其显示效果混在一起,它是一种表现技术,定义了如何显示信息的标签;而XML文档只是存储了数据和描述了数据之间的关系,没有规定该如何显示数据,即将数据和其显示进行了分离。
2、 HTML.的格式要求比较松散,HTML解释器通常采用尽量解释的机制.这祥容易造成同一个页面在不同的浏览器中可能显示出大不相同的结果;而XML是非常严格的标记语言,例如严格区分大小写等问题。
3、 HTML的标记集合是固定的,你不能在自己的应用中扩展HTML标记;而XML没有提供一组事先已经定义好的标签,只是提供一个标准,人们可以按照这个标准来定义自己专用的标记,所以XML的标记是可无限扩展的,它可以用于描述各种应用领城的数据。
4、 XML允许粒度更新,不必在XML文档每次有局部改变时都发送整个文档内容,只有改变的元索才必须从服务器发送到客户机;HTML不支持类似功能。
HTML规范的最终版本HTML 4.01,HTML目前己经不再是Web标记的标准,它已经被XHTML所取代。XHTML是HTML和XML的混合物,它完全采用XML的语法和规则来编写Web页面。
XML基本语法
文档声明
<?xml version="1.0" encoding="GB2312" standalone="yes" ?>
l XML声明语句从 <?xml 开始,到 ?> 结束;
l 声明语句里必须有version属性,但是encoding和standalone属性是可选的;
l version、encoding、standalone三个属性必须按上述顺序排列;
l version属性值必须是1.0或1.1;
l XML声明必须放在文件的开头,即文件的第一个字符必须是 < ,前面不能有空行或空格,关于这一点,有些解析器不那么严格。
1) version属性
解析器遇到它不能识别的版本时,会拒绝解析。目前只有两个版本1.0或1.1。
这两个版本的标准几乎一样,只是在给元素命名时,对某些Unicode字符采取不同的处理方法,以及在某些主机系统里如何处理行结束符问题上也有不同的规定。
除非你遇到一些Unicode字符在1.0版本里不能使用,否则最好使用1.0版本,因为1.1版本的解析器还支持的不够。
2) encoding属性
Unicode个字母(包括非拉丁字符)或下划线(_),不可是其他字符或其他标志符(注,不能以“$”符开头,这与Java语言命名不一样);
l 其他字符可以是数字、下划线和句点;
l 名字里不能有空格;
l 名字里不能含有冒号(:),严格说,这个字符是允许的,但是根据XML规范,它是“保留”的。我们尽量不要在文档中使用这个字符,除非我们在文档中使用了名称空间;
l 名字的开始字符不可以是xml,不管它是小写的,大写的,或者大小写混合的;
l 开始符 < 之后紧跟着元素名字,期间不能有空格,但是在元素名与结束符 > 之间可以有空格。
注,元素的这些命名规则同样可以应用到XML中其他对象的命名。
l 在HTML里,单词之间凡是被认为不重要的空白字符都会被从文档中删除。多于一个空格都被认为是没有意义的,因此只保留一个。但我们可以使用一个<pre>标签将这些内容括起来,这样就会原样显示了,注,不能使用 <p> 标签;但如果是在XML里,则会原样显示,注,如果使用IE打开,空白字符还是被删除了,这是因为IE并不是直接显示XML文档,它利用一种称之为XSL的技术,先把XML转换为HTML,然后再显示HTML文档。
l 删除行结束空白符:由于在Windows与Unix上的换行不一样,Windows上是使用回车加换行来表示一行的结束,但Unix却只使用一个换行,所以为了统一,标准是要删除除了一个换行符之外其他空白字符。
l 标记里的空白字符:
比如上面 <name> 标签后面有一个回车换行符,这些空白符是为了使文档更具有可读性,实际上不是数据的一部分。这些增强可读性的空白符又称为”,所以有如下两种替代方案:
;
">
">
种类型。
1、 CDATA
它表示属性值为普通文本字符串(注,与ELEMENT声明中的PCDATA关键字稍有不同,解析器在解析CDATA时,忽略某些保留字),当然,在属性设置值中出现的特殊字特,也需要使用字符的转义实体来表示,例如,用 <表示字符 <,它是属性的默认值。
2、 ENUMERATED(枚举类型)
属性的类型可以是一组取值的列表,在XML文件中设置的属性值只能是这个列表中的某个值。注意,在DTD定义中并不会出现关键字ENUMERATED,如:
个内置的实体,如果需要,我们只能使用字符实体,如:
<!ENTITY % DefaultPhoneKind ""Home"">
<!ATTLIST phone kind (Home | Work | Cell | Fax) %DefaultPhoneKind;>
或者这样:
、#REQUIRED:说明必须设置该属性。
、#IMPUED:说明可以设置,也可以不设置该属性。
<!ATTLIST knows contacts IDREFS #IMPLIED>
3、#FIXED:说明该属性的取值固定为一个默认值,在XML文件中不能将该属性设置为其他值。使用#FIXED时,还需要为该属性提供一个默认值。
<!ATTLIST contacts version CDATA #FIXED "1.0">
4、直接使用默认值:如果在属性的设置说明部分没有使用上面任何一种关键字,而是直接指定一个默认值的话,那么在XML文件中可以设,也可以不设置该属性。如果XML文件中没有设置该属性,该属性将被自动设置为DTD中定义的默认值;如果XMI.文件中设置了该属性,可以使用新的属性值来覆盖DTD中定义的默认值。
<!ATTLIST phone kind (Home|Work|Cell|Fax) "Home">
XML详解:第一部分的更多相关文章
- Web.xml详解(转)
这篇文章主要是综合网上关于web.xml的一些介绍,希望对大家有所帮助,也欢迎大家一起讨论. ---题记 一. Web.xml详解: (一) web.xml加载过程(步骤) 首 ...
- Maven-pom.xml详解
(看的比较累,可以直接看最后面有针对整个pom.xml的注解) pom的作用 pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件:开发者需要遵 ...
- 【转】maven核心,pom.xml详解
感谢如下博主: http://www.cnblogs.com/qq78292959/p/3711501.html maven核心,pom.xml详解 什么是pom? pom作为项目对象模型.通过 ...
- C#中的Linq to Xml详解
这篇文章主要介绍了C#中的Linq to Xml详解,本文给出转换步骤以及大量实例,讲解了生成xml.查询并修改xml.监听xml事件.处理xml流等内容,需要的朋友可以参考下 一.生成Xml 为了能 ...
- Tomcat配置(二):tomcat配置文件server.xml详解和部署简介
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- 前端技术之_CSS详解第一天
前端技术之_CSS详解第一天 一html部分 略.... 二.列表 列表有3种 2.1 无序列表 无序列表,用来表示一个列表的语义,并且每个项目和每个项目之间,是不分先后的. ul就是英语unorde ...
- Tomcat(二):tomcat配置文件server.xml详解和部署简介
Tomcat系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html 1. 入门示例:虚拟主机提供web服务 该示例通过设置虚拟主机来提供web服务 ...
- Maven配置文件setting.xml详解
注:本文来源于:大话JAVA的那些事 <Maven配置文件setting.xml详解> <?xml version="1.0" encoding="UT ...
- Logback简介及配置文件logback.xml详解
logback简介及配置文件说明 @author:wangyq @date:2021年3月31日 logback简介 Logback是由log4j创始人设计的另一个开源日志组件,官方网站: htt ...
- 【maven】 pom.xml详解
pom.xml详解 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www ...
随机推荐
- systemctl 启动成功却提示没有权限(解决)
现象: systemctl 启动svnserve成功,却在提交svn时提示没有权限. systemctl 启动smb成功,却在samba访问时提示没有权限. 但手动启动svnserve和smb后,问题 ...
- zabbix监控phpfpm
php-fpm status详解 pool – fpm池子名称,大多数为wwwprocess manager – 进程管理方式,值:static, dynamic or ondemand. dynam ...
- Makefile学习之make 的运行【转】
转自:http://blog.csdn.net/suzilong11/article/details/7852830 —————— 一般来说,最简单的就是直接在命令行下输入make命令,make命令会 ...
- Android的init过程(二):初始化语言(init.rc)解析【转】
转自:http://www.cnblogs.com/nokiaguy/p/3164799.html Android的init过程(一) 本文使用的软件版本 Android:4.2.2 Linux内核: ...
- iOS开发 爱特开发技术bug总结
#pragma mark 每天总结学习两小时 效率 和 每天学习 研究底层 多进去看看 // .................................................... ...
- 使用Xcode和Instruments调试解决iOS内存泄露
转载自:http://www.uml.org.cn/mobiledev/201212123.asp (或者http://www.cocoachina.com/bbs/read.php?tid=129 ...
- ecshop销售排行调用促销价格和市场价格
我们知道在ecshop某些产品销售之后,销售量高的产品销售出去之后,能形成销售排行,ecshop的销售排行必须保持两个条件,首先是ecshop的商品必须库存足够,其次商品该商品必须上架的. 我们分析如 ...
- 《C++标准库》
函数对象 使用bind时注意,占位符有自己的命名空间std::placeholders,如果不在程序开始处using std::placeholders,那么就要写成: std::bind(std:: ...
- js中RHS与LHS区别
为什么区分RHS与LHS是一件重要的事情? 因为在变量没有声明(在任何作用域都找不到该变量的情况下),这两种查询的行为是不一样的. function foo (a) { console.log(a + ...
- python 拷贝文件夹下所有的文件到指定文件夹(不包括目录)
1.随便简单些写了一下.直接粘结代码,只是简单的实现一下,还很多需要完善和扩展的地方,比如忽略掉后缀文件,删除文件 如果排除的某些的话可以用: sourceF.find('.后缀')>0 2.注 ...