xml

来源:互联网 发布:用js输出九九乘法表 编辑:程序博客网 时间:2024/06/07 08:29
主要任务:
1、XML的基本概念、语法
2、DTD的文档编写
3、Schema文档的编写
    4、dom4j解析xml文档
一、XML简介
XML被设计用来传输和存储数据
HTML被设计用来显示数据
二、什么是XML?
1)XML 指可扩展标记语言(EXtensible Markup Language)。
 HTML的含义:超文本标记语言(超:图像、音频、文本等)
 HTML中内部的标签(预先定义)

2)XML 是一种很像HTML的标记语言。
3)XML 的设计宗旨是传输数据,而不是显示数据。
4)XML 标签没有被预定义。您需要自行定义标签。
5)XML 被设计为具有自我描述性。
6)XML 是 W3C 的推荐标准。

    XML的语法规则:
    XML文档必须有根元素
    XML声明(XML 声明文件的可选部分,如果存在需要放在文档的第一行)
    所有的 XML 元素都必须有一个关闭标签
    XML 标签对大小写敏感
    XML 必须正确嵌套
    XML 属性值必须加引号
    在 XML 中,空格会被保留
三、XML 不是 HTML 的替代。
XML 和 HTML 为不同的目的而设计:
1)XML 被设计用来传输和存储数据,其焦点是数据的内容。
2)HTML 被设计用来显示数据,其焦点是数据的外观。
3)HTML 旨在显示信息,而 XML 旨在传输信息。
四、一个 XML 文档实例
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>


第一行是 XML 声明。它定义 XML 的版本(1.0)和所使用的编码(UTF-8 : 万国码, 可显示各种语言)。




五、特殊符号
&lt; 引用左尖括号:“<”
&gt;   引用右尖括号“>”
&apos; 引用单引号“'”
&quot; 引用双引号“"”
&amp; 引用与符号“&” 

六、<![CDATA[" 开始,由 "]]>
CDATA 部分中的所有内容都会被解析器忽略。
七、属性
属性是指标记的属性,可以为标记添加附加信息。
<?xml  version="1.0"  encoding="UTF-8" ?>
<root>
   <桌子 width="300" height="600" length="1000">
          吃饭用的
   </桌子>
   <椅子 color="red" />
</root>
八、注释
<!--”开始,以“-->”结束
九、名称空间
1、名称空间的目的是有效的区分名字相同的标记,
当两个标记的名字相同时,它们可以通过隶属不同的名称空间来相互区分。
2、名称空间通过使用声明名称空间来建立,分为有前缀名称空间和无前缀名称空间 
有前缀名称空间:
有前缀的名称空间的语法如下:
xmlns:前缀=名称空间的名字
  例如:
xmlns:person=“22030262029023”
 声明了一个名字为“22030262029023”的名称空间
无前缀命名空间
无前缀的名称空间声明语法如下:
xmlns=名称空间的名字
例如:
 xmlns =www.tup.com 
例如:
<p1:张山 xmlns:p1="Liaoning">
   1976年出生,大学毕业。
   <p1:小张山>
        在小学读书
   </p1:小张山>
</p1:张山>
上述XML中的“张山”和“小张山”隶属同一个名称空间:“Liaoning”

======有效的XML文件=====
一、对XML的数据结构进行限制有两种方式:
1)使用文档类型定义(Document Type Definition,DTD)
2)XML Schema模式。 
DTD的使用要早与XML Schema模式,DTD和XML Schema模式各有所长,
但XML Schema模式比DTD更为复杂。 
注意:
一个规范的XML文件如果和某个DTD文件相关联,并遵守该DTD文件规定的限制条件,
就称为有效的XML文件。DTD文件的编码必须和其关联的XML文件一致
二、SYSTEM关联 
<!DOCTYPE 根标记的名称 SYSTEM  "DTD文件的URI">
例如:
  <!DOCTYPE  employee  SYSTEM  "a0.dtd"> 
   SYSTEM关联表明所关联的DTD文件由个人或工作小组所定义且认可 
