开发-课程讲义第十三章.netxml_第1页
开发-课程讲义第十三章.netxml_第2页
开发-课程讲义第十三章.netxml_第3页
开发-课程讲义第十三章.netxml_第4页
开发-课程讲义第十三章.netxml_第5页
免费预览已结束,剩余108页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十三章.NET

XML南航计算机科学与技术学院本部12-101xie

21.1

HTML的概念HTML(HyperText

Markup

Language)超文本标记语言是

WWW

的描述语言,由Tim

Berners-lee提出。设计HTML语言的目的是为了能把存放在一台电脑中的文本或图形与另一台电脑中的文本或图形方便地联系在一起,形成有机的整体,人们不用考虑具体信息是在当前电脑上还是在网络的其它电脑上。这样,你只要使用鼠标在某一文档中点取一个图标,Internet就会马上转到与此图标相关的内容上去,而这些信息可能存放在网络的另一台电脑中。HTML

is

the

lingua

franca

for

publishing

hypertext

on

theWorld

Wide

Web.

It

is

a

non-proprietary

format

baseduponSGML,and

can

be

createdand

processed

by

a

wide

range

of

tools,

fromsimple

plain

text

editors

-

you

type

it

in

from

scratch-tosophisticated

WYSIWYG

authoring

tools.

HTML

uses

tags

such

as<h1>

and

</h1>

to

structure

text

into

headings,

paragraphs,

lists,hypertext

links

etc.HTML

2.0T.

Berners-Lee

and

D.

Connolly,

November

1995.HTML

3.2HTML

3.2

is

W3C's

specification

for

HTML,

developed

in

early

‘96

togetherwith

vendors

including

IBM, ,

Netscape

CommunicationsCorporation,

Novell,

SoftQuad,

Spyglass,

and

Sun

Microsystems.

HTML

3.2adds

widelyimages,

whiledeployed

features

such

as

tables,

applets

and

text

flow

aroundproviding

full

backwards

compatibility

with

the

existingstandard

HTML

2.0.The

HyperText

Markup

Language

(HTML)

is

a

simple

markup

language

usedto

create

hypertext s

that

are

portable

from

one

platform

to

another.HTML s

are

SGML s

with

generic

semantics

that

areappropriate

for

representing

information

from

a

wide

range

of

applications.HTML

3.2

aims

to

capture mended

practice

as

of

early

'96

and

as

suchto

be used

as

a

replacement

for

HTML

2.0

(RFC

1866).3III.HTML

4.0HTML

4.0

is

an

SGML

application

conforming

to

International

StandardISO

8879

--

Standard

Generalized

Markup

LanguageHyperText

Markup

Language

(HTML),

version

4.0,

is

the

publishinglanguage

of

the

World

Wide

Web.

In

addition

to

the

text,

multimedia,

andhyperlink

features

of

the

previous

versions

of

HTML,

HTML

4.0

supportsmore

multimedia

options,

scripting

languages,

style

sheets,

better

printingfacilities,

and s

that

are

more

accessible

to

users

with

disabilities.HTML

4.0

also

takes

great

strides

towards

the

internationalization

ofs,

with

the

goal

of

making

the

Web

truly

World

Wide.HTML

4.01

SpecificationW3C mendation

24

December

19994HTML文件是标准的ASCII文件,且其后缀名为htm或html的文件。HTML文件看起来象是加入了许多被称为

签(tag)的特殊字符串的普通文本文件。从结构上讲,HTML文件由元素(element)组成,组成HTML文件的元素有许多种,用于组织文件的内容和指导文件的输出格式。绝大多数元素是“容器”,

即它有起始标记和结尾标记。元素的起始标记叫做起

签(start

tag),元素结束标记叫做结尾

签(end

tag),在起始签和结尾

签中间的部分是元素体。

每一个元素都有名称和可选择的属性,元素的名称和属性都在起始

签内标明。<html><head>HTML文件头</head><body>HTML文件体</body></html>HTML文件头是一些对页面整体进行设置的参数和命令,以及相关的页面注释信息。而文件体则是实际要在页面中表现的内容。HTML文件中的标记命令均以“<>”括住,大部分命令是成对出现的开关命令。起始命令为“<命令>”,而结束命令则为“</命令>”。HTML文件中的标记命令对大小写不敏感。5<HTML><HEAD><TITLE>HTML

Example</TITLE></HEAD><BODY bgcolor=

yellow><P>这是一HTML的测试文件</P></BODY></HTML>6HTML

缺乏语法检查HTML缺乏结构HTML不是面

象的HTML缺乏健壮的连接机制HTML是不可重用的HTML是不可扩展的7置标语言元置标语言(Meta

Language)是一种能定义

的上层置标语言,即用户可以根据一定的规则和某些通用的原理来自己定义标记,自己定义的标记可在DTD中加以描述。也就是说,用户自己可以通过元置标语言制定一套自己的置标语言。像SGML、XML等都是元置标语言,而

HTML则不是元置标语言,因为它规定了一套标记,脱离这些规定的标记,用户就没法使用。置标语言:由一些特殊符号所组成,这些特殊符号通常为码(code)或标记(tag)。通过使用这些标记来标记你觉得有用的数据。通常,将置标语言分为两大类:特殊用途和一般用途的置标语言。8特殊用途的置标语言是指为了某些特定的应用置标语言必须要有一个标准,用它来描述而制定的置标语言。有效的标记(比如<br>在HTML中是一个有效的标记,而<rb>在HTML规范中则为无效标记);其次还要有一个标准以描述每个标记的具体含义(比如<br>在HTML规范中的含义是“当前行的中断”)。RTF(Rich

Text

Format)是专为写字板(Word

Pad)所设计的置标语言;HTML(Hyper

Text

Markup

Language)是为网页所设计的置标语言,并以浏览器为应用

。XHTML是对HTML

4.01(并不完全兼容于XML)的重写版,目的是兼容XML规范。MathML(Mathematical

Markup

Language)应用于描述数学公式的数学置标语言。可以将数学公式精确地显示在浏览器上。SVG用于显示矢量图形的置标语言。WML用于

上网的置标语言。SMIL用于体现多

效果的置标语言。OEB用于

的置标语言。CML(Chemical

Markup

Language)用于描述化学的置标语言。CML可描述分子与晶体结构、化合物的光谱结构等。9ebXML(

)是一个规范集,这些规范

共同实现了模块化电子商务框架。ebXML

的构想是实现一

个全球电子市场,其中,不同规模和不同地区的企业可以通过交换基于XML

的消息来合作和进行商业活动。换句话说,”,即

常听到的ebXML

希望成功实现“电子EDI。cnXML( /)是基于XML的电子商务交易标准语言,是与国际上各种版本的XML完全兼容并且符合 的电子商务语言规范,由

cnXML

制定。完整的cnXML规范包括一整套技术,商务字典,服务的框架以及企业模型表述。其商务流程定义参照国际标准的OBI即模型。merceXML,它是由Ariba公司制定的一种基于XML规范,面向B2B模式电子商务交易的行业标准。10XML有两个先驱——SGML和HTML,这两个语言都是非常成

功的标记语言,但是他们都在某些方面存在着与生俱来的缺陷。

XML正是为了解决它们的不足而诞生的。SGML的全称是标准通用化标记语言,它从80年代初开始使用。正如XML一样,SGML也可用于创建成千上万的标记语言,它为语法标记提供了异常强大的工具,同时具有极好的扩展性,因此在分类和索引数据中非常有用。目前,SGML多用于科技文献和办公文件中。SGML非常之复杂,不仅如此,SGML非常昂贵。还有最关键的一点,几个主要的浏览器厂商都明确支持SGML,这无疑是SGML在网上遇到的最大。HTML免费、简单,而且它获得了广泛的支持。HTML最初于

1990年由CERN设计,它是一个非常简单的SGML语言,可以方便普通人的使用。而正如设计之初所构想的那样,HTML现在在世界范围内得到了广泛的应用。111996年人们开始致力于描述一个标记语言,它既具有SGML的强大功能W3C小组来从和可扩展性,同时又具有HTML的简单性。国际互联网(World

Wide

Web

Consortium)决定专门成立一个SGML事此项工作,Sun公司的

Bosak担任小组的指挥。SGML中所有非的、未被使用的和含义模糊的部分都被删除,剩下的就成为短小精干的置标工具——XML。对于XML的描述(由

TimBray和C.M.Sperberg-McQueen撰写)只有26页,而当初的SGML的描述却长达500页之多,但SGML中所有的精华都被保留了下来。XML不断发展演化,并且从CML和MathML中汲取了大量的经验。

1997年春天,可扩展

语言XML草案已被拟定,到了1997年夏天,微软也开始了关于通道描述格式CDF(Channel

Definition

Format)的定义工作,这应该算是XML的第一个真正的应用。W3C于1998年2月批准了XML的1.0版本,一个崭新而大有前途的语言诞生了。12自从XML诞生以来,又有一大批用XML定义的新的置标语言随之诞生,它们有的仍处在草案阶段,还有一些已经由W3C

成为正式标准,开始在各个领域发挥着它们、同时也是XML的巨大优势。这其中包括前面说到的CML和MathML,还包括使用XML重新定义的XHTML,用于显示矢量图形的SVG,用于表现多 效果的SMIL,用于 的OEB,用于

上网的WML和HDML,面向电子商务的ebXML等。GML(1969)SGML(1985)HTML(1993)XML(1998)XHTMLSVGSMILHDMLOEB13XML应该可以在互联网上直接使用(就象HTML那样好用)。XML应该支持各种不同的应用方式(不但包括浏览,还包括对内容的分析)。XML应该与SGML兼容。处理XML文件的应用程序应该容易编写。XML中的可选特性的数量应该减到最小,最好减至没有(可选特性经常造成 )。XML文件应该具有良好的可读性,并且比较清晰。用XML设计新的置标语言应该方便快捷。XML设计的置标语言应该正式、简洁。XML文件应该容易编制。14正象HTML一样,可扩展置标语言XML(eXtensible

MarkupLanguage)也是一种置标语言。它同样依赖于描述一定规则的和能够读懂这些的应用处理工具来发挥它的强大功能。关于此规范的正确题目,亦即XML的正确全名,应该是

Extensible

MarkupLanguage,eXtensible

MarkupLanguage只不过是一个拼写错误罢了。但是,现在简写XML不仅正确,而且正如它在Language的的标题中一样,是Extensible

Markup名称。这个名称和简写是由JamesClark最先,其它可供选择的名称还包括小型标准置标语言

MGML

