??XML
Extensible markup language,可扩展性标记语言,通过信息进行标记,计算机根据标记进行识别处理。XML和HTML便是两种相似而又各有千秋的标记语言,两者有着类似的功能和定义。
??Xml的基本结构
1、创建XML
简单的声明或者加上XML的版本、字符编码,告诉浏览器这个文件应该按照XML规则进行解析。
<?xml version=”1.0” encoding=”utf-8”?>2、创建根元素
根元素的开始和结束标记用于包围 XML文档的内容。一个文件只能有一个根元素
<?xml version=”1.0” encoding=”utf-8”?> <flower> …… </flower>3、命名元素
以flower作为根元素,给元素起好名字,根据名称定义相应的DTD或者schema。
<?xml version=”1.0” encoding=”utf-8”?> <flower> <flowername>Rose</flowername> <price>10 RMB</price> </flower>
??XML的特点
相较于HTML而言,XML可自行创建元素,且大小写区分,精确的表达自己的信息,文档看作仅由标题和段落组成(HTML的结构)。为提高效率,可定义好一定数量的元素,然后统一使用(可在DTD或者schema中定义元素)。
XML主要用于传输和存储信息,焦点是信息的内容,而HTML主要着重于显示信息,焦点是信息的布局和显示,在识别信息方面不如XML。由此可以看出XML并不是为取代HTML而生的,两者同为标记语言,好比两姐妹一高一矮,一胖一瘦,但彼此发展目标不同,所以都有各自存在的必要和意义。
??结构良好的XML
DTD的引入:
目的在于对文档的格式进行约束,确定标记、元素、属性和实体等内容,使得发送方和接收方对消息有相同的理解。(为了实现验证,必须在 XML文档的顶部附近包含文档类型(DOCTYPE)。
内部DTD:把DTD信息写入XML文档中
<?xml version=”1.0” encoding=”utf-8”?> <!DECTYPE 花 <!--花为XML根名--> [ <!ELEMENT 花(种类,颜色)> <!--若包含子元素,则按顺序写好--> <!ELEMENT 种类(#PCDATA)> <!--若不包含子元素,只包含文本内容则用#PCDATA表示--> <!ELEMENT 颜色(#PCDATA)> ]> <花> <种类>玫瑰</种类> <颜色>红色</颜色> </花>
外部DTD:把DTD写好另存档,在需要使用的XML文档中添加引用,便于共享和扩展。
<!DECTYPE 花 SYSTEM “flowerDTD.dtd” <!--flowerDTD.dtd 为该DTD的地址--> [ <!ELEMENT 花(种类,颜色)> <!--若包含子元素,则按顺序写好--> <!ELEMENT 种类(#PCDATA)> <!--若不包含子元素,只包含文本内容则用#PCDATA表示--> <!ELEMENT 颜色(#PCDATA)> ]> <花> <种类>玫瑰</种类> <颜色>红色</颜色> </花>
根元素到底叫<花>还是<flower>,是先写种类还是颜色,都是由DTD定义的。如果与DTD定义的顺序、名称不一致,便会报错为不合法XML。
??XML的主要应用
用于传送即携带数据信息:
即说明数据是什么,而非表现或者展示数据。XML定义结构、存储信息、传送信息。下例为Max发送给Jay的email,存储为XML。
<?xml version="1.0"?>
<email>
<收件人>Jay</收件人>
<发件人>Max</发件人>
<邮件内容> please attend the meeting on time ! </邮件内容>
</email>
上述例子中使用的仅是纯粹的信息标签,存储了这封邮件的所有相关信息。
编写配置文件:
由于xml携带数据方便,非常方便的通过Java的API来读取,同时可跨平台传递数据,故常用作配置文件对数据进行包装和传输。所以我们在用vs进行编程时,config文件中的代码有没有似曾相识的感觉?XML无处不在!
应用于数据库:
关系数据库对我们而言并不陌生,机房收费系统实践中也初步尝试使用配置文件访问数据库。这样做的好处主要在于当数据库发生改变,比如把sql server数据库改成了oracle,则只需要更改配置文件即可。
另外,还可以完全基于XML来实现对数据库的管理和操作。例如,当我们需要管理的信息是一个学生名单,每个记录是一个学生的基本信息,包含姓名、专业两个字段。这个名单在关系数据库中就是一张再简单不过的表了,而在XML中,我们需要下面这样一个DTD:
<!DOCTYPE DOCUMENT [ <!ELEMENT DOCUMENT (Info)*> <!ELEMENT Info(name,major)> <!ELEMENT name(#PCDATA)*> <!ELEMENT major(#PCDATA)*> ]> <Info> <name>钟艾伶</name> <major>计算机</major> </Info>
由此,我们就有了一个存储学生信息的XML文件,类比于数据库中的一张表,也简单的体现了XML与数据库之间的交互。
但值得注意的是,XML并不适用于大型数据库,由于XML自身的树结构特点,应用DTD每次都要对文档和使用的DTD进行分析获得数据,这样的操作相对于关系型数据库的处理速度而言,是非常慢的,且系统开销很大。而XML的特点在与它的可读性,由上例子可知,用户可以阅读和编辑XML文件以实现修改数据等操作,但这也造成了它可被不同用户修改并发访问,这一点也会造成问题。
鄙人愚见,欢迎诸位多多批评指教。