论坛首页 Java企业应用论坛

J2EE复习(二)XML(上)

浏览 2229 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-04-11   最后修改:2009-04-14

XML(eXtensible Markup Language)简介
XML 可扩展标记语言
XML是一种您可以用来创建自己的标记的标记语言。
XML由万维网协会(W3C)创建

XML和Html比较  

比较内容                HTML                                              XML
可扩展性               不具有扩展性                                     是元标记言,可用于定义新的标记语言
侧重点                  侧重于如何表现信息                            侧重于如何结构化地描述信息
语法要求               不要求标记的嵌套、配对等,不             严格要求嵌套、配对,并遵循DTD的树形结构

                           要求标记之间具有一定的顺序                 
 可读性及可维护性  难于阅读、维护                                  结构清晰,便于阅读、维护
 数据和显示的关系  内容描述与显示方式整合为一体 内容描述与显示方式相分离
 编辑及浏览工        已有大量的编辑、浏览工具                   编辑、浏览工具
 
XML优势
数据重用、数据和表示分离、可扩展性、语意信息

 

XML 声明

<?xml version="1.0" encoding="UTF-8"?>

XML声明一般是XML文档的第一行
XML声明由以下几个部分组成:
version - -文档符合XML1.0规范
encoding - -文档字符编码,默认为"UTF-8"

 

遵循如下规则的XML文档称为结构完整:
语法规范
1.必须有XML声明语句
2.<?xml version="1.0" encoding=“GBK"?>
3.必须有且仅有一个根元素
4.标记大小写敏感
5.属性值用引号
6.标记成对
7.空标记关闭
8.元素正确嵌套
元素语法
1.名称中可以包含字母、数字或者其它字符
2.名称不能以数字和"_"(下划线)开头
3.不能以XML/xml/Xml/…开头
4.名称中不能含空格
5.名称中不能含冒号(注:冒号留给命名空间使用)

 

文本内容PCDATA
XML支持Unicde字符集,因此可以在文本中包含字母/数字/标点/符号等。
注意:因为XML使用<,>,和&界定标记,如果在文本中包含有这些字符,必须使用实体替代。

CDATA
1.在特殊的标记CDATA下,所有的标记、实体引用都被忽略,而被XML处理程序一视同仁地当作字符数据看待。CDATA的形式:〈![CDATA[文本内容]]〉
2.用于把整段文本解释为纯字符数据而不是标记的情况。包含大量<、>、&或者"字符。CDATA节中的所有字符都会被当作元素字符数据的常量部分,而不是XML标记。
3.可以输入任意字符(除]]>外)
4.不能嵌套使用CDATA

CDATA与PCDATA
PCDATA是被解析器解析的文本。文本内的标签会被当作标记,实体会被展开。
CDATA是不被解析器解析的文本。文本内的标签不会被当作标记,实体不会被展开。

XML注释
注释内容中不要出现--;
不要把注释放在标记中间;
<Name <!--the name-->>TOM</Name>
注释不能嵌套;
可以在除标记以外的任何地方放注释。