(Minimal

Generalized

Markup

Language),标准置标语言的小型结构MAGMA(Minimal

Architecture

For

GeneralizedMarkup

Applications),

以及互联网置标结构语言SLIM(Structured

Language

for

Internet

Markup)。15XML是一种可扩展的元标记语言,集SGML和HTML的优势于一身,其设计目的是为了克服

HTML语言的缺陷,将网络上传输的文档规范化,并赋予标记一定的含义,同时,还保留了HTML所具有的简捷、适于网络传输和浏览的优点。XML将数据本身与数据的显示方法与处理分离开。XML描述的是数据,可由任何的程序获取处理它。因此,全球的开发 都将XML集成到自己的程序中来。16来说也XML可用于现有的Web协议(HTTP、MIME)和机制(URL)XML支持Web的各种不同应用,并使用了一种类属的方法使其具有可扩展性XML与SGML兼容,大多数SGML应用可以向XML转化与HTML文档一样,XML文档易于创建XML文档内容和结构清晰易懂,所以即使对非专业易于阅读和使用XML的设计严谨,所以XML中标记的信息可以很容易地被计算机程序所处理XML标准定义精炼,这就保证了其 和处理的速度17fclml.dtd:<?xml

version=“1.0”encoding=“GB2312”?><!ELEMENT

联系人列表(联系人)*><!ELEMENT

联系人

(

,ID,公司,,,地址)><!ELEMENT

地址

(街道,城市,省份)><!ELEMENT

(#PCDATA)><!ELEMENT

ID

(#PCDATA)><!ELEMENT

公司(#PCDATA)><!ELEMENT<!ELEMENT(#PCDATA)>(#PCDATA)><!ELEMENT

街道

(#PCDATA)><!ELEMENT

城市(#PCDATA)><!ELEMENT

省份

(#PCDATA)>18client.xml<?xml

version

=

“1.0”

encoding=“GB2312”

standalone

=

“no”?><!DOCTYPE

联系人列表

SYSTEM

“fclml.dtd”><?xml-stylesheet

type="text/xsl"

href="mystyle.xsl"?><联系人列表><联系人><

>

</

><ID>001</ID><公司>A公司</公司>><

>

</<

>(010)62345678</

><地址><街道>五街1234号</街道>市</城市></省份><城市><省份></地址></联系人><联系人><

>

</

><ID>002</ID><公司>B公司</公司><

>li@b</

><

>(021)87654321</

><地址><街道>

路9876号</街道><城市>

</城市><省份>

</省份></地址></联系人></联系人列表>19“

xmlns="mystyle.xsl<?xml

version="1.0"

encoding="GB2312"?><xsl:stylesheet

xmlns:xsl="html40“ result-ns=""><xsl:template><xsl:apply-templates/></xsl:template><xsl:template

match

=

"/"><HTML><HEAD><TITLE>F公司的客户联系信息</TITLE></HEAD><BODY><xsl:apply-templates

select="联系人列表"/></BODY></HTML></xsl:template><xsl:template

match="联系人列表"><xsl:for-each

select="联系人"><UL><LI><xsl:value-of

select="

"/></LI><UL><LI>用户ID:<xsl:value-of

select="ID"/></LI><LI>公司:<xsl:value-of

select="公司"/></LI><LI> :

<xsl:value-ofselect="

"/></LI><LI> :

<xsl:value-of

select="

"/></LI><LI>街道:<xsl:value-of

select="地址/街道"/></LI><LI>城市:<xsl:value-of

select="地址/城市"/></LI><LI>省份:<xsl:value-of

select="地址/省份"/></LI><LI>ZIP:<xsl:value-of

select="地址/ZIP"/></LI></UL></UL></xsl:for-each></xsl:template></xsl:stylesheet>211)XML是用来存放数据的

XML不是HTML的替代品,XML和HTML是两种不同用途的语言。数据的,重点是: 数据,

XML是被设计如何存放数据。HTML是被设计用来显示数据的,重点是:显示数据以及在Web上如何更好的显示数据。

HTML是与显示信息相关的,XML则是与描述信息相关的。2)XML

什么也不做

XML被设计成什么都不做的。

也许看起来很难理解,但事实上XML确实什么都不做。XML只是用来组织、 和发送信息的。

下面的例子是Ordm给Lin的便条,使用的是XML格式:22<note><from>Ordm</from><to>Lin</to><heading>Reminder</heading><body>Don't

forget

me

this

weekend!</body></note>这个便条有信息头,又有信息主体,还包括发送人和接收人。尽管如此,这个XML文档仍然什么都不做,只是用XML标记 信息的文件。需要人们编写发送和接收并且显示这种格式信息的

。23XML是

的、可以扩展的

XML标记并不是预先规定好的,你必须创造你自己的标记。

在HTML文档中必须使用规则中定义好的标记。比如:<P><br><a></a>等等。

XML允许你定义自己的标记以及文档结构。

比如在上面例子中的“<to>”、“<from>”标记都不是在XML规范中事先定义好的。这些标记都是XML文档的作者“创造”出来的。XML是HTML的补充

XML并不是HTML的替代品。XML并不是HTML的替代品,理解这一点非常重要。在将来的网页开发中,XML将被、数据,而HTML则是用来格式化和显示数据的。对于XML最好的形容可能是:XML是一种跨平台的,与软、硬件无关的,处理信息的工具。2425所有的XML文档必须有一个结束标记;<p>This

is

a

paragraph【HTML】<p>This

is

another

paragraph</p>【XML】XML标记都是大小写敏感的;<Message>This

is

incorrect</message>

×<message>This

is

correct</message>

√3)所有的XML元素必须合理包含;<b><i>This

text

is

bold

and

italic</b></i>

【HTML】<b><i>This

text

is

bold

and

italic</i></b>【XML】4)所有的XML文档必须有一个根元素XML文档中的第一个元素就是根元素。5)属性值必须使用引号<?xml

version="1.0"

encoding="ISO-8859-1"?><note

date=“12/11/99”><to>Lin</to><from>Ordm</from><heading>Reminder</heading><body>Don't

forget

me

this

weekend!</body></note>结构良好的XML文档符合语法的XML文档称为结构良好的XML文档。文档包含一个或多个元素它只有一个包含所有其它元素的元素其元素相互间的嵌套要正确用在开始和结束标识符中的元素名要精确匹配属性名不能在同一元素开始标识符中出现多次属性值必须括在单引号和双引号中属性值不能直接或者间接地 外部实体属性值中

的任何实体的替换文本中不能含有字符“<”(但可含字符串<)实体在使用前要进行任何实体 不能含有不分析实体的名字逻辑和物理结构的嵌套要正确26272)有效XML文档与无效XML文档有效XML文档:内容结构严格遵守它自身的标记说明,能通过自身的语法检查;通过DTD/Schema验证的XML文档称为有效的XML文档。<?xml

version="1.0"

encoding="UTF-8"?><?xml-stylesheet

type="text/xsl"

href="show_book.xsl"?><!DOCTYPE

catalog

SYSTEM

"catalog.dtd“><!--

catalog

last

updated

2000-11-01

--><catalog

xmlns="http

/catalog/"><book

id="bk101"><author>Abercrombie,

Kim</author><title>XML

Developer's

Guide</title><genre>Computer</genre><price>44.95</price><publish_date>2000-10-01</publish_date><description><![CDATA[An

in-depth

look

atcreating

applications

with

XML,

using

<,

>,

]]>

and;.</description></book><book

id="bk109"><author>Kress,

Peter</author><title>Paradox

Lost</title><genre>Science

Fiction</genre><price>6.95</price><publish_date>2000-11-02</publish_date><description>After

an

inadvertent

trip

through

aHeisenberg

</description></book></catalog>序言文档元素根元素属性元素注释文档类型定义XML文本PICDATA实体XML的示例<?xmlversion="1.0"

encoding="UTF-8"standalone="yes"?>一个XML文件最好以一个XML作为开始。XML在文件中是可选内容,可加可不加,但W3C加入这一行。XML

是处理指示的一种。XML

相对简单一些,形象地说,它的作用就是告诉XML处理程序:“下面这个文件是按照XML文件的标准对数据进行标记的”。一个最简单的XML

是这样的:<?xml

version

=

"1.0"?>XML

中要求必须指定“version”的属性值。同时,声明中还有两个可选属性,分别是“standalone”和“encoding”。因此,一个完整的XML

是这样的:29XML

属性的含义

version属性在一个XML的处理指示中必须包括version属性指明所采用的

XML的版本号,而且,它必须在属性列表中排在第一位。由于当前的XML

版本是1.0,所以:version="1.0"。

standalone属性这个属性表明该XML文件是否和一个独立的标记 文件配套使用。因此,如果该属性置为“yes”,说明没有另外一个配套的DTD文件来进行标记 。相反,如果这个属性置为“no”,则有可能有这样一个文件。(注意,也可能没有。)

encoding属性所有的XML语法分析器都要支持8位和16位的编码标准。不过,XML可能支持一个更庞大的编码集合。XML几个常见的编码:GB2312、BIG5、UTF-830处理指令是用来给处理XML文件的应用程序提供信息的。也就是说,XML分析器可能对它并不感

,而把这些信息原封不动地传给XML应用程序。然后,这个应用程序来解释这个指示,遵照它所提供的信息进行处理,或者再把它原封不动地传给下一个应用程序。正如

前面看到的,XML语法:就是一个处理指示。<?处理指令名?>或

<?处理指令名

属性名=“属性值”

?>命名:处理指令名必须以字母、下划线开头;处理指令名可以包括字母、下划线、冒号、数字、横线和;由于XML

的处理指示名是xml,因此其它处理指示名不能再用xml;样式表处理指令样式表处理指令xml-stylesheet。这个处理指令必须出现在序言部分,在根元

前。<?xml-stylesheet

type="type"href="uri"?>或<?xml:stylesheet

type="type"href="uri"

?>type="text/css"或者

type="text/xsl"31“置标”是XML语言的精髓。因此,标记在XML的元素中、乃至整个XML文件中,占了举足轻重的位置。XML的标记和HTML的标记在模样上大体相同,不过,XML对于标记的语 定可比HTML要严格得多。除了注释和CDATA部分以外,所有符号“<”和符号“>”之间的内容都称为标记。其基本形式为:<标记名(属性名=“属性取值”)*>标记必不可少任何一个形式良好的XML文件中至少要有一个元素。也就是说,标记在XML文件中是必不可少的。大小写有所区分(大小写敏感)在标记中必须注意区分大小写。在HTML中,标记〈 O〉和〈 o〉是一回事,但在XML中,它们是两个截然不同的标记。32要有正确的结束标记结束标记除了要和开始标记在拼写和大小写上完全相同,还必须面加上一个斜杠“/”。因此,如果开始标记是〈O〉,结束标记应该写作〈/O〉。XML严格要求标记配对,因此,HTML中的<BR>、<HR>的元素形式在XML中是不合法的。不过,为了简便起见,当一对标记之间没有任何文本内容时,可以不写结束标记,而在开始标记的最后惯以斜杠“/”来确认。这样的标记称为“空标记”。标记要正确嵌套间必须满足在一个XML元素中允许包含其它XML元素,但这些元嵌套性。标记命名要合法标记应该以字母、下划线“_”或冒号“:”开头,后面跟字母、数字、

“.”、冒号、下划线或连字符“-”,但是中间不能有空格,而且任何标记不能以“xml”起始。另外,最好不要在标记的开头使用冒号,尽管它是合法的,但可能会带来

。在XML1.0标准中允许使用任何长度的标记,不过,现实中的XML处理程序可能会要求标记的长度限制在一定范围内。33有效使用属性标记中可以包含任意多个属性。在标记中,属性以名称/取值对出现,属性名不能重复,名称与取值之间用等号“=”分隔,且取值用引号引起来。例如:<商品类型

="服装"颜色="黄色">在这个例子中,“类型”和“颜色”是标记“商品”的属性,“服装”是属性“类型”的取值,“黄色”是属性“颜色”的取值。属性命名的规范与标记命名规范大体相似,需要注意有效字母、大小写等一系列问题。不过,在必要的时候,属性中也可以包含空白符,标点和实体

。需要特别注意的是,在XML中属性的取值必须用引号引起来,但在HTML中这一点并不严格要求。最后要说明一点,属性的所有赋值都被看作是字符串。因此,如果你的处理程序读到下面这段XML标记:<圆柱体半径=“10”高=“13”〉程序应该能够把字符串“10”和“13”转化为它们所代表的数字。34元素是XML文件内容的基本单元。从语法上讲,一个元素包含一个起始标记、一个结束标记以及标记之间的数据内容。其形式是:<标记>数据内容</标记>空元素:<标记/>或<标记属性=“属性值”/>元素中还可以再嵌套别的元素。所有的XML文件都至少包含一个形式良好的根元素。根元素,又称为文件标记,紧跟在XML

之后,如果该XML文件中还内嵌了DTD,则这个根标记紧跟在DTD之后。根标记必须是一个非空的标记,其中包含了整个文件的数据内容。35XML元素的可扩展性

元素是可以扩展的,以携带

XML便条例子:的信息<note><to>全体同学</to><from>Mike</from><body>请大家学好XML,因为它有用。</body></note>如果在这个XML文档中加入一些额外的信息,如下所示:<note><date>2005-02-24</date><to>全体同学</to><from>Mike</from><heading>注意哟</heading><body>请大家学好XML,因为它有用。</body></note>36XML元素命名必须遵守下面的规则:

元素名必须是以字母、下划线开始的字符串;

元素名可以包含字母、数字、连字符、下划线、

元素的名字不能以XML(或者xml,Xml,xMl...)开头。

元素的名字不能包含空格。

应该使元素的名字具有可读性。

XML文档往往都对应着数据表,应该尽量让数据库中的字段名和相应的XML文档中的元素命名保持一致,这样可以方便数据变换。

在XML元素命名中不要使用":",因为XML命名空间需要用到这个十分特殊的字符。37元 间的关系:子元素/父元素、祖先/后代设想有这样一本书:署名:XML

指南第一章:XML入门简介HTMLXML第二章:XML语法XML元素必须有结束标记XML元素必须正确的嵌套可以用XML文档来描述这本书:<book><title>XML指南</title><chapter>XML入门简介HTML</para>XML</para><para><para></chapter><chapter>XML语法<para>XML元素必须有结束标记</para><para>XML元素必须正确的嵌套</para></chapter></book>38XML元素的内容嵌套元素字符数据实体CDATA节处理指令注释3940根元素每个XML文档必须有且只有一个根元素。根元素是一个完全包括文档中其他所有元素的元素。根元素的起始标记要放在所有其他元素的起始标记之前。根元素的结束标记要放在所有其他元素的结束标记之后。在XML中,注释是用“〈!--”和“--〉”引起来的。如下XML文件:<示例><!--一个XML的例子--><![CDATA[<联系人><

>

</

><

>

</

></联系人>]]></示例>在XML文件中使用注释时,同样要遵守几个规则:在注释文本中不能出现字符“-”或字符串“--”,XML处理器可能把它们和注释结尾标志“-->”相

。注释文本放在标记之中,否则,它就不是“形式良好的”XML文件了。如:<示例

<!--

一个XML的例子-->

><![CDATA[<联系人><

>

</

><

>

</></联系人>]]></示例>41类似地,

注释文本放在实体

中,也不要放在XML

之前。记住,

用XML

作为XML文件中的第一行。注释不能被嵌套。在使用一对注释符号表示注释文本时,要保证其中不再包含另一对注释符号。例如下面例子是不合法的:<!--一个XML的例子<!--以上是一个注释-->-->XML处理器对于注释中的一切内容都会

,注释中出现的标记也一同被忽略。因此,在下面这段文本中,所有注释中的“名词”元素都被忽略,剩下的只有最后一行中的元素“XML”。<!--不处理以下信息<名词>HTML</名词><名词>XHTML</名词><名词>SGML</名词>--><名词>XML</名词>不过,当使用注释时一定要

,要确保文件在去掉全部注释之后,遵守所有“形式良好的”文件的要求。42<!DOCTYPE

catalog

SYSTEM

"catalog.dtd">作用:用来定义XML文档数据结构。方法:文档类型定义由DOCTYPE标记;分类:包括DTD子集和外部DTD子集43DTD子集DTD子集通常定义语法:<!DOCTYPE

根元素名[描述信息]>例如:<?xml

version="1.0"?><!DOCTYPE

myMessage

[<!ELEMENT

myMessage

(message)><!ELEMENT

message

(#PCDATA)>]><myMessage><message>

o!</message></myMessage>44外部DTD子集的定义语法:<!DOCTYPE

根元素名称

SYSTEM“URI地址”><!DOCTYPE

根元素名称PUBLIC“FPI”>SYSTEM是指文档使用的私有DTD文件的

,而PUBLIC则指文档调用一个公用的DTD文件的例:<!DOCTYPE

myMessage

SYSTEM

“myMessage.dtd><!DOCTYPE

myMessage

PUBLIC

“-//W3C//DTD//EN”>也可以把两种外部定义结合起来,例:<!DOCTYPE

myMessage

PUBLIC

“-//W3C//DTD//EN”“一个XML文档可以同时拥有”>DTD和外部DTD子集,语法:<!DOCTYPE

根元素名称

PUBLIC

“FPI”/“外部URI”[

描述信息]>当同时拥有外部和的策略。一般以子集,若这两者出现 时,不同的解析器有不同DTD子集为准。SGML地址45URI、URL、URN的关系a)

URI

资源标识符是所有名称/地址的一般集合,它们是指向资源的简短字符串。b)

URL协议-资源定位符的结构:-路径-文件名URL是URI模式的集合,是URI的子集,它显示的说明怎样Internet上的资源。c)

URN

资源名称唯一标识一个实体的标识符,但是不能给出实体的位置。系统在试着从Web上找到该实体之前,可以先在本地寻找一个实体。它也允许Web位置改变,然而这个实体却还是能够被找到。URN标识持久性

Internet

资源。URN可以提供一种机制,用于查找和检索定义特定命名空间的架构文件。尽管普通的

URL

可以提供类似的功能,但是在这方面,URN

更加强大并且更容易管理,因为URN

可以多个URL。与URL不同,URN

与地址无关。46实体指代其他复杂的结构可以避免重复的输入实体的两种类型一般实体定义一般实体的格式如下:<!ENTITY

实体名“文本内容”〉如:<!ENTITY

lettersign“某网络公司销售部门市海淀区中关村88号,100000"〉另外,也可以指定一个实体代替一个外部文件的内容,此时要使用SYSTEM关键字。例如:<!ENTITY

lettersign

SYSTEM“http:

/lettersign.xml”〉。在这个例子中,XML处理器将用指定文件的内容来替换实体指示。参数实体与一般实体相同,参数实体既可以是的也可以是外部的。不过,参数实体只用在DTD中。参数实体的格式与一般实体很类似,只不过中间要加上“%”符。<!ENTITY%实体名"文本内容"〉47实体的使用方式实体对于实体的应该放在文件类型DOCTYPE中。DOCTYPE一般放在前。这样一来,XML文件头(即XML

和DTD)之后,XML元文件就变为下面的形式:<?xml

version="1.0"?><!DOCTYPE

文件根元素名[实体

部分]><文件根元素名>具体数据内容</文件根元素名>实体实体

指的是一个在实体中已经过的一个实体。实体的形式很简单:&实体名;48实体有以下几点规则一定要注意XML实体之前,必须已经在XML文件中对此实体进行过

;在在实体中不能出现空格。也就是说,&lettersign;和&letterhead;的用法都会引起错误。尽管在一个实体中可以再其它实体,但是不能出现循环说,一个实体不能

它自己;同样,也不能出现实体A。也就是实体B,然后实体B再反过来

实体A的情况。实体

不能在DOCTYPE

中出现。实体

的文本必须是形式良好的XML。同样,参数实体的

与一般实体的

大同小异,只是要把实体前的符号&换为%就可以了,形式是:%实体名;此外,实体

不仅可以出现在字符数据中,还可以出现在标记的属性中。例如:<联系人公司=“B公司”地址=“&B公司地址;”>,不但要遵守前面所述的实体 的种种规则,如果在属性中出现实体还要注意以下两点:在标记属性中不能一个外部实体。的文本中不能出现字符“<”,否则替换后就不再是一个“形式良好的”XML文件了。4950下面,

就来看一个完整的实体和实体的例子:<?xml

version="1.0"?>市五街1234号”>路9876号”〉<!DOCTYPE

联系人列表

[<!ENTITY

A公司地址“<!ENTITY

B公司地址“]><联系人列表><联系人><

>

</

><公司>>A公司</公司>><地址>&A公司地址;</地址></联系人><联系人><

>

</

><公司>B公司</公司><地址>&B公司地址;〈/地址〉</联系人><联系人><

>

</

>><公司>B公司</公司><地址>&B公司地址;〈/地址〉</联系人></联系人列表>为了避免把字符数据和标记中需要用到的一些特殊符号相,XML还提供了一些有用的实体。这些特殊的XML实体

包括:字符实体>><<&;""’'例子解析结果3<53<55>35>3A

;BA&BJoe'sJoe’s"yes"“yes”51一般实体实体:将实体所指代的内容定义在使用该实体的XML文档中。外部实体:所指代的内容在使用该实体的XML文档的外部定义。解释实体:一定会非解释实体:可能ML解析器所解释并使用的实体。

ML解析器忽略的实体。其中,非解释实体一定是外部实体,故实体可分为三类:解释实体(外部解释实体

外部非解释实体实体)52解释实体实体 的语法<!ENTITY

实体名“实体内容”>实体的使用语法&实体名;解释实体可以在

DTD中<!DOCTYPE

根元素名[<!ENTITY

实体名“实体内容”>]>解释实体也可以在外部DTD子集中<!DOCTYPE根元素名SYSTEM

“URI”>使用外部文档类型定义的优点方便XML文档的编写、修改、复用;XML文档的归一化将XML文档中的所有实体扩展成它所指代的具体内容;53外部解释实体XML文档中一个完整的文件,需要外部解释实体<!ENTITY

实体名SYSTEM“实体定义文件URI”>例:<!ENTITY

ABC

SYSTEM

/News.txt”>而在XML文档中使用&ABC;外部非解释实体"

NDATA

gif><img

src="logo"/><?xml

version="1.0"

standalone="no"

?><!DOCTYPE

img

[<!ELEMENT

img

EMPTY><!ATTLIST

img

src

ENTITY

#REQUIRED><!ENTITY

logo

SYSTEM

"<!NOTATIONgif

PUBLIC

"gif

viewer">

]>实体名用在属性值中,&logo;

×logo

√54<Student

ID="100"><Name>TOM</Name></Student>属性值 引号(“)或单引号(‘)分隔(如果属性值中有’,用”分隔;有“,用‘分隔)一个元素可以有多个属性,它的基本格式为:<元素名属性名="属性值">特定的属性名称在同一个元素标记中只能出现一次属性值不能包括<,&,>,如果需要用则应用替代符;属性只能包含在起始标记中。属性 名规则同元素命名。5556属性与子元素的有关问题属性的表达方式:<Student

ID="100"><Name>TOM</Name></Student>子元素的表达方式:<Student

><id>

100</id><Name>TOM</Name></Student>属性与子元素的有关问题属性很简洁,有很好的可读性,如果使用过多的子元素会降低可读性。要采用子元素的情况:①

一个属性不能包含子属性,但子元素可以包含自己的子元素。故对复杂的信息,要采用复合的子元素来说明。②若元素的开始标记中包含过多的属性,或标记中的元素名称、属性名称、属性取值等过长,造成整个开始标记过长而降低程序的可读性,则可以考虑使用子元素代替属性。③

属性不容易扩展。④

属性不能够描述结构(子元素可以)。⑤

属性很难被程序代码处理。⑥

属性值很难通过DTD进

试。一般来说子元素可以完全代替属性。57有些时候应该为一个元素设计一个ID

,通过这个ID可以特定的XML元素:存取<messages><note

ID="501"><to>

Tove</to><

from>Jani

</from><day>12</day><year>99</year><heading>Reminder</heading><body>

Don't

forget

me

this

weekend!</body></note><note

ID="502">……</note></messages>结论元数据(与数据有关的数据)应该以属性的方式,而数据本身应该以元素的形式

。5859一对标记之间出现的字符数据可以是任何合法的

UNICODE字符,但不能包含字符“〈”。这是因为,字符“〈”被预留用作标记的开始符。在XML中,起始和结束标记之间出现的所有合法字符都被忠实地传给XML处理程序。比方说〈格式>一段文字〈/格式>和〈格式>一段文字〈/格式>是不同的,因为后者的文本数据比前者多了两个换行符。#PCDATA是被分析字符数据。使用#字符使得在DTD元素说明中,#PCDATA不可能错当成名字,因为元素名中不能用#字符。被分析字符数据来自SGML,这意味着,XML处理器将

文档的文本并搜索暗示标记的特征记号--尤其是<和&字符。60有些时候,希望XML处理器能够把在数据中引入的标记当作普通数据而不是真正的标记来看待。这时,CDATA为你助了。另外还有些时候,就象在程序中引入注释一样,可能希望在XML文件中加入一些用作解释的字符数据,并且希望XML处理器不对它们进行任何处理。这种类型的文本称作注释(COMMENT)文本。用于把整段包含大量<、>、&或者“的文本解释为纯字符数据而不是标记的情况。CDATA节中的所有字符都会被当作元素字符数据的常量部分,而不是XML标记。在CDATA部件之内的文本会被解析器忽略。语法:<![CDATA[内容]]>61<script><![CDATA[function

f1(a,b){if

(name=“cai

&&

a

<

0){return

1}

else

{return

0}}]]></script><script>function

f1(a,b)

{if

(name=“cai”&&

a

<0){return1}

else

{return

0}}</script>62CDATA注意事项:可以输入任意字符(除]]>或者<![CDATA[外)CDATA部件之间不能再包含CDATA部件(不能嵌套)。同样要注意在字符串“]]>”之间没有空格或者换行符。可以利用CDATA标记将含有 字符的文本括起来;会不

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

CDATA是不被解析器解析的文本。文本内的会被当作标记,实体不会被展开。63在ADO.NET

中,传输数据的格式是

XML。数据需要从数据 区移动到数据集以及从数据集移动到各种组件。类似地,如果需要保持数据(

例如保持到文件中),则将其 为XML。如果有XML

文件,则可以像使用任何数据源一样使用它,并从它创建数据集。在ADO.NET

中,XML

是数据的基本格式。ADO.NET

数据API

自动用数据集内的信息创建XML文件或流,并将它们发送给另一个组件。第二个组件可以调用类似的API

将XML

读回数据集。(数据不以XML

格式 在数据集内(例如,不能使用XML分析器分析数据集内的数据),而是以更有效的格式。)6465XML

Internet

的DataSet

可以被序列化为XML使用XML

格式,可以方便地在间传送DataSet

的内容格式客户端和服务器之大型机可读

XML

文件

浏览器可读可以使用不同的XML

对象同步和转换DataSet

的数据人可读Web

服务器DataSetXML

文件DataSet对象XmlData对象XslTransform对象XML

或HTML

文件数据库DataAdapterDoc.SaveWriteXMLXSLT

文件XML

文件ReadXMLXML

文件66XML及其一些相关技术(包括XPath、XSLTransformation和XML

Schema)是ADO.NET

的基础,XML

在ADO.NET

的构建和交互方面的参与深入得多。可以用以下几点来概括

ADO.NET

与XML

的更强的交互和集成:对象序列化和

处理双编程接口XML

驱动的批处理更新(仅适用于SQL

Server

2000/2005)ADO.NET和

XML

类提供了一种

的中间

API,程序员可通过同步的双编程接口来使用它。可以使用

XML

基于节点的分层法或基于列的表格式数据集关系法来

和更新数据。可以在任何时候从数据的数据集表示形式切换到

XML

DOM,反之亦然

。67DataSet

对象以二进制格式 在内存中数据集始终以一种名为

DiffGram

的特殊XML

格式来进行

处理和序列化。应用程序可以通过一组方法来使用同样的序列化功能,其中的一对方法显然非常突出。它们是ReadXml

和WriteXml。右表为在读写中使用XML数据集的方法如上表所示,使用

DataSet

和XML

时,可以将数据和架构信息作为不同的实体进行管理。可以接受来自数据集的

XML

架构,将它作为字符串使用,也可以将它写入磁盘文件或将它加载到一个空的DataSet

对象68ReadXml

方法填充从多个源 的DataSet

对象,这些源包括磁盘文件、.NET

流或

XmlReader对象的实例。该方法可以处理任何类型的

XML文件,但是,如果

XML文件具有构形相当不规则的非表格式结构,则在以列和行的格式呈现时,当然可能产生一些问题。下面的代码片段显示了用于从XML

加载数据集的典型代码。StreamReader

sr

=

new

StreamReader(fileName);DataSet

ds

=

new

DataSet();ds.ReadXml(sr);

//

defaults

toXmlReadMode.Autosr.Close();将XML

源的内容加载到数据集时,ReadXml

不合并其主键信息相匹配的行69数据集的XML

表示形式可以使用WriteXml

方法写入文件、流、XmlWriter对象或字符串。XML

表示形式可以包括架构信息,也可以不包括架构信息。WriteXml

方法的实际行为可通过可以传递的

XmlWriteMode

参数来控制。枚举中的值决定着输出的布局。数据集表示形式包括表、关系和约束定义。如果不选择使用

DiffGram

格式,数据集的表中的行就只写入其当前版本。下表概括了XmlWriteMode

可以使用的写选项XmlWriteMode.IgnoreSchema

是默认选项下面的代码显示了将数据集序列化为

XML

的典型方式。//

ds

is

the

DataSetStreamWriter

sw

=

new

StreamWriter(fileName);ds.WriteXml(sw);

//

defaults

to

XmlWriteMode.IgnoreSchemasw.Close();70使用GetXml

方法以字符串的形式返回XML

形式的数据DataSet

ds=

newDataSet();SqlDataAdapter

da

=

new

SqlDataAdapter("select

*fromAuthors",

conn);da.Fill(ds);string

strXmlDS

=

ds.GetXml();ReadXmlSchema

方法

将XML

架构读入DataSetWriteXmlSchema

方法

将XML

架构形式的DataSet

结构写入文件或流GetXmlSchema

方法

以字符串的形式返回DataSet

的XML

表示形式的XSD架构71有几个因素影响了从DataSet

对象创建的

XML

文档的最终结构。这些因素包括:使用的XML

整体格式

—DiffGram或当前内容的无格式分层表示形式架构信息是否存在嵌套关系表列如何

XML

元素ADO.NET

框架只对

DataSet

对象提供显式

XML

支持。不过,将DataView

或DataTable

转换为

XML

并不是特别难。在这两种情况下,都必须使用临时的数据集作为要另存为XML

的行集的容器。每个

ADO.NET

对象只能由一个容器对象

,DataTable

对象是非常重要的。不能有相同的实例,例如,一个DataTable

对象属于两个不同的

DataSet

对象。与DataTable

对象不同的是,DataView

不是数据集的标准组成部分,因此,为了将它保存到

XML,应该将

DataView

转换为一个表对象。72DiffGr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论