学习笔记 -针对- 孙鑫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)。预定于的实体引用,在&后写上字符的预定义字符。
    如 : <
    
&lt;
&gt;
&quot;
&apos;
&amp;

作用举例 :
<test name="&quot;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>&copyright;</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:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

我的栏目

日历

« 2008-09-03  
 123456
78910111213
14151617181920
21222324252627
282930    

我的存档

数据统计

  • 访问量: 5
  • 日志数: 3
  • 建立时间: 2008-09-02
  • 更新时间: 2008-09-02

RSS订阅

Open Toolbar