XML属性
1.属性值用双引号(")或单引号(')分隔(如果属性值中有',用"分隔;有",用'分隔)
2.一个元素可以有多个属性,它的基本格式为:<元素名 属性名="属性值">
3.特定的属性名称在同一个元素标记中只能出现一次
4.属性值不能包括<, >, &

XML文档中的属性有两个规则:
1.属性必须有值
2.那些值必须用引号括起。您可以使用单引号,也可以使用双引号,但要始终保持一致。

命名空间---namespace
为XML中的元素设定一个唯一的标识名称
与URI结合来定义一个唯一标识
去除了XML文件中可能存在的元素名重叠的问题

DOCTYPE
文档类型声明,紧跟XML声明之后,包含所有实体声明语法:

<?xml version="1.0"?>
<!DOCTYPE  根元素标记名 [
    <!--实体声明-->
]>

实体引用
为了避免把字符数据和标记中需要用到的一些特殊符号相混淆,XML还提供了一些有用的实体引用。
作用:避免重复输入
自定义实体语法:

<!DOCTYPE Book(根元素)[     
<!ENTITY chapter1(实体名) "玄幻小说"(实体内容)>
<!ENTITY chapter2 "电影记录">
]>

引用已定义的实体:&实体名;

DTD
内部的 DOCTYPE 声明:
假如 DTD 被包含在您的 XML 源文件中,它应当通过下面的语法包装在一个 DOCTYPE 声明中:
<!DOCTYPE 根元素 [元素声明]>(请在 IE5 以及更高的版本打开,并选择查看源代码):

<?xml version="1.0"?>
<!DOCTYPE note [
  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to      (#PCDATA)>
  <!ELEMENT from    (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body    (#PCDATA)>
]>
<note>
  <to>George</to>
  <from>John</from>
  <heading>Reminder</heading>
  <body>Don't forget the meeting!</body>
</note>

以上 DTD 解释如下:
!DOCTYPE note (第二行)定义此文档是 note 类型的文档。
!ELEMENT note (第三行)定义 note 元素有四个元素:"to、from、heading,、body"
!ELEMENT to (第四行)定义 to 元素为 "#PCDATA" 类型
!ELEMENT from (第五行)定义 frome 元素为 "#PCDATA" 类型
!ELEMENT heading (第六行)定义 heading 元素为 "#PCDATA" 类型
!ELEMENT body (第七行)定义 body 元素为 "#PCDATA" 类型

外部文档声明:
假如 DTD 位于 XML 源文件的外部,那么它应通过下面的语法被封装在一个 DOCTYPE 定义中:
<!DOCTYPE 根元素 SYSTEM "文件名">这个 XML 文档和上面的 XML 文档相同,但是拥有一个外部的 DTD: (在 IE5 中打开,并选择“查看源代码”命令。)

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

声明一个元素:
在 DTD 中,XML 元素通过元素声明来进行声明。元素声明使用下面的语法:

<!ELEMENT 元素名称 类别>

  或者

<!ELEMENT 元素名称 (元素内容)>空元素

空元素通过类别关键词EMPTY进行声明:

<!ELEMENT 元素名称 EMPTY>

只有 PCDATA 的元素通过圆括号中的 #PCDATA 进行声明:

<!ELEMENT 元素名称 (#PCDATA)>

带有任何内容的元素:通过类别关键词 ANY 声明的元素,可包含任何可解析数据的组合

<!ELEMENT 元素名称 ANY>

带有一个或多个子元素的元素通过圆括号中的子元素名进行声明:

<!ELEMENT 元素名称 (子元素名称 1)>

  或者

<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,..)>

当子元素按照由逗号分隔开的序列进行声明时,这些子元素必须按照相同的顺序出现在文档中。在一个完整的声明中,子元素也必须被声明,同时子元素也可拥有子元素。
声明只出现一次的元素:

<!ELEMENT 元素名称 (子元素名称)>

声明最少出现一次的元素:

<!ELEMENT 元素名称 (子元素名称+)>

声明出现零次或多次的元素:

<!ELEMENT 元素名称 (子元素名称*)>

声明出现零次或一次的元素:

<!ELEMENT 元素名称 (子元素名称?)>

声明“非.../既...”类型的内容:

<!ELEMENT note (to,from,header,(message|body))>

 上面的例子声明了:"note" 元素必须包含 "to" 元素、"from" 元素、"header" 元素,以及非 "message" 元素既 "body" 元素。
声明混合型的内容:

<!ELEMENT note (#PCDATA|to|from|header|message)*>

上面的例子声明了:"note" 元素可包含出现零次或多次的 PCDATA、"to"、"from"、"header" 或者 "message"。

 

XML Schema 简介
XML Schema 是基于 XML 的 DTD 替代者。
XML Schema 可描述 XML 文档的结构。
XML Schema 语言也可作为 XSD(XML Schema Definition)来引用。
XML Schema 是 DTD 的继任者

XML Schema 相对于 DTD 的优点如下:
XML Schema 可针对未来的需求进行扩展
XML Schema 更完善,功能更强大
XML Schema 基于 XML 编写
XML Schema 支持数据类型
XML Schema 支持命名空间

 下面这个例子是一个名为 "note.xsd" 的 XML Schema 文件,它定义了下面那个 XML 文档的元素:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified">
<xs:element name="note">
    <xs:complexType>
      <xs:sequence>
 <xs:element name="to" type="xs:string"/>
 <xs:element name="from" type="xs:string"/>
 <xs:element name="heading" type="xs:string"/>
 <xs:element name="body" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
</xs:element>

</xs:schema>

 对 XML Schema 的引用:

<?xml version="1.0"?>
<note
xmlns="http://www.w3school.com.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3school.com.cn note.xsd">

<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

 

论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics