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 ...
随机推荐
- Java 入门基础
第零章 开始学习Java 1.Java基础最重要 Java学习中,Java的基础.Java面向对象是最关键的,而一些像框架技术等都是建立在基础之上东西. 多多处理问题,积累处理问题的能力. Java框 ...
- android 学习随笔十四(页面跳转与数据传递)
1.activity 创建第二个Activity 需要在清单文件中为其配置一个activity标签 标签中如果带有这个子节点,则会在系统中多创建一个快捷图标 <intent-filter> ...
- 鸟哥的linux私房菜学习记录之开机流程、模块管理与Loader
- TI CC2541的狗日的Key
被突如其来的一个bug困扰了好几天, 起因是, 按键接的红外接收器, 结果发现, 一旦按下之后, IEN1, P0IE的标识位bit5, 被不知道特么的谁归0了, 也就是说, 按键只能被按下一次, 再 ...
- [转]AngularJS的$resource
转自:http://blog.csdn.net/violet_day/article/details/17403207 $http $http服务是基于$q服务的,提供了promise封装,它接受一个 ...
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.6.SportsStore:导航
在之前的章节,偶们设置了核心的基础设施,现在我们将使用基础设计添加关键特性,你将会看到投资是如何回报的.我们能够很简单很容易地添加重要的面向客户的特性.沿途,你也会看到一些MVC框架提供的附加的特性. ...
- 织梦系统中出现DedeTag Engine Create File False提示原因及解决方法
今天更新网站时dedecms系统时,遇到一个问题:DedeTag Engine Create File False 出现这样的提示. 其实这也不算是什么错误,我个人觉得最重要的一点就是根目录下没有给 ...
- Symfony电子商务
http://zhilihe.com/content/symfony%E7%94%B5%E5%AD%90%E5%95%86%E5%8A%A1%E9%A1%B9%E7%9B%AE%E6%80%BB%E7 ...
- python中split函数的使用
最近学习python,对split函数做了下总结,内容如下:
- c#线程创建
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...