一、XML简介
提起XML(Extensible Markup Language 可扩展标记语言),相信业内人士都不会陌生,作为一种计算机技术出现不过是短短几年的事情,以其简便性而颇得人心。
我们来看一个简单的例子:
<?xml version=”1.0”?>
<books>
<book category=”reference”>
<author>Nige Ress</author>
<title>Sayings of the Century</title>
</book>
<book category=”fiction”>
<author>Evelyn Waugh</author>
<title>Sword of Honour</title>
</book>
</books>
从上图的数据中,我们可以看到,这样简单的几行数据,清晰的描述了两本书的信息,包括书的种类,作者以及标题等信息。由于XML可以理解为一种格式化的文本,因此,对XML而言,是没有操作系统的概念的,只要支持文本处理的机器,就可以从XML中获取所需的数据,而且,与一般文本文件不同的是,XML本身具有一定的数据结构,借助读取XML格式文档的技术(例如传统的SAX(Simple API for XML),和DOM(Document Object Model)解析器),包括后面要介绍的在.NET中对XML的支持,可以方便快捷的处理XML中的数据。
XML本身没有太多的语法要求,只要满足标记一一对应,不嵌套使用就好。另外,为了满足一些对数据本身的完整性和安全性的要求,可以使用一些相关的技术例如DTD( Document Type Definition 文档对象模型),XDR(XML Data Reduced)以及XSD(XML模式定义语言)可以对XML提供有效的验证,从而保证了XML中数据的完整性。
二、.NET中的XML技术
.NET作为微软公司推出的新一代开发模式,对XML提供了极其完善的支持。可以这样说,.NET不关提供了对XML的支持,其核心也和XML紧密结合。我们可以从下面几个方面来看看:
1、传统解析方式
同其他的各项编程语言一样,.NET提供了一套十分完善的类库,来支持在.NET中使用各种允许的语言(包括C#,VB.net,托管C++等),来编写对XML进行读写的程式。
注:这些类位于System.Xml命名空间下,支持以SAX模式和DOM模式来解析XML文档。
2、.NET中的高级解析方式
除了,支持传统的解析方式外,.NET中还支持一些以.NET中特有的技术来解析XML数据,比如ADO.NET中广泛使用的DataSet(数据集在断开缓存中存储数据。数据集的结构类似于关系数据库的结构;它公开表、行和列的分层对象模型。另外,它包含为数据集定义的约束和关系。可以把它理解为数据库在内存中的表现形式),就提供了ReadXml(将 XML 架构和数据读入 DataSet)和GetXml(返回存储在 DataSet 中的数据的 XML 表示形式。)以及WriteXml(从 DataSet 写 XML 数据,还可以选择写架构。)等一些解析XML的方法。
通过使用这些方法,可以有效的在.NET中与XML数据进行交互。
3、XML验证
正如前面提到的,现在对XML的验证,主要有3种方式:DTD,XDR模式和XSD模式。而在.NET中提供了对这3种方式的支持,其中XSD(W3C制定的XML模式定义语言)模式,.NET Framework提供了广泛的支持。
当然,这并不表示DTD和XDR模式就与.NET Framework格格不入,在VS.NET中包含一些工具,这些工具可以帮助我们将XDR模式转换为XSD格式。
由于XSD标准很长而且很复杂,作为一个在.NET Framework中广泛支持的标准,VS.NET为我们提供了几种个容易创建一个XSD模式的工具,我们可以任选一种创建所需XSD模式:
1)使用XML Designer从头创建时间;
2)使用Server Exploreer从一个数据库中创建;
3)使用XSD Generator从一个XML文档或XDR模式中创建;
此外,XSD模式,本身也遵循XML的语法,因此我们也可以使用Microsoft的SOM(Schema Object Model模式对象模型)在内存中对SOM对象树修改,并将此模式写入磁盘文件,以达到动态修改XSD模式的目的。
4、XML串行化
当然XML的作用不止如此,当创建一个分布式系统时,一个必须解决的问题时如何获得从系统的一个部分到另一个部分的对象。
为了满足这项需求,.NET Framework实现了一种基于XML的串行化机制,您可以将一个对象串行化为XML格式,从而它的所有公共域和属性都将以XML的格式写入。然后您就可以将这个XML数据发送到您希望的任何地方,因为XML是一个开放的、等到广泛支持的标准。
同时,在接收端应用程序可以并行化该XML数据,从而可以在内存中重建该对象。
5、.NET中的配置
上面介绍了在.NET Framework中使用XML的一些常规技术,其实.NET本身也是和XML息息相关的,在.NET Framework中广泛的使用了XML来进行应用程序的配置。
主要有下面3种:
1)应用程序配置文件
这类配置文件表示专门针对一个单独的应用程序的设置,绑定到程序集上的信息,远程对象的配置等。例如某个应用程序是一个标准的.exe应用程序,则该应用程序的文件名再加上一个.config扩展名。
对于ASP.NET的Web应用程序,培植的详细信息将存储在一个名为web.config的文件中。一个服务器可以有多个web.config文件,每一个Web.config文件将存在于应用程序的根目录或其子目录下。
2)机器或服务器配置文件
这是一个名为machine.config的XML文件,用于进行系统范围的配置。
3)安全配置文件
这类配置文件被Framework安全系统用来判定一个程序集接收到什么样的许可。共有3种可配置策略级别:企业级、机器级和拥护级。
要读取或修改这些配置信息可以使用任何标准文本编辑器、XML分析器,也可以使用.NET Framework中提供的一组用户读取配置文件和扩展配置文件的API。
三、XML技术的将来
虽然XML技术的使用已经使于很多领域,但XML技术的优越性决定其必然可以使用于更多的领域中,例如在下一代的数据库技术中,就会出现XML数据库,这种数据库不同于现有的关系性数据库,可以允许同一类的数据中包含的信息量不同。
比如,一个图书库的数据资料,假设有2本书,我希望能保存书名、作者,出版社,价格以及页数信息,按照现有的关系型数据库,可能的存储方式为:
Name
Author
Publish
Price
pageNo
1
.Net Xml高级编程
Wrox
清华大学出版社
75
676
2
XML高级编程
Wrox
机械工业出版社
95
944
如果其中一本我希望能保存书名、作者,出版社,价格以及页数信息,而另外一本我只希望保存书名、作者以及价格信息。
按照现有的关系型数据库,可能的存储方式为:
Name
Author
Publish
Price
pageNo
1
.Net Xml高级编程
Wrox
清华大学出版社
75
676
2
XML高级编程
Wrox
NULL
95
NULL
从上面的图中我们可以看出使用现有的关系型数据库中的第二行数据中有些无用的字段publish和pageNo,它们没有有效的值,但仍然使用NULL表示占用了一定的数据资源。
现在同样的情况下,我们来看看使用XML来表示这些信息的方式:
第一种情况: 第二种情况
<?xml version=”1.0”?>
<books>
<book>
<name>.Net XML 高级编程</name>
<author>wrox</author>
<publish>清华大学出版社</public>
<price>75</price>
<pageNo>676</pageNo>
</book>
<book>
<name>XML高级编程</name>
<author>worx</author>
<publish>机械工业出版社</public>
<price>95</price>
<pageNo>944</pageNo>
</book>
</books>
<?xml version=”1.0”?>
<books>
<book>
<name>.Net XML 高级编程</name>
<author>wrox</author>
<publish>清华大学出版社</public>
<price>75</price>
<pageNo>676</pageNo>
</book>
<book>
<name>XML高级编程</name>
<author>worx</author>
<price>95</price>
</book>
</books>
从这两个图中,我们可以看到使用XML描述数据,同样提供了我们所需的信息,但在第二种情况下没有包括那些不需要的信息。
当然,这里只是描述了使用这种使用XML来保存数据的一点点优势,要把它应用到数据库处理技术中,肯定会有很多问题,不过,微软公司已经在作这方面的事情,让我们拭目以待。
另外,作为XML技术未来应用的一个大方向--XML Web Services也是不可不提,名字上看就知道这项技术和XML的紧密程度了,要使用Web服务是离不开XML的,从WSDL(Web服务描述性语言)到SOAP(Simple Object Access Protocol)都是使用XML来进行描述的。
不过基于Web服务安全性的考虑,目前各大行业巨头正在制定基于Web服务的安全性协议,相信不久的将来Web Services也会得到相当广泛的应用。