学习笔记 -针对- 孙鑫XML网页编程开发详解(上)
上一篇 / 下一篇 2008-09-02 23:16:43 / 个人分类:学习笔记
XML处理器 和 应用程序
xml 是标准通用标记语言(sgml)的子集
sgml功能非常强大, 是可以标记语言的元语言
xml在描述内容的同时能够突出对结构的描述,从而体现了数据和数据之间的关系
w3c , w3 c : world wide web consortium。以开发论坛的方式来促进开发互通技术。(规格、指南、软件、工具)。他发布了上100份web技术规范,指导着web向前发展。
任何组织缴纳一些费用,可以加入它。由于它的权威性,发布的标准经常称为事实的标准。
一项技术称为W3C的推荐标准,需要7个步骤。
html和xml同为标记语言,但处于不同的层次。xml是可以创建标记语言的元语言。
xml考虑到了国际化的问题,采用通用字符集 UCS , universal character set
HTML和XML都是从sgml发展来的。xml的设计出发点:取SGML优点,去掉复杂部分以保持轻巧,可以在web上工作。
xml、html、sgml都将继续用于其适合的地方。
快速出版数据:html
数据需要长期使用,并需要更多的结构:xml
对于高端的、复杂结构的出版应用:sgml
《xml和html的比较》
xml:显示和数据分开(有数据和数据间的关系)
xml:文档的数据库化、数据的文档化
html:数据和显示格式合在一起
XML :一份数据
xml的文档格式要求非常严格;
1.开始标签一定要有结束标签 如:<p></p>
2.空元素标签一定要用/关闭 如 : <br/>
3.标签大小写敏感
4.标签的嵌套要严格,像JAVA一样就对了。html可以<p><i></p></i>
5.标签的属性的属性值,必须用""或''引起(为了引号里还有用引号)。数字也要加。html不严格
6.根元素只能一个????(<table></table>)
编辑工具:(语法上色、检查语法严格性、)
记事本
UE
xmlspy:编辑、校验、预览等功能,支持所见即所得、强有力的样式表设计、UNICODE多字符集、
《XML文档》
结构:逻辑结构、物理结构。
《XML声明》: <?xml ?>之间,版本信息必选、其他2个可选.<?xml和?>都没有空格的。必须位于文档第一行,前面不能有任何字符。
格式:<?xml 版本信息 [编码信息] [文档独立性信息]?>
<?xml version="1.0"?>
加版本信息,是因为,xml版本之间差异比较大。如果版本信息不被支持的话,那么后面的就不解析了。浏览器会报错:
The XML page cannot be displayed
Cannot view XML input using style. sheet. Please correct the error and then click the Refresh button, or try again later.
--------------------------------------------------------------------------------
Invalid version number. Error processing resource 'file:///E:/11.xml'. Line 1, Position 16
<?xml version="1.1"?>
---------------^
编码声明:encodeing=""
默认UTF-8,用中文: encoding="gb2312"
独立文档声明
不依赖外部文档 standalone="yes"
依赖外部文档 standalone="no"
《文档类型声明》
由于文档中的标签都是自己定义的,为了让别人知道,DTD-document type definition-DTD不要求遵循XML规则,通常用.DTD作为扩展名。
通过文档类型声明,指出XML文档所用的DTD。
文档类型声明有两种形式.一种是声明DTD在一个外部的文件中,如下: <!DOCTYPE greeting SYSTEM "hello.dtd">
一种是直接在XML文档中给出DTD,如下: <?xml version="1.0" encoding="gb2312" standalone="yes"?> <!DOCTYPE greeting[ <!ELEMENT greeting (#PCDATA)> ]>
注释 <!-- -->
1.不能出现在标记中 <type <!---->>错
2.注释中,不能出现--,所用不能有i--或者--i之类的代码
3.不能以--->结尾,<!--- asfs--->会报错,可以开头。
元素 : 开始标签、结束标签、元素内容。空元素,用空运算标签构成。
元素,可以有一个属性说明集,每个熟悉说明有一个名字和一个值
元素命名规范
四种形式:
空元素 <br/> 斜杠关闭标签 (因为XML主要用来表示数据,空元素不能带数据,所用基本不用)
带属性元素:元素值用''或“”
带内容的元素:
带内容和属性的元素
区分元素、标签:
标签 <font color='blue'>和</font>都是标签
<font color='blue'>Hello world</font> 是元素
元素内容的构成
子元素,父元素:
在元素内容中,字符数据:不包括标签的起始定界符和CDATA的结束定界符的任何字符串,即不能有& < ]]> (未经出来的<和&,被理解为标记的起始定界符。)
在CDATA段中,字符数据是不包括CDATA的结束定界符的任何字符串。
字符引用和实体引用
XML中有5个预先定义的实体引用,分别引用XML中的5个特殊字符:< > " ' &
字符引用和预定义的实体引用都是以一个&开始,;结束的。如果是字符引用,在&之后要加#然后是字符的十进制或十六进制代啊(ISO10646)。预定于的实体引用,在&后写上字符的预定义字符。
如 : <
<
>
"
'
&
作用举例 :
<test name=""asfsf">对
<test name="";asfsf"> 错
不允许出现某个字符时,可以通过字符引用的方式输入。
ISO10646字符集中的任何字符,都可以用字符引用的方式来引用。
CDATA段 : 包含的是存字符数据。在字符数据可以出现的任何地方都可以使它
CDATA段不被XML处理器分析,其中可以犯任何字符。
定义: <![CDATA[" adfadfadf "]]>
开始<![CDATA[
结束]]>
<java><![CDATA[
<<<<
]]>
</java>
<java></java> 会报错的,因为xml里标签重复了
<![CDATA[
<<<<
]]>
如果里面有]]>,就用字符引用
CDATA用于,当xml文档里有大量5个特殊字符时,可读性就有了
《处理指令》--XML解析器不做处理,传递给应用程序进行处理的。
processing instructions : pis
格式:<? ?>
如:<?xml-stylesheet href="hello.css" type="text/css"?>
xml-stylesheet是处理指令。如,应用程序、和W3C定义的
后面的是传递给指令的数据
非W3C的处理指令,不能以xml开头
对于不认识到指令,大部分应用程序采用忽略的方式进行处理
xml-stylesheet总是在xml声明前,其他的可以放在除标记内部和生那么之前的任何位置
声明和指令不同
《空白处理》
空格、制表符、空行:可读性
xml:space 值必须为default、preserve2者之一 。作用范围:属性所在标签范围
<!ATTLIST poem xml:space(default|preserve)'preserve'>
<!ATTLIST pre xml:space(preserve)#FIXED'preserve'>
《行尾处理》
行分隔符,不同OS不一样
回车 CR #xA
换行 LF #xD
WINDOWS #xD#xA 的组合
LINUX/UNIX #xA
MACOS #xD
XML会自动将windows和MACOS的行分隔符变成linux的,目的是方便应用程序处理xml
语言标志
xml:lang
有效文档中,使用该属性要先声明
属性值在一个IETF×××里面定义了
<content xml:lang="en">This is English</content>
<content xml:lang="zh">
<line>哈哈</line>
<line>哈哈</line>
<line>哈哈</line>
</content>
作用范围为所在元素范围,可以在元素内被覆盖。用""表示无
声明方式:
简单方式: xml:lang NMTOKEN #IMPLIED
可以指定缺省值 : <!ATTLIST note xml:lang NMTOKEN 'fr'> 表示:note元素的缺省值是fr,法语
《格式良好的XML》
格式良好的文档:(well-formed)
有且仅有一个根元素;
符合嵌套规则;
满足XML规范的所有格式约束;
XML里直接、间接引用的每一个已分析实体都格式正确
格式良好优点:
1.创建没有DTD的xml文档,利用XML做数据交换
2.可以将XML的处理器可以做得很小很快,放到手机/PDA中。IE浏览器就比较大
用IE、XMLSPY做格式检查
《DTD》
格式良好的文档是基础--符合XML规范
元素与元素的关系、元素与属性的关系、属性值范围是否正确
数据存储、传输简单,但如果要让其他应用进行数据交互,即哟必要提供一种机制,让不同应用之间的XML规范互通。
这就是DTD。
如何创建DTD;如果与根据它的规则所编写的XML文档关联;定义了XML处理器如何对它尽心处理。用DTD可以检查XML文档的机构是否正确。
DTD为XML的编写者和处理者提供统一规则,就像JAVA的接口
关联:xml的文档声明(xml声明后,根元素前)xml声明和文档声明之间,可以有注释和处理指令。
DTD中所有关键字都是大写的。
外部DTD和内部DTD,可以同时采用
外部DTD的2种引用方式:system和public
DTD名称
使用外部DTD,standalone=no
《元素类型声明》
DTD:根元素、内容、结构、每个细节
格式: <!ELEMENT 名称 内容说明>
关键字 <#PCDATA> 说明元素内容只为字符串
元素类型声明:元素名称、类型
内容:空、字符数据、子元素
内容说明5种:#PCDATA 、子元素 、混合内容、 empty 、 any
<?xml version="1.0" encoding="gb2312"?> //支持中文
//文档类型声明
<!DOCTYPE company [
<!ELEMENT company (employee)> //根元素company有employee子元素
<!ELEMENT employee1 (#PCDATA)>// 对employee1元素进行声明,表示内容类型为5种当中的字符串类型
<!ELEMENT employee1 (#PCDATA)> 类型放在()中,
<!ELEMENT fix EMPTY> EMPTY类型的定义,不要括号,然后大写,晕倒 (EMPTY是因为别的元素已经说明了他)
定义为EMPTY的元素,在XML里面要这么写 <fix></fix> 不能赋值和空格
<!ELEMENT fix ANY> 任何符合格式的形式
<!ELEMENT employee (name,age,sex)> //元素内容为子元素(后面别忘记给子元素做声明。),并且按顺序!!因为称为序列。
<!ELEMENT name(#PCDATA)>
]>
//XML文档本身
<company>
<company>
<employee>
<name>Dean Huang</name>
<age>25</age>
<sex>male</sex></employee>
</company>
<!ELEMENT salary (cash | credit_card)> 选择,选且仅选一个
<!ELEMENT employee (name, age, sex,salary,interest*)> interest表示0或者多个,可以多个哦
<!ELEMENT employee (name, age, sex,salary,interest+)> 加号一个或多个
<!ELEMENT employee (name, age, sex,salary,interest?)> 问号一个或0个
逗号,表示序列
括号,组合
格式上,几个容易错误的---要声明、顺序、
1.xml文件里面,出现的顺序必须跟小括号里面的顺序一样。
2.出现在父元素的小括号里面,必须声明。声明的顺序没有关系。
3.文档内容、版本声明、文档类型声明,这3个必选项少了一个,就错。而且声明了的元素,在XML文件里就要有值。
4.<!ELEMENT company (#PCDATA),元素名后要跟一个空格,狂晕,否则错
一个XML文件的内容:
1.<?xml version
2.文档类型声明;<!DOCTYPE company [!ELEMENT company(#PCDATA)]>
3.文档内容
!ELEMENT的规则虽然简单,但却可以弄成复杂的形式
混合元素(含有5类中的2类): <!ELEMENT fix (#PCDATA | fix1)*> 必须被声明为* ;且#PCDATA必须是第一个
实体声明:
在多个文档中,调用通样的内容。
一般实体 文档中用
参数实体 在DTD中使用的已分析实体。只能在DTD,而且是外部DTD(--DTD作为一个独立的文件)中使用。对于内部DTD,不可以在标记声明的内部出现,但可以在允许标记声明的位置出现。如:
<!DOCTYPE website [
<!ELEMENT website (name, copyright)>
<!ELEMENT name (#PCDATA)>
<!ENTITY % name "<!ELEMENT copyright (#PCDATA)>">
%name;
<!ENTITY copyright " all right reserved">
]>
不过好像没有什么作用
实体引用:&实体名; 别漏掉了分号
<!ENTITY 实体名 "实体内容">
感觉用法像变量
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE website [
<!ELEMENT website (name, copyright)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT copyright (#PCDATA)>
<!ENTITY name "programmer home">
<!ENTITY copyright " all right reserved">
]>
<website>
<name>&name;</name>
<copyright>©right;</copyright>
</website>
注释和html一样
DTD格式
<?xml version="1.0" encoding="gb2312"?>
<!ELEMENT website (name, copyright)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT copyright (#PCDATA)>
<!ENTITY % name "programmer home">
<!ENTITY copyright "%name;asfadfas">
引用DTD
在xml文件中加这句,system方式, <!DOCTYPE website SYSTEM "1.dtd">
参数实体的声明和使用
<!ENTITY % name "programmer home">
<!ENTITY copyright "%name;asfadfas">
XML处理器先读取内部子集,然后外部子集,一个顺序问题。所以内部子集不能引用外部子集声明的实体。因为实体肯定要先声明再引用。
外部实体
1.dtd外部实体的<?xml version="1.0" encoding="gb2312"?>是文本声明,不是XML声明,所以version可以不写,而且没有standalone属性。文本声明只能出现在开头部分。作为替换文本时,不会把它作为替换文本
<!ENTITY name SYSTEM "copyright.xml">
外部实体copyright.xml的内容
<?xml encoding="gb2312"?>
"programmer home"
评价:外部实体相内部实体更灵活一些
使用public关键字,声明公共的外部一般实体
属性表声明
属性名字、类型(共10种)、缺省值(4种,#REQUIRED #)
<!ATTLIST 元素名 属性名 属性类型 ,缺省声明>
#REQUIRED 表示该属性必须有
#IMPLIED 可有可无
#FIX 缺省值
<!ATTLIST name
lang CDATA #REQUIRED
length CDATA #FIXED "hfl"
>
使用:
<name lang="english" length="hfl">name</name> length的值改为别的值会报错;不写该属性,在XML解释器会自动添加它。在浏览器里面可以看到。
只有缺省值:除了可有修改值,其他的和#FIXED 缺省值一样
属性类型
CDATA,和元素内容说明的#PCDATA相同
Enumerated 枚举--注意值时不要加引号,使用时候要加
<!ATTLIST name
sex (male|female) #REQUIRED
length CDATA "hfl"
>
ID IDREF IDREFS
ID类型的唯一标记了一个XML元素,只能为#REQUIRED #IMPLIED
<!ATTLIST name length
ID #REQUIRED
>
<name length="ad">name</name>
<name length="ad1">name</name>
如:员工编号等地方就需要用到
要让ID类型的属性发挥作用,用IDREF属性。它的属性值是别的元素的ID类型的属性值,且ID的属性值必须已经存在。用ID和IDREF可以在2个对象间建立关联。必须是别的元素的值哦。
<employee id="E-ADFADFADF">asf</employee>
<manager mgrid="E-ADFADFADF"></manager>
把mgrid的值从E-ADFADFADF改为E-ADFADFADE就是错的
??为什么ID的值是13时也是错的
<!ELEMENT employee (#PCDATA)>
<!ELEMENT manager EMPTY>
<employee id="E-ADFADFADF">张三</employee>
<manager mgrid="E-ADFADFADF"></manager>
通过manager的mgrid对应到id,值为张三的,就知道张三是manager
ID值是唯一的
XML的属性、元素的设计,提高可读性×××××
IDREFS :必须引用多个ID类型的属性值时,用这个,然后不同属性值用空格分开。是在同一个引号里面。必须是别的元素的值哦。
XML处理器位于XML数据和应用程序之间,用于向应用程序提供数据
TAG:

