可扩展标记语言(Extensible_第1页
可扩展标记语言(Extensible_第2页
可扩展标记语言(Extensible_第3页
可扩展标记语言(Extensible_第4页
可扩展标记语言(Extensible_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

1、第10章:XML,简介,XML:可扩展标记语言(ExtensibleMarkupLanguage)由WWWConsortium(W3C)定义原先是作为文档标记语言而非数据库语言文档利用标记来给出文档某一部分的额外信息例如XMLIntroduction派生自SGML(StandardGeneralizedMarkupLanguage),但比SGML简单可扩展:不同于HTML用户可以增加新的标记,并另外说明该标记在显示时应如何处理目标:从前是(现在仍然是?)替代HTML而作为在Web上出版文档的语言,XML简介(续),说明新标记以及创建嵌套标记结构的能力使得XML成为交换数据(而非仅仅文档)的重要

2、方法.XML的许多用途都属于数据交换应用,而不是作为HTML的替代品标记使得数据是(相对地)自描述的(self-documenting)例如A-101Downtown500A-101Johnson,XML:动机,数据交换对于今天的网络化世界是关键的例如:银行:资金转帐定货处理(特别是公司间的定货)科学数据化学:ChemML,遗传学:BSML(Bio-SequenceMarkupLanguage),组织之间的信息纸张流正被信息的电子流所取代每个应用领域都有自己的信息表示标准的集合XML已成为所有新一代数据交换格式的基础,XML动机(续),早期的格式基于带有指示字段意义的行标题的普通正文概念上类似

3、于email的标题不允许嵌套结构,没有标准的“类型”语言与底层文档结构联系的太紧密(行,空格,等等)每个基于XML的标准利用下列方法定义合法的元素XML类型说明语言用来说明语法DTD(DocumentTypeDescriptors)XMLSchema语义的文本描述XML允许新标记根据需要加以定义然而,可能受到DTD的约束存在多种多样的工具用来分析,浏览和查询XML文档/数据,XML数据的结构,标记:数据节的标号元素:以开始并以配套的结束的数据节元素必须合适地嵌套合适的嵌套.不合适的嵌套.形式地:每个开始标记必须具有唯一的匹配的结束标记,并位于同一父元素的上下文中.每个文档必须具有单一的顶级元素

4、,嵌套元素的例子,HayesMainHarrisonA-102Perryridge400.,嵌套的动机,数据嵌套在数据传输中有用例如:表示customer-id,customername,andaddress的元素嵌套于order元素关系数据库系统不支持或不鼓励嵌套当有多个定单,customernameandaddress即冗余存储规范化将每个定单中的嵌套结构替换成引用存储客户姓名和地址的表的外键对象关系数据库系统支持嵌套但是在传输数据时嵌套是适宜的外部应用不能直接访问被外键引用的数据,XML数据的结构(续),在XML中文本与子元素的混合是合法的.例如:Thisaccountisseldomu

5、sedanymore.A-102Perryridge400对标记文档有用,但不宜用于数据表示,属性,元素可有属性A-102Perryridge400属性声明为元素开始标记中的name=value对元素可有多个属性,但每个属性名只能出现一次,属性Vs.子元素,子元素与属性的差别在文档的场合,属性是标记的一部分,而子元素内容是文档内容的一部分在数据表示的场合,区别不清楚而容易混淆同一信息可有两种方式表示.A-101建议:利用属性作为元素的标识,利用子元素作为内容,XML语法的更多细节,没有子元素或文本内容的元素可简化为以/来结束开始标记并删除结束标记为存储可能包含标记的字符串数据,而又不将标记解释

6、为子元素,如下使用CDATA这里,和视为字符串,名字空间,XML数据可能在组织之间交换同一标记名在不同的组织中可能有不同的意义,从而导致对所交换的文档的混淆使用唯一的串作为元素名字可避免混淆更好的解决方法:使用unique-name:element-name使用XML名字空间可以避免在所有文档间使用很长的唯一名字DowntownBrooklyn,XML文档模式,数据库模式限制了可以存储什么信息,以及存储的值的数据类型XML文档不需要具有相关的模式但是,模式对于XML数据交换是很重要的否则,一个站点不能自动解释从另一个站点接收的数据说明XML模式的两种机制文档类型定义(DTD)广泛使用XMLSc

7、hema更新的,尚未广泛使用,文档类型定义(DTD),XML文档的类型可以使用DTD来说明DTD限制了XML数据的结构可以出现什么元素元素可以/必须具有什么属性每个元素内可以/必须出现什么子元素,以及出现多少次.DTD不限制数据类型XML中的所有值都表示为串DTD语法,DTD中的元素说明,子元素可说明为元素名,或者#PCDATA(parsedcharacterdata),即字符串EMPTY(无子元素)或ANY(任何东西都可)例如子元素说明可以有正则表达式表示法:“|”-可替换选则“+”-出现1次以上“*”-出现0次以上,BankDTD,DTD中的属性说明,属性说明:对每个属性名字属性类型CDA

8、TAID(identifier)orIDREF(IDreference)orIDREFS(multipleIDREFs)后面详述是否强制的(#REQUIRED)具有缺省值(value),或都不是(#IMPLIED)例如,ID与IDREF,元素最多只能有一个类型为ID的属性一个XML文档中的每个元素的ID属性的值必须互不相同这样ID属性值就是对象标识类型为IDREF的属性必须包含同一文档中的某个元素的ID值类型为IDREFS的属性包含ID值的集合(0或多个).每个ID值必须包含同一文档中的某个元素的ID值,带有属性的银行DTD,具有ID和IDREF属性类型的银行DTD.declarationsf

9、orbranch,balance,customer-name,customer-streetandcustomer-city,具有ID和IDREF属性的XML数据,Downtown500JoeMonroeMadisonMaryErinNewark,DTD的局限性,没有文本元素和属性的类型系统所有值都是串,没有整数,实数等.难于说明子元素的无序集合在数据库中次序通常是无关紧要的(A|B)*允许说明一个无序集合,但是不能保证A和B只出现一次ID和IDREF是没有类型的帐户的owners属性可能包含对另一个帐户的引用,这是无意义的理想情况下owners属性应该限制为引用客户元素,XMLSchema,

10、XMLSchema是一个更精细的模式语言,可以解决DTD的缺点.它支持值的类型例如整数,串,等等还可以对最小/最大值加以限制用户定义类型与DTD不同的是,语言本身是用XML语法说明的更标准的表示,但累赘与名字空间结合还有许多其他特色List类型,唯一性与外键约束,继承.但是:比DTD复杂得多,尚未广泛使用.,银行DTD的XMLSchema版本,.definitionsofcustomeranddepositor.,查询与转换XML数据,从一个XML模式到另一个的信息翻译对XML数据的查询上述两种情况是紧密相关的,并用同样的工具处理标准XML查询/翻译语言XPath由路径表达式组成的简单语言XS

11、LT设计用来从XML翻译到XML或从XML翻译到HTML的简单语言XQuery具有丰富功能的XML查询语言提出了多种多样的其他语言,其中一些构成了Xquery标准的基础XML-QL,Quilt,XQL,XML数据的树模型,查询与转换语言基于XML数据的树模型一个XML文档形成一棵树,结点对应于元素和属性元素结点具有子结点,可以是属性或子元素元素的文本形成该元素的文本子结点一个结点的子结点按照他们在XML文档中的次序排序元素和属性结点(除了根结点)具有单一的父结点,它是一个元素结点根结点具有具有单一子结点,即文档的根元素我们使用术语结点,子结点,父结点,兄弟,祖先,后裔,等等,都应该按照上述XM

12、L数据的树模型来解释.,XPath,XPath利用路径表达式来选择文档的部分路径表达式是用“/”分隔开的一系列步骤考虑在目录层次中的文件名路径表达式的结果:连同其元素/属性名可以匹配指定路径的值的集合例如/bank-2/customer/name在bank-2数据上计算得到JoeMary例如/bank-2/customer/name/text()返回同样名字,但不包括外围标记,XPath(续),起始“/”表示文档的根(顶级标记之上)路径表达式从左至右计算每一步都对前一步产生的实例集合进行操作选择谓词可以跟在路径中的任何一步后面,放在中例如/bank-2/accountbalance400返回余

13、额值大于400的account元素/bank-2/accountbalance返回包含余额子元素的account元素属性通过“”访问例如/bank-2/accountbalance400/account-number返回余额400的帐户的帐号IDREF属性不能自动dereferenced(后面详述),Xpath中的函数,XPath提供若干函数路径末端的函数count()计算该路径生成的集合中的元素个数例如/bank-2/accountcustomer/count()2返回多于2个客户的帐户还有测试结点相对于兄弟的位置的函数布尔连接词and和or以及函数not()可用于谓词中IDREF可用函数i

14、d()引用id()也能用于引用集合如IDREFS,甚至用于包含多个用空格分隔的引用的串例如/bank-2/account/id(owner)返回所有被account元素的owners属性引用的客户.,XPath的更多特色,运算符“|”用来实现并集例如/bank-2/account/id(owner)|/bank-2/loan/id(borrower)返回有帐户或贷款的客户但是,“|”不能嵌套在其他运算符内.“/”可用于跳过多层结点例如/bank-2/name在/bank-2元素下的任何地方找出任何name元素,不管包含在哪个元素当中.路径中的一步可以走向前一步生成的结点的父结点,兄弟,祖先和后

15、裔,而不仅仅是子结点“/”,如上述,是说明“所有后裔”的缩写形式“.”说明父结点.其他细节从略,XSLT,样式单存储文档的格式化选项,通常与文档分开例如HTML样式单可以说明字体颜色和标题大小等.XML样式单语言(XSL)最早设计用来从XML生成HTMLXSLT是一个通用的转换语言可以从XML翻译到XML,从XML翻译到HTMLXSLT转换是利用称为模板的规则表达的模板结合了Xpath的选择和结果的构造,XSLT模板,带有match和select部分的XSLT模板例xsl:template的match属性说明了一个Xpath中的样式匹配该样式的XML文档元素根据xsl:template元素内的

16、动作来决定如何处理xsl:value-of选择(输出)指定的值(这里是customer-name)对于不匹配任何模板的元素属性和文本内容原样输出模板递归应用于子元素模板匹配所有不匹配其他任何模板的元素用于确保其内容不被输出.,XSLT模板(续),如果一个元素匹配多个模板,只能使用一个至于是哪一个,依赖于一个复杂的优先方案/用户定义的优先级我们假定只有一个模板匹配任何元素,创建XML输出,未出现在xsl名字空间中的XSL样式表中的任何文本或标记都原样输出例如:将结果包入新的XML元素.输出例:JohnMary,创建XML输出(续),注意:不能在另一个标记中直接插入xsl:value-of标记例如

17、前例中不能直接用xsl:value-of创建的属性XSLT提供了构造xsl:attributeto来处理这种情形xsl:attribute向前面的元素加入属性例如在输出中返回形如.xsl:element用于创建具有计算出的名字的输出元素,结构递归,模板的动作可以是递归应用模板于匹配元素的内容例如输出例:JohnMary,XSLT中的联接,XSLT中的键使得可以根据子元素或属性的值来查找元素键必须先声明(有名字),key()函数然后可用于查找.例如,XSLT中的排序,模板内使用xsl:sort指示符导致所有匹配该模板的元素被排序排序在应用其他模板之前进行例如,XQuery,XQuery是一个通用

18、的XML数据的查询语言当前正在被WorldWideWebConsortium(W3C)标准化中教材中的描述基于该标准的March2001草案.最后版本可能有不同,但主要特色很可能保持不变.Xquery引擎的Alpha版本可从Microsoft免费获得XQuery源自Quilt查询语言,它又是出自SQL,XQL和XML-QLXQuery使用forletwhere.result语法forSQLfromwhereSQLwhereresultSQLselectlet允许定义临时变量,在SQL中没有对应,XQuery中的FLWR语法,For子句使用Xpath表达式,for子句中的变量即在Xpath返回的

19、值集合上变化XQuery中的简单FLWR表达式找出所有余额大于400的帐户,每个结果都放入一对标记.中for$xin/bank-2/accountlet$acctno:=$x/account-numberwhere$x/balance400return$acctnoLet子句在此查询中不是必需的,另外选择可以在Xpath中完成.上面的查询可写成:for$xin/bank-2/accountbalance400return$X/account-number,路径表达式和函数,for子句中的路径表达式用于约束变量,但也可以用于其他地方例如路径表达式可用于let子句,将变量约束到路径表达式的结果函数

20、distinct()可用于在路径表达式结果中删除复本函数document(name)返回命名文档的根例如document(“bank-2.xml”)/bank-2/account合计函数如sum()与count()可应用于路径表达式的结果XQuery不支持groupby,但通过嵌套查询可达到同样的效果,即在result子句中嵌套FLWR表达式后面详述,联接,联接的说明非常类似于SQLfor$bin/bank/account,$cin/bank/customer,$din/bank/depositorwhere$a/account-number=$d/account-numberand$c/cu

21、stomer-name=$d/customer-namereturn$c$a同一查询也可表达为利用Xpath选择:for$ain/bank/account$cin/bank/customer$din/bank/depositoraccount-number=$a/account-numberandcustomer-name=$c/customer-namereturn$c$a,改变嵌套结构,下列查询将数据从bank信息的平面结构转换成bank-1的嵌套结构for$cin/bank/customerreturn$c/*for$din/bank/depositorcustomer-name=$c/

22、customer-name,$ain/bank/accountaccount-number=$d/account-numberreturn$a$c/*表示$c绑定到的结点的所有子结点,没有外围的顶层标记,XQuery路径表达式,$c/text()给出没有任何子元素/标记的元素的文本内容XQuery路径表达式支持“”运算符用于解引用IDREF与XPath的id()函数等价,但更简单易用可以应用于IDREF的集合以得到一个结果集合标准的June2001版本已经将“”改为“=”,Xquery中的排序,Sortby子句可用于任何表达式的末尾.例如返回按姓名排序的客户for$cin/bank/custo

23、merreturn$c/*sortby(name)可以在多个嵌套层次上排序(如先按customer-name排序,每个客户内再按account-number排序)for$cin/bank/customerreturn$c/*for$din/bank/depositorcustomer-name=$c/customer-name,$ain/bank/accountaccount-number=$d/account-numberreturn$a/*sortby(account-number)sortby(customer-name),函数与其他Xquery特色,具有XMLSchema的类型系统的用

24、户定义函数functionbalances(xsd:string$c)returnslist(xsd:numeric)for$din/bank/depositorcustomer-name=$c,$ain/bank/accountaccount-number=$d/account-numberreturn$a/balance对函数参数和返回值来说类型是可选的where子句谓词中的全称和存在量词some$einpathsatisfiesPevery$einpathsatisfiesPXQuery还支持If-then-else子句,应用程序界面,对XML数据有两种标准的应用程序界面:SAX(Sim

25、pleAPIforXML)基于词法分析器模型,用户为词法分析分析事件提供事件处理程序例如元素开始,元素结束不适合数据库应用DOM(DocumentObjectModel)XML数据经词法分析表示成一棵树提供各种函数来遍历DOM树例如:JavaDOMAPI提供Node类及方法getParentNode(),getFirstChild(),getNextSibling()getAttribute(),getData()(fortextnode)getElementsByTagName(),还提供修改DOM树的函数,XML数据的存储,XML数据可以存储成非关系数据平面文件存储XML很自然但有Chapter1中讨论的所有问题(无并发,无恢复,)XML数据库专为存储XML数据建造的数据库在C+OODB上实现DOM和陈述式查询在RDB上加一层来实现XML数据库当前尚无商业级的系统关系数据库数据必须翻译成关系形式优点:成熟的数据库系统缺点:翻译数据和查询的开销,在关系数据库中存储XML,存储为串例如将每个顶层元素存储为数据库中元组的一个串字段用一个关系存储所有元素,或者用一个单独的关系存储每个顶层元素类型例

温馨提示

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

评论

0/150

提交评论