三、PUBLIC关联
PUBLIC关联型的文档类型声明格式:
<DOCTYPE根标记的名称 PUBLIC "正式公用标识符" "DTD文件的URI">
例如:
<!DOCTYPE employee PUBLIC  "-//ISO123456/Daxian/ForXML/EN"  "a0.dtd">
 PUBLIC关联表明所关联的DTD文件已经得到某一领域的认可,是经过许多人讨论得到认可的DTD文件。


四、内部DTD应用
我们也可以把DTD文件的内容直接写在XML文件的内部,相对外部DTD文件,
这样的内容称做XML文件的内部DTD 
在XML文件中,内部DTD用“<!DOCTYPE 根标记名称 [”开始,以“]>”结束 
<!DOCTYPE 列车时刻表  [
<!ELEMENT 列车时刻表  (T28次,T226次) >
<!ELEMENT T28次    (开车时间,终到时间) >
<!ELEMENT T226次   (开车时间,终到时间) >
<!ELEMENT 开车时间 (hour,minute) >
<!ELEMENT 终到时间 (hour,minute) >
<!ELEMENT hour    (#PCDATA) >
<!ELEMENT minute  (#PCDATA) >
 ]>


<!DOCTYPE 根标记名称[
......
]>





五、外部DTD应用实例
dtdFile.dtd文件内容
<!ELEMENT 列车时刻表  (T28次,T226次) >
<!ELEMENT T28次    (开车时间,终到时间) >
<!ELEMENT T226次   (开车时间,终到时间) >
<!ELEMENT 开车时间 (hour,minute) >
<!ELEMENT 终到时间 (hour,minute) >
<!ELEMENT hour    (#PCDATA) >
<!ELEMENT minute  (#PCDATA) >
xmlDTD.xml文件内容
<!DOCTYPE 列车时刻表 PUBLIC "-//ISO88/China/xml/CH" "dtdFile.dtd"> 
<列车时刻表>
    <T28次>
        <开车时间>
           <hour>23点</hour>
           <minute> 12分</minute>
        </开车时间>
         <终到时间>
           <hour>23点</hour>
           <minute> 12分</minute>
        </终到时间>
   </T28次>
    <T226次>
        <开车时间>
           <hour>08点</hour>
           <minute>45分</minute>
        </开车时间>
         <终到时间>
           <hour>19点</hour>
           <minute>36分</minute>
        </终到时间>
   </T226次>
</列车时刻表>


六、DTD的元素
  1、DTD中的元素(ELEMENT)是用来约束XML文件中的标记,
<!ELEMENT  标记名称   标记的约束条件 > 
<!ELEMENT 列车时刻表  (T28次,T29次) > 
 约束标记“列车时刻表” 只可以有且必须有两个子标记“T28次”和“T29次”。
  2、规定标记的子标记
  <!ELEMENT  标记名称  (子标记列表) >
  <!ELEMENT 开车时间 (hour,minute) >
  要求标记“开车时间” 恰好有两个子标记“hour”和“minute”,不可以有能显示的文本数据,
  并且子标记在父标记“开车时间”中出现的顺序必须是“hour”、“minute”
  而不是 “minute”、“hour”.
  3、限制标记只有文本数据
  <!ELEMENT  标记名称  (#PCDATA) >
  4、定义混合元素(既有字符串内容,又包含子元素)
<!ELEMENT 父元素名 (#PCDATA) | 子元素1 | 子元素2
  5、EMPTY和ANY 
  如果准备约束一个标记是空标记,或者是只含有空字符的非空标记,
  元素的“标记的约束条件”可以是关键字“EMPTY”;
  如果不准备对一个标记有任何约束,元素的“标记的约束条件”可以是关键字“ANY”。
  <!ELEMENT  speak  EMPTY >
<!ELEMENT hello ANY >

七、DTD中的属性 
1、ATTLIST声明 
DTD中的属性列表(ATTLIST)可用来约束XML文件中标记的属性,在DTD中属性列表的声明格式为:
<!ATTLIST  标记名称  
属性名称 属性类型 默认值情况
属性名称 属性类型 默认值情况
… ….
>

(1)属性名称
  属性名称的命名规则和标记的命名规则相同,可以由字母、数字、下划线(“_”)、点(“.”)或连字符(“-”)组成,但必须以字母或下划线开头。
(2)属性类型  
 我们已经知道属性值一定是一个字符串,那么属性类型就决定了属性可以用怎样的字符串作为属性的值。
(3)默认值情况
ATTLIST声明是为了约束XML文件中标记的属性,ATTLIST声明中关于属性的“默认值情况”是对XML文件中标记的属性进行约束的细节条件
属性的默认值可以是字符串、关键字(#IMPLIED、#REQUIRED、#FIXED)
#REQUIRED:必要的属性,意味着必须为该元素提供该属性
<!ATTLIST 作者 地址 CDATA #REQUIRED>  
#IMPLIED:该属性是可有可无的
#FIXED:该属性的值是固定的,定义时必须指定固定的值
<!ATTLIST 作者 地址 CDATA #FIXED “广州”>
属性类型:
1、CDATA类型(该属性的值可以是任何一个字符串)
  注意:字符串中不能含有含有左尖括号、右尖括号、与符号、单引号和双引号
2、枚举类型:
  <!ATTLIST 肉 类型(鸡|牛肉|猪肉|鱼肉) #REQUIRED>
3、NMTOKEN类型
如果属性的类型是NMTOKEN类型的属性,属性值可以
由字母、数字、下划线(“_”)、点(“.”)或连字符(“-”)组成,
属性值中不能含有空格字符(属性值也可以用数字、点或连字符开头)
4、NMTOKENS类型
对于NMTOKEN类型的属性,其属性值中不能含有空白类字符。
如果需要某个属性的属性值含有空白类字符,而且被空白分隔开的子字符串符合NMTOKEN类型属性的属性值之规定,
那么就可以将属性的类型取为NMTOKENS类型。 
 
八、实体的应用
实体分类:普通实体和参数实体
1)普通实体语法如下:
语法格式:<!ENTITY 实体名 "实体值">
使用实体:&实体名;(必须以&开始,以英文分号结束)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE entity [
<!ENTITY  hello "How are you,&amp;你好" >
]>
 
<entity>
&hello;
</entity>
2)参数实体的应用:
语法格式:<!ENTITY % 实体名 "实体值">
引用参数实体:%实体名;
定义参数实体:
<!ENTITY % boolean "yes|no|true|false">
引用参数实体
<!ATTLIST 书名 islast (%boolean;) #REQUIRED>
外部实体引用
myentity.txt
<?xml  version="1.0"  encoding="UTF-8" ?>
这是一个外部实体
<外部实体></外部实体>
<!ELEMENT 实体名 SYSTEM "实体值所在文件的URI">

outerentity.dtd
<?xml  version="1.0"  encoding="UTF-8" ?>
<!ENTITY outer SYSTEM "myentity.txt">

book.xml
<?xml  version="1.0"  encoding="UTF-8" ?>
<!DOCTYPE 书名 SYSTEM "outerentity.dtd">
<!-- 引用外部实体 -->
<书名 islast="no">&outer;</书名>
外部参数实体的应用
语法格式:<!ELEMENT % 实体名 SYSTEM "实体值所在文件的URI">
myprops.txt
<?xml  version="1.0"  encoding="UTF-8" ?>


outerentity.dtd
<?xml  version="1.0"  encoding="UTF-8" ?>
<!-- 定义外部参数实体 -->
<!ENTITY % outer_props SYSTEM "myprops.txt">
<!ATTLIST 书名 islast CDATA "%outer_props;">




   
 


 



 

原创粉丝点击