xml全称Extensible Markup Language(可扩展标记语言),它是Standard Generalized Markup Language(标准通用标记语言)的一个子集.
SGML:80年代IBM提出==>GML(各文档之间共用属性)==>SGML(ISO提出)==>XML(W3C认为SGML不适合WEB,所以提出XML)
SGML,HTML和XML:
SGML是在WEB发明之前描述文档资料的通用语言,定义标记语言的元语言.HTML跟XML都是从SGML发展而来的标记语言.HTML是在SGML顶一下的一个描述性语言.只是SGML的一个应用.其DTD作为标准被固定下来.而XML是SGML的一个简化版本.
XML文档:都有一个逻辑结构和一个物理结构.
物理:文档由entities(实体)的存储单元组成.文档开始于root或document entity.entity可以分为parsed跟unparsed数据.
良好的XML文档形成一种层次树结构.这个树的树根就是document entity.
XML文档的根元素称为Document element
逻辑上主要分5个部分:1.XML声明 2.文档类型声明 3.元素 4.注释 5.处理指令
XML元素:分四种
1.空元素: <student/>
2.带属性的空元素: <student name="张三" age="14" />
3.待内容的元素:
<student>
学生信息
<name>张三</name>
<age>14</age>
</student>
4.带内容跟属性的元素:
<student name="张三">
<age>14</age>
</student>
XML元素内容中字符数据不能有"&","<","]]>",在CDATA段中,数据可以是不包括CDATA段的结束定界符的任意字符串.
如果想输入这些字符串可以用引用:
字符 字符引用(十进制) 字符引用(十六进制) 预定义实体引用
< < < <
> > > >
" " " "
' ' ' '
& & & &
CDATA段eg
<?xml version="1.0" ?>
<java>
<![CDATA[
if(a>b && c<b)
max = a;
]]>
</java>
这段代码就可以完全显示出来
XML注释跟HTML一样: <!-- 这是注释 -->
XML处理指令(PIs):允许文档中包含由应用程序来处理的指令。
格式:<? 这是处理指令 ?> eg:<?xml-stylesheet href="hello.css" type="text/css"?>
DTD:关键字全部得大写
外部DTD文件语法格式:<!DOCTYPE 根元素的名字 SYSTEM "外部DTD文件的URI">
其中SYSTEM代表文档使用的是私有的DTD文件.
PUBLIC为公共的格式:<!DOCTYPE 根元素的名字 PUBLIC "DTD的名称" "外部DTD文件的URI">
注:当我们使用外部DTD文件的时候用<?xml version="1.0" encoding="gbk" standalong="no">其中standalong="no"表示依赖外部文档
DTD结构:元素类型声明,属性表声明,实体声明,记号声明等构成.
元素类型声明:<!ELEMENT 元素名称 元素内容说明>
eg:
<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE company [
<!ELEMENT company (employee)>
<!ELEMENT employee (name.age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>
<company>
<employee>
<name>张三</name>
<age>14</age>
</employee>
</company>
其中DTD文件定义元素说明必须先写NAME再写AGE
实体:一般实体(general entity)和参数实体(parameter entity)
一般实体是在文档内容中使用的实体,而参数实体则是在DTD中使用的已分析实体
一般实体声明格式:<!ENTITY 实体名 "实体内容"> 引用实体方式:"&实体名"
eg.
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE website[
<!ELEMENT website (name,copyright)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT copyright (#PCDATA)>
<!ENTITY name "程序员之家">
<!ENTITY copyright "©2005, 程序员之家, All Rights Reserved">
]>
<website>
<name>&name;</name>
<copyright>©right;</copyright>
</website>
然后在浏览器中可以看一下实际效果:用实体内容来替换实体引用
参数实体声明格式:<!ENTITY % 实体名 "实体内容">只能在DTD中声明
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE website SYSTEM "website.dtd">
<website>
<name>&name;</name>
<copyright>©right;</copyright>
</website>
website.dtd
<?xml version="1.0" encoding="gb2312"?>
<!ELEMENT website (name,copyright)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT copyright (#PCDATA)>
<!ENTITY % name "程序员之家">
<!ENTITY copyright "©2005, %name;, All Rights Reserved">
其中"%name"代表"程序员之家"
属性表声明:<!ATTLIST 元素名 属性名 属性类型 缺省声明>
eg.
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE bbs[
<!ELEMENT bbs (article*)>
<!ELEMENT article (title,author)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ATTLIST author ip CDATA #REQUIRED>
]>
<bbs>
<article>
<title>关于属性表声明的问题</title>
<author ip="192.168.0.111">张三</author>
</article>
<article>
<title>关于XML应用的问题</title>
<author ip="192.168.0.123">李四</author>
</article>
</bbs>
#REQUIRED:代表必须包含IP属性
#IMPLIED:可有可无IP属性
记号声明:
一种是使用MIME类型:<!NOTATION gif SYSTEM "image/gif">
另一种是使用URI路径,指外部处理程序的位置:<!NOTATION gif SYSTEM "iexplore.exe">