我们这学期的XML已经上了五周了,但是感觉老师就像什么都没讲,还是要靠自己看书,所以我想趁着刚记下来的东西还没有忘,赶紧做个笔记。
XML基础知识
XML(eXtensible Markup Language,可拓展标记语言)是为了解决HTML不擅于处理数据的问题而开发出来的一种规范,因此,作为HTML的补充(不是替代,是补充),它就是专门用来处理数据的。
XML的特点
- 可拓展性(Extensibility)。XML可以使用自己创造的标签,只要符合基本的语法,就是合格的XML文件,可以说是相当开放了。
- 灵活性(Flexibility)。XML作为单纯的文本文件,可以轻松地结合各项技术,这让它有了很大的发挥空间。
- 自描述性(Self-describing)。因为便签都是自己定义的,所以非常容易读懂,同时计算机也能处理。
- 简洁性(Simplicity)。这是和SMGL相比而言的,嗯,然而我并不知道SMGL是什么 = =
XML规范
XML声明
声明可以没有,但如果有,必须是第一行!
一般格式:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
其中,version指的是当前XML的版本号,这个属性是必须要有的。encoding是编码方式,这个可以没有。standalone表示这个文件是独立的还是引用了其他的外部文件,这个也可以没有,解析器会自动判定。
XML处理指令和注释
处理指令一般写在文件开头,格式为:
<? target-name data ?>
注释和HTML一样,也是:
<!-- 注释 -->
要注意的是,注释要占单独的一行!不能写在标签里面,注释里面也不能嵌套注释!
XML中的元素与属性
在XML中,元素(Element)是最基本的组成单元,基本的语法如下:
<element_name att1="val1" att2="val2"> --开始标记
content --内容
</element_name> --结束标记
元素通常由开始标记和结束标记进行界定,开始标记中可以包含一些相关的属性(如att1);在开始标记和结束标记之间的数据被称为元素的内容。元素中可以包含文本和子元素。
开始标记和结束标记必须相互对应,嵌套的顺序也必须对应!
属性不能独立于元素存在,通常以名-值对的形式出现,属性的取值必须加上引号(单引号或双引号)。
属性和元素的命名规则:
- 元素和属性的名称必须以字母、下划线( _ )或者冒号(:)开头
- 名称的其余部分可以是字母,数字、横线(-)、下划线( _ )、点号( . )和冒号(:)
- 元素名称大小写敏感
- 名称长度没有限制
值得注意的是,虽然子元素和属性都可以用来刻画元素某个方面的特征,但最好只用属性来表示一些无关的数据,因为子元素的值更容易修改,这样更容易对XML的数据进行操作。
XML文本内容和CDATA段
XML虽然允许使用任意字符,但由于"<"、">"和"/"这些字符本身具有特殊的含义,所以是不能随便使用的,一般来说,要使用的话有两种方式:
(1)使用预定义实体,也就是用事先定义好的字符串来代替某些特殊字符。
如"<"="<",">"="gt","&"="&"等等
但是这种方法一方面不太方便,另一方面降低了XML的可读性。
(2)使用CDATA段。CDATA可以理解为一个标志,告诉解析器CDATA段中的文本没有XML标记,换句话说,解析器不会对段中的文本进行解析。格式为:<![CDATA[......]]>
<content><![CDATA[an XML character>]]><content>
命名空间
命名空间(namespace)在计算机各个领域都有着广泛的应用,主要是用来表示标识符(identifier)的上下文。
一般用来解决函数和变量等重名的问题,当命名冲突时,只要把它们放到不同的命名空间就可以解决了。
命名空间的声明和使用
命名空间的声明类似属性:
<namespace:element-name xmlns:namespace="url">
element_content
</namespace:element-name>
namespace:element-name表示这个元素属于namespace这个命名空间,但namespace并不是命名空间的名字,仅仅只是一个符号化的表示,URL才是命名空间的全称。
在同一个命名空间中,元素或属性的名称必须唯一,但不同的命名空间可以嵌套。
<?xml version="1.0">
<ns:company xmlns="http://www.company.com">
<ns:company-info>
<ns:name>Company</ns:name>
<ns:address>Baker Street 221B</ns:address>
<ns1:employee xmlns="http://employee.com">
<ns1:name>Sherlock</ns1:name>
<ns1:job>detective</ns1:job>
</ns1:employee>
</ns:company-info>
</ns:company>
在这个例子中,有两个name元素,但是由于它们属于不同的命名空间,所以不会发生冲突。由于每次都需要输入命名空间的前缀,显得非常麻烦,XML规范中提供了一种缺省机制,当省略命名空间前缀时,默认定义命名空间的元素内的内容都属于该命名空间,根据缺省机制,上面的例子可以简化为:
<?xml version="1.0">
<company xmlns="http://www.company.com">
<company-info>
<name>Company</ns:name>
<address>Baker Street 221B</ns:address>
<ns1:employee xmlns="http://employee.com">
<ns1:name>Sherlock</ns1:name>
<ns1:job>detective</ns1:job>
</ns1:employee>
</company-info>
</company>
文档表示的含义没有变化,然而修改后显得更加简洁,甚至ns1也可以改为局部缺省的命名空间,这样使得编写文档变得更加轻松。