以下部分内容取之w3school
XML(Extensible Markup Language)可扩展标记语言
- 与HTML的区别
HTML(Hyper Text Markup Language)指的是超文本标记语言,一般是用来描述网页,主要用于显示,而XMl则是用于存储数据和传输数据,主要在运用上有所区别
- XML仅仅是纯文本
XML是不作为的,它就跟txt文件一样,起着存储数据和标记数据的功能,必须要用外部语言去处理它才可以
- XML没有预定义
XML不需要去引用任何文件,它就在那里,所见及所得,也因此,它可以自己定义标签,所以他也具有自我描述性
- XML兼容性
前面提到XML是自己不作为的,需要用其它语言处理,好在它所定义的格式,受到了各类编译环境,各种开发平台所支持,所以,它能轻易在各个系统之间传输,可以说非常方便
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
以上代码取之于w3school
第一行介绍了xml的版本以及采用的编码方式,现在阻碍兼容性的一大障碍就跟编码方式有关
"<note>"称之为元素,由于处在第一个,所以叫做根元素,每个元素都必须有一个对应的结尾"</note>"(HTML可以省略关闭标签,但是XML省略是非法的),值得一提的是,每个XML文档必须有且只有一个根元素,其它的都是它的子元素,总结起来,它就是一种树形结构,存在根节点,也存在叶子节点,好像提醒我了要看看XML文件存储的物理结构和逻辑结构了。
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
再看一段代码,这里面出现了新内容
<book category="COOKING">
这里的catergory就是元素book的一个属性(property),而COOKING就是属性值,属性值必须加引号,这看似简单,其实在实际操作的时候,如何在现实和抽象转换的时候,把元素和属性区分开将是一个难点,换句话说,你可能把元素和属性搞混,比如这里,把catergory看成一个book的子元素你觉得如何。
w3school表明了他们的态度,少用属性,让我们看看他们的利用:
- 属性无法包含多重的值(元素可以)
- 属性无法描述树结构(元素可以)
- 属性不易扩展(为未来的变化)
- 属性难以阅读和维护
不愿意去思考这个问题了,因为这真的就像关系数据库在设计的时候,要识别属性和元素一样难以捉摸,我也没有找到很好的办法去解决这种问题,可能这是语言天生的魅力,还是交给语言学家吧。
一般是不会在XML里面做bool运算的,但是如果你非要做,也提供了实体引用:
< | < | 小于 |
> | > | 大于 |
& | & | 和号 |
&apos; | ' | 单引号 |
"; | " | 引号 |
<message>if salary < 1000 then</message>
XML里面还可以添加注释
<!-- This is a comment -->
我突然忘了HTML怎么注释的了,写的少,给忘了
接下来注意一下元素的命名规则和命名习惯
- 名称可以含字母、数字以及其他的字符
- 名称不能以数字或者标点符号开始
- 名称不能以字符 “xml”(或者 XML、Xml)开始
- 名称不能包含空格
这其实真的需要注意,因为有些隐藏的bug就出自于这种,让你难受。
在观看w3school的时候,我发现他们提到了可扩展,就是你原先的xml文件,在被修改添加元素之后,仍然可以运行,这显然很棒,但是这一部分功劳应该归于程序,因为,如果程序真的不在乎你的标记,按顺序读取,完了,崩溃again
<file type="gif">computer.gif</file>
这个功能又和HTML重了,就是提供了不属于数据部分的信息
- XML的验证
让我们看看w3school如何定义形式良好的XML文档
- XML 文档必须有根元素
- XML 文档必须有关闭标签
- XML 标签对大小写敏感
- XML 元素必须被正确的嵌套
- XML 属性必须加引号
这里面提到了DTD验证,把这个问题想简单点,就是让你的文件更规范然后做了一个预定义,其实我并不喜欢这样,因为这样子又让程序变得臃肿起来,说好的不预定义的,它存在的合理之处在于它可以验证你的XML是否是正确兼容的,这对于程序本身是加了一个中间件,除非做的非常好用,不然相信我,别用了吧,要是把DTD写错,你不是更难受