最近看书,都喜欢问一下自己“什么”,就像以前在公司做WPF的session的时候,我总喜欢在ppt的第一页上放上What的标题“What is DataBinding”“What is Style”,“What is Template”。然后现在我也想问一下“What is XML”,w3schools.com给出的描述是:
· XML stands for EXtensible Markup Language
· XML is a markup language much like HTML
· XML was designed to carry data, not to display data
· XML tags are not predefined. You must define your own tags
· XML is designed to be self-descriptive
· XML is a W
我的理解是:XML本身是一种用于描述数据表现的一种形式,它用标签表示数据的意义,标签可以通过DTD,XSD实现自定义标签,实现数据的自我描述。同时通过基于XML的XSL,CSS,XLink,XPointer等技术,实现了基于XML数据的显示、链接等技术,这实现了类似HTML的功能。
因为HTML远早于XML而出现,而且现在HTML产生了巨大成功和广泛的应用,为什么还需要使用XML呢?关于XML和HTML的区别于联系网上已经很多了,但是我个人感觉最主要的一点是:HTML是将数据和显示标签混合在一起的,这就产生了太多的紧耦合;并且HTML没有专门为数据的存储定义标签,或许有人说可以用表格来实现,但是如果这些数据不是要以表格的形式来显示呢?难道要再定义一种标准来转换表格形式到其他的一种形式吗?在当今不同企业之间,企业内部之间的通信要求的迅速发展,SOAP的流行,HTML显然不能满足这种数据传输的要求。而XML主要设计目的就是为了实现数据的存储,传输,最后被识别。并且它可以自定义标签,实现完全面向自己企业内部的数据传输标准;如果要和其他企业通信,也可以功能定义一种标准(其实就是一个相同的DTD或是XSD),甚至是同一个行业定义一种标准,这样就可以很容易的实现不同企业之间的兼容通信。相应的w3schools.com对XML和HTML的区别也有类似的简短的描述:
XML is not a replacement for HTML.
XML and HTML were designed with different goals:
XML was designed to transport and store data, with focus on what data is.
HTML was designed to display data, with focus on how data looks.
HTML is about displaying information, while XML is about carrying information.
XML和HTML都起源于SGML(Standard Generalized Markup Language),或者说都是SGML的子集。因为SGML的复杂性,才出现了相对精简的HTML和XML规范。他们都受W
XML相关技术:
DTD(Documentation Type Definition,文档类型定义):定义XML文档中元素的结构和内容等。
XSD(XML Schema Definition,XML模式定义):同DTD,也是用于定义XML文档的结构和内容,不同的是它本身也是XML格式,因而更利于解析。
CSS(Cascading Style Sheets,级联样式表):定义XML文档和HTML文档的显示格式或样式。
XPath:用于在XML文档中定位查询的语言。
XSL(Extensible Stylesheet Language,可扩展样式语言):定义同CSS,用于定义XML文档的显示格式或样式,不同的是XSL是专门为XML所设计的。
XLL(Extensible Linking Language,可扩展链接语言):包括XLink(XML Linking Language,XML链接语言)定义一个文档如何与另一个文档的链接。XPointer(XML Pointer Language)定义XML文档各部分的寻址方案。
XML相关软件:
XML浏览器:
最方便的就是用IE等浏览器打开了,另外也可以通过notepad等文本编辑软件打开,不过这种编辑器只能显示里面的数据,不过做一些适合浏览XML数据的格式化,它们也不支持外部链接的文件。
XML编辑器:
同样最方便的编辑器就是notepad等编辑软件,所有的电脑上都有这个软件(我是指在XP等操作系统上)。不过在这样不具格式化的软件里的编辑比较痛苦 J 。专门的XML的编辑器有XML Spy和XMetal等软件。
XML解析器:
它主要实现的是检查XML文件在结构上是否有错误,然后提取出XML文件中的标记,供应用程序处理。如果把XML比作数据库中的文件,XML解析器就好比数据库管理系统,不过相对数据库管理系统来说,XML解析器还要逊色一些。它分为非验证的和验证的。主要的解析器有:IBM XML4JApache Xerces,Sun Project X, Microsoft MSXML, Oracle XML Parser for Java, James Clark XP等。
XML文档
XML文档结构:
1. XML以声明语句开头,在之前不能有任何形式的字符。
<?xml version=”
Version表示XML的版本号;standalone表示文档是否附带DTD文件,默认为no;encoding表示文档的编码方式,默认是“UTF
2. 处理指令
包含附带XML文档的文件,以使XML解析器对相应的XML文档作出正确的处理。如:
<?xml-stylesheet type=”text/css” href=”css文件位置”?>定义css文件
<?xml-stylesheet type=”text/xsl” href=”xsl文件位置”?>定义xsl文件
3. DTD样式
定义和XML文档相关的DTD文档,以是改DTD文档对改XML文档作出验证。
<!DOCTYPE 根元素名 SYSTEM/PUBLIC “dtd文件名”>
4. 注释
包含在<!-- 注释内容 -->
在注释内容中不可包含-->字符,且注释也不可放在声明前或是标记中(<>中),并且注释也不能嵌套。
5. 元素、属性、文本
元素、属性、文本是XML文档中最主要的内容,它们用于存储和表现数据。
<element-name attribute-name=”attribute-value”>text-content</element-name>
元素名和属性名可以包含字母,数字以及其他一些合法的字符但不能以数字或下划线开头,且名称中不能包含空格或是任何形式的xml(大小写都不可)的字符开头。对一些特殊符号,需要用实体符号替代:如< à < > à > & à & “ à " ‘ à '等。并且属性的值必须包含在双引号之间,复杂的属性值需要通过子元素来实现,即元素可以实现嵌套。不同于HTML会把多个相邻空格忽略为一个,XML不处理空格,也就是它会把空格保持原样的显示出来。
6. CDATA
CDATA是Character Data的简称。它用于直白的显示任何特殊的非特殊的字符,除了“]]>”字符。它的存在简化了对含有许多特殊字符的文字的写法。如:
<![CDATA[ 要直接显示的内容 ]]>
7. 实体
相当于C语言中的宏定义。可以先定义一个实体,然后通过 “&实体名;” 的形式来引用该实体。如上面提到过的特殊字符便是XML中预定义的实体,也可以通过Unicode或十六进制的形式来显示字符。如 “<data>©</data>”。它主要用于显示那些不能不能从键盘中敲出来的字符。引用形式: &#Unicode码; 。
我不知道可不可以在XML文件中自定义实体,不过在DTD文件中可以定义实体,这些自定义的实体可以在DTD文件中引用,没有验证过是否在XML文件中也可以引用这些实体,我猜测应该是可以的,由于找xml spy软件比较麻烦,所以还没验证。如果有谁知道,望告知~~
XML文档具有严格的格式要求,它严格区分大小写,每个元素必须;被关闭,并且关闭的顺序必须和定义顺序保持一致,这特别要注意含有子元素的元素。任何一个格式定义良好的XML文档必须指包含一个根,它跟在;处理指令或是DTD文件定义的后面,如果没有处理指令或是DTD文档,则它跟在xml文件声明的后面。
xml存在两个特殊的属性:xml:space属性和xml:lang属性。xml:space有两个值:”preserve”和”default”用来控制空格的显示方式(个人感觉这个属性是没有大的必要,因为xml默认就是按原来的方式显示空格的,既然这样preserve和default这两个值的效果应该是一样的,那用这个属性做什么呢,是为了做一个提醒的标记吗?或许应该是理解成不同的解析器对空格的解析不同,所以会存在这个属性作为显示定义解析器对格式的处理方式。)。xml:lang用来控制语言。这两个属性都会应用于它们的子元素。
命名空间:
XML通过命名空间来解决命名冲突的问题,这类似c++语言中的表达方法。命名空间通过xmlns属性来定义,可以是xmlns:Diwore=”http://www.diwore.com/” 也可以是xml=”http://default.com/”来实现命名空间的定义,前者是一个名为Diwore的命名空间,因而其元素因加上Diwore的前缀,后者是一个匿名的命名空间。注意命名空间后面的地址只是作为一个标记来用,它可以不存在。
一个完整的XML文件的例子:
File: bookstore.xml
<?xml version=”
<!DOCTYPE bookstore SYSTEM “bookstore.dtd”>
<bookstore>
<book category="CHILDREN">
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title>Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
File: bookstore.dtd
<?xml version=”
1.0”
?>
<!ELEMENT bookstore(book)*>
<!ELEMENT book(title, author, year, price)>
<!ELEMENT title(#PCDATA)>
<!ELEMENT author(#PCDATA)>
<!ELEMENT year(#PCDATA)>
<!ELEMENT price(#PCDATA)>
<ATTLIST book category CDATA #REQUIRED>
参考:
《XML完全开发指南》 科学出版社 孙更新 裴红义 杨金龙 编著
http://en.wikipedia.org/wiki/XML
进来休假,稍微看了一下XML的内容,不知道这种东东放在首页是否合适。
如果有很多人都认为不合适的话,就把这些弄到其他地方去好了。