区分开来。注意的是:
设置URL并不是说这个标识真的要到那个网址去读取,仅仅作为一种区别的标志而已。
1.3.2.6entity的语法
entity翻译为"实体"。
它的作用类似word中的"宏",也可以理解为DW中的摸板,你可以预先定义一个entity,然后在一个文档中多次调用,或者在多个文档中调用同一个entity。
entity可以包含字符,文字等等,使用entity的好处在于:
1.它可以减少差错,文档中多个相同的部分只需要输入一遍就可以了。
2.它提高维护效率。
比如你有40个文档都包含copyright的entity,如果需要修改这个copyright,不需要所有的文件都修改,只要改最初定义的entity语句就可以了。
XML定义了两种类型的entity。
一种是我们这里说的普通entity,在XML文档中使用;另一种是参数entity,在DTD文件中使用。
entity的定义语法为:
DOCTYPEfilename[
ENTITYentity-name"entity-content">
]
>
例如我要定义一段版权信息:
DOCTYPEcopyright[
ENTITYcopyright"Copyright2001,John.Allrightsreserved">
]
>
如果我的版权信息内容和他人共享一个XML文件,也可以使用外部调用的方法,语法像这样:
DOCTYPEcopyright[
ENTITYcopyrightSYSTEM"
]
>
定义好的entity在文档中的引用语法为:
&entity-name;
例如,上面定义的版权信息,调用时写作?
Copyright;
完整的例子如下,你可以copy下来存为copyright.xml观看实例:
xmlversion="1.0"encoding="GB2312"?
>
DOCTYPEcopyright[
ENTITYcopyright"Copyright2001,John.Allrightsreserved">
]>
XMLajie
ajie@
20010115
©right;
3.3.2.7Schema的语法
XMLSchema是Microsoft指定的技术规范它是基于XML-data和DCD的。
DTD使用了一种特殊的规范来定义在各种文件中使用XML标记的规范。
但是,有些常用的限制不能用DTD来表述。
这就需要使用Schema,它的很多情况下的作用和DTD差不多。
但它的功能要超过DTD。
XMLSchema是用来描述XML元素和属性的。
它基本上包括属性和元素类型说明,可以为XML元素和属性提供内容模块。
Schema相对与DTD的明显不同是XMLSchema文档本身也是XML文档,而不像DTD一样使用特殊格式。
这给用户带来了三个好处:
不需要知道两种语法来编写语法合格的XMLSchema。
软件工具可以利用XML文档和Schema之间的语法通用这一点为两者提供支持。
作为XML文档,XMLSchema能够扩展出去。
能向XMLSchema中加入元素和属性。
只要元素和属性名域不同,它们在一个Schema中是合法的,这个大大方便了用户和开发者,因为他们可以使用相同的工具来处理XMLSchema和其它XML信息,而不必专门为Schema使用特殊工具。
Schema定义的数据类型要比DTD全面。
DTD值允许把内容类型定义为一个字符串。
XMLSchema允许把内容类型定义为整型、浮点型、数据型、布尔型或者许多其它的简单数据类型。
如果想要编写一个应用软件来处理某个值为整型的元素内容,在DTD的例子中必须把它转换为整型,而在Schema例子中,可以直接得到那个整数值。
XMLSchema集成了名域,允许文档的特殊节点与Schema中的类型说明联系起来。
联系XML节点和DTD的唯一方法是通过DOCTYPE说明。
这是有限的,因为每个文档实例只能用一个DTD。
多个Schema可以来描述一个XML文档,因为XMLSchema自身不描述XML文档,它描述XML元素。
Schema的优势以及它的可以扩充的能力使它成为描述数据的最佳的选择之一。
下面列出了Schema的一些例子:
//表示该元素出现次数大于1
//表示该元素仅包括文本不含有子元素
//表示所列的子元素必须安升序出现
1.3.3用XSL显示XML文档
XML是一种元标记语言,没有许多固定的标记,为WEB开发人员提供了更大的灵活性。
使用XML我们可以做到自定义标记,用标记表明内容的含义。
这样在Internet上交流资料时,为用计算机处理文档提供了极大的方便。
然而,由于XML并没有为标记规定显示方式,我们无法在浏览器中看到以诸如表格方式显示的XML文档。
为了解决这个问题,XML可以采用以下两种技术:
CSS与XSL。
但使用CSS来格式化XML文档的效果交不令人满意,而XSL则是专门为了XML所设计的样式表。
XSL包含两大部分:
XSLT和XSLFormattingObject。
XSLT(XSL31Transformations)一种用来转换XML文件的语言。
XSLFormattingObject:
一组用来格式化(排版)语意的词汇。
XSL转换XML分为两个步骤:
(1)XSL处理器首先要做的是通过分析器(DOM或SAX)技术读取XML标记及数据。
当浏览器通过XMLDOM对象读取到XML的树状结构与数据后,将XML树状结构重新排行组合后产生一个暂时的数状结构,这个树状结构称为结果树。
在这个结果树产生后,若又出现了新的标记或数据,必须把它一起并入结果树。
(2)结果树也是树状结构,可以利用DOM技术访问结果树的数据,其中数据以节点方式显示,并且预留一个记录样式的位置。
XSL处理其中的程序将这些数据转换为另一种Well-FormedXML文件(如:
WML、HTML、VoiceXML等)。
1.3.4DOM技术
DOM是对XML开发者相当重要的,对于XML应用开发来说就是一个对象化的XML数据接口。
最基本的XML开发通常都要使用它。
简单说,DOM就是一组对象的集合,通过操纵这些对象,我们就能操纵XML和HTML数据。
DOM全称是DocumentObjectModel,人如其名,DOM就是一个文档对象组成的模型,它不光用于XML,最先是起于HTML的。
对作过Web开发的人,特别是写过动态DHTML的人,应该对HTML中的文档对象有一定概念,DOM就是这样一个对象模型的标准。
DOM另外又是一个接口,一个与语言无关的接口,应用通过这个接口来和XML或HTML内的数据打交道。
无论是在浏览器里,还是在浏览器外,在服务器上,还是客户端,我们只要用XML就会碰到DOM。
1.DOM的来由
为什么要定义这样一个接口呢?
这样讲吧,我们知道数据库有标准的ODBC/JDBC这样的接口规范,那么我们使用XML数据如果没有一个统一的接口,我们写程序是不是要每个人都要自己去处理XML的语法细节,如果我们手头有XML的语法分析器(有人译为解析器),它也必然有一个接口让我们通过它访问XML数据,所有语法分析器的接口如果都不相同,我们开发就必须针对某一个分析器,如果换了分析器,程序就必须重写。
到这里,又和数据库有可比性了,我们编数据库应用可以不管后面的数据库系统究竟是ORACLE还是SYBASE,或INFORMIX,是因为有了ODBC,所以要是我们做XML应用开发,就应该有一个统一的XML数据接口,这个接口就是DOM。
2.DOM的三部分
目前的DOM分为核心(core)、HTML、XML三部分。
核心:
这部分是结构化文档比较底层的对象的集合,但他们就已经可以表达出任何HTML和XML文件了。
HTML和XML:
这两部分是专为XML和HTML提供的另外的高级接口,使操纵者两类文件更方便。
3.DOM组成
图1.1是DOM的整体组成图,给出了DOM模型基本组成的概念。
图1.1DOM整体组成
4.文件树
DOM中的最基本对象应该就是Node了。
从它又派生出许多类型的node。
所有这些node组成一棵文件树,它包含了XML或HTML文档的几乎全部信息。
在结构化文档中,信息是按层次化的树形结构组织的。
所以结构化文档的模型的组织也必然是树形的。
Node简单的说,就是上面树形结构中的节点,但对XML来说还包括其他XML语法相关的节点,包括XML声明,文件类型声明,处理指令等等。
Node提供一些基本属性和操作,各种类型的Node则继承Node的属性和操作,同时有各自特殊的属性和操作。
比如ElementNode。
5.基本对象
上面已经讲了DOM中最基本的对象就是节点,它的接口定义如下:
从NODE派生出的几个比较重要的节点类型有Document、Element、Attribute、Text。
Document是DOM树的根,它代表一个完整的XML文档。
它会有一些自己的子节点,至少应该有一个文档元素的子节点,这个节点类型为Element,是XML文件最外层的根元素,此外他还可能有DocumentType(唯一),ProcessingInstruction,Comment这几种作为子节点。
Element代表XML元素,是最常用的节点,它可以组成以它为根的DOM的子树。
他还可以有Element子节点,以及Attribut,Text,ProcessingInstruction,CDATASection,Comment子节点。
Attribute是XML元素的属性,它的父节点必然是Element,它的子节点有Text和EntityReference。
除了Node,DOM里还有两个比较重要的对象:
NodeList它实现的一个节点的序列,用于表示有顺序关系的一组节点,比如某个节点的孩子节点序列,它还出现在一些方法的返回值中,例如GetNodeByName。
NamedNodeMap它表示的是一组节点和其唯一的名字的对应关系,这个对象主要用在属性节点的表示上。
1.4XML与数据库
XML的特性使之成为在线和离线数据的共同语言。
现在的问题是,怎样管理XML标记的数据。
一种可行的方法是用数据库对XML进行存储、检索和操作,即把XML标记的数据收入一个框架中,在一种更容易管理、更系统化、更为人们所熟悉的环境中完成搜索、分析、更新和成果输出工作。
目前有两种不同的观点:
一种观点认为,只有以XML原始的格式存储XML的数据库才能称为XML数据库;另一种观点认为,只要能存入和检出XML,且它本身又是一个数据库,那它就是一个XML数据库,而不必考虑数据是怎样存入的。
而我们认为,凡内部不是以XML格式存储的XML数据库,叫做“XML-enabled数据库”;如果内部以XML格式存储数据,就称为“native-XML数据库”。
使用现有的数据库类型和产品而不是以原始格式来存储XML,是出自以下几种考虑:
首先,普通的关系数据库和面向对象数据库己尽人皆知,而native-XML数据库是新的;其次,人们熟知现有的关系数据库和面向对象数据库,也了解它们的行为和性能,因此他们不愿意转向native-XML数据库,因为其性能,特别是可伸缩性尚未经过检验;最后,在企业看来,选择关系数据库和面向对象数据库是比较安全的,使用新的native-XML数据库具有一定的风险。
现在己经有一些能够很好地处理XML的XML-enabled数据库,并且是由久经考验的关系数据库和面向对象数据库担此重任。
这些数据库在收到XML后,将其分解为字段并按通常的方式存储它们,当检索XML时,这些字段再被拼接成原状。
在关系数据库中处理XML数据时,可用第三方中间件进行转换,如XML-DBMS,这是一种基于JavaDatabaseConnectivity(JDBC)的工具,可以在XML文档和数据库之间传输数据。
但是,利用关系数据库和面向对象数据库存储XML也有很大的缺点,例如,XML最具吸引力的特性之一是其分层结构,而关系数据库却将XML映射成关系表,从而将XML结构变成了平面的行和列。
另外,遇到大型或复杂文档时,在XML与数据库之间进行来回转换要耗费相当多的处理时间,从而降低了Web页面的生成速度。
目前,native-XML数据库已经开始出现,尽管人们还不能完全信任它,但的确有一些n
展开阅读全文
相关搜索