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

下载本文档

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

文档简介

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

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

3、式基于带有指示字段意义的行标题的普通正文概念上类似于email 的标题不允许嵌套结构, 没有标准的 “类型” 语言与底层文档结构联系的太紧密 (行, 空格, 等等)每个基于XML的标准利用下列方法定义合法的元素XML类型说明语言用来说明语法DTD (Document Type Descriptors)XML Schema语义的文本描述XML 允许新标记根据需要加以定义然而, 可能受到DTD 的约束存在多种多样的工具用来分析, 浏览和查询 XML文档/数据5XML数据的结构标记: 数据节的标号元素: 以 开始并以配套的 结束的数据节元素必须合适地嵌套合适的嵌套 . 不合适的嵌套 . 形式地: 每

4、个开始标记必须具有唯一的匹配的结束标记, 并位于同一父元素的上下文中.每个文档必须具有单一的顶级元素6嵌套元素的例子 Hayes Main Harrison A-102 Perryridge 400 . . 7嵌套的动机数据嵌套在数据传输中有用例如: 表示customer-id, customer name, and address的元素嵌套于order元素关系数据库系统不支持或不鼓励嵌套当有多个定单, customer name and address 即冗余存储规范化将每个定单中的嵌套结构替换成引用存储客户姓名和地址的表的外键对象关系数据库系统支持嵌套但是在传输数据时嵌套是适宜的外部应用不

5、能直接访问被外键引用的数据8XML数据的结构(续)在XML中文本与子元素的混合是合法的. 例如: This account is seldom used any more. A-102 Perryridge 400 对标记文档有用, 但不宜用于数据表示9属性元素可有属性 A-102 Perryridge 400 属性声明为元素开始标记中的 name=value 对元素可有多个属性, 但每个属性名只能出现一次10属性Vs. 子元素子元素与属性的差别在文档的场合, 属性是标记的一部分, 而子元素内容是文档内容的一部分在数据表示的场合, 区别不清楚而容易混淆同一信息可有两种方式表示 . A-101

6、建议: 利用属性作为元素的标识, 利用子元素作为内容11XML 语法的更多细节没有子元素或文本内容的元素可简化为以/来结束开始标记并删除结束标记为存储可能包含标记的字符串数据, 而又不将标记解释为子元素, 如下使用CDATA!CDATA 这里, 和 视为字符串12名字空间XML数据可能在组织之间交换同一标记名在不同的组织中可能有不同的意义, 从而导致对所交换的文档的混淆使用唯一的串作为元素名字可避免混淆更好的解决方法: 使用 unique-name:element-name使用XML名字空间可以避免在所有文档间使用很长的唯一名字 Downtown Brooklyn 13XML文档模式数据库模式

7、限制了可以存储什么信息, 以及存储的值的数据类型XML文档不需要具有相关的模式但是, 模式对于XML数据交换是很重要的否则, 一个站点不能自动解释从另一个站点接收的数据说明XML模式的两种机制文档类型定义 (DTD)广泛使用XML Schema 更新的, 尚未广泛使用14文档类型定义 (DTD)XML文档的类型可以使用DTD来说明DTD 限制了XML数据的结构可以出现什么元素元素可以/必须具有什么属性每个元素内可以/必须出现什么子元素, 以及出现多少次.DTD 不限制数据类型 XML中的所有值都表示为串DTD 语法15DTD中的元素说明子元素可说明为元素名, 或者#PCDATA (parsed

8、 character data), 即字符串EMPTY (无子元素) 或ANY (任何东西都可)例如 子元素说明可以有正则表达式 表示法: “|” - 可替换选则 “+” - 出现1 次以上 “*” - 出现0 次以上16Bank DTD!DOCTYPE bank 17DTD中的属性说明属性说明: 对每个属性名字属性类型 CDATAID (identifier) or IDREF (ID reference) or IDREFS (multiple IDREFs) 后面详述是否强制的 (#REQUIRED)具有缺省值 (value), 或都不是 (#IMPLIED)例如18ID与IDREF元素

9、最多只能有一个类型为ID的属性一个XML文档中的每个元素的ID属性的值必须互不相同这样ID属性值就是对象标识类型为IDREF的属性必须包含同一文档中的某个元素的 ID值类型为IDREFS的属性包含 ID值的集合(0 或多个). 每个ID值必须包含同一文档中的某个元素的ID值19带有属性的银行DTD具有 ID 和 IDREF 属性类型的银行DTD. !DOCTYPE bank-2 declarations for branch, balance, customer-name, customer-street and customer-city20具有ID和IDREF属性的XML数据 Downto

10、wn 500 Joe Monroe Madison Mary Erin Newark 21DTD的局限性没有文本元素和属性的类型系统所有值都是串, 没有整数, 实数等.难于说明子元素的无序集合在数据库中次序通常是无关紧要的(A | B)* 允许说明一个无序集合, 但是不能保证A和B只出现一次ID和IDREF是没有类型的帐户的owners 属性可能包含对另一个帐户的引用, 这是无意义的理想情况下owners 属性应该限制为引用客户元素22XML SchemaXML Schema 是一个更精细的模式语言,可以解决DTD的缺点. 它支持值的类型例如整数, 串, 等等还可以对最小/最大值加以限制用户定

11、义类型与DTD不同的是,语言本身是用 XML语法说明的更标准的表示, 但累赘与名字空间结合还有许多其他特色List 类型, 唯一性与外键约束, 继承 .但是: 比DTD复杂得多, 尚未广泛使用.23银行DTD的XML Schema 版本 . definitions of customer and depositor .24查询与转换XML数据从一个XML模式到另一个的信息翻译对XML数据的查询上述两种情况是紧密相关的, 并用同样的工具处理标准XML查询/翻译语言XPath由路径表达式组成的简单语言XSLT设计用来从XML翻译到XML或从XML翻译到HTML的简单语言XQuery具有丰富功能的X

12、ML查询语言提出了多种多样的其他语言, 其中一些构成了Xquery标准的基础XML-QL, Quilt, XQL, 25XML数据的树模型查询与转换语言基于XML数据的树模型一个XML文档形成一棵树, 结点对应于元素和属性元素结点具有子结点, 可以是属性或子元素元素的文本形成该元素的文本子结点一个结点的子结点按照他们在XML文档中的次序排序元素和属性结点 (除了根结点) 具有单一的父结点, 它是一个元素结点根结点具有具有单一子结点, 即文档的根元素我们使用术语结点, 子结点, 父结点, 兄弟, 祖先, 后裔, 等等, 都应该按照上述XML数据的树模型来解释.26XPathXPath 利用路径表

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

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

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

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

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

18、hn Mary 34创建XML输出 (续)注意: 不能在另一个标记中直接插入xsl:value-of 标记例如前例中不能直接用xsl:value-of创建的属性XSLT提供了构造 xsl:attribute to来处理这种情形xsl:attribute 向前面的元素加入属性例如 在输出中返回形如 .xsl:element 用于创建具有计算出的名字的输出元素35结构递归模板的动作可以是递归应用模板于匹配元素的内容例如 输出例: John Mary 36XSLT中的联接XSLT中的键使得可以根据子元素或属性的值来查找元素键必须先声明(有名字), key() 函数然后可用于查找. 例如 xsl:va

19、lue-of select=key(“acctno”, “A-101”)键允许某些联接可在XSLT中得到表达xsl:template match=“depositor”.37XSLT中的排序模板内使用xsl:sort 指示符导致所有匹配该模板的元素被排序排序在应用其他模板之前进行例如 38XQueryXQuery 是一个通用的XML数据的查询语言当前正在被World Wide Web Consortium (W3C)标准化中教材中的描述基于该标准的March 2001 草案. 最后版本可能有不同, 但主要特色很可能保持不变.Xquery引擎的Alpha版本可从Microsoft免费获得XQue

20、ry 源自Quilt查询语言, 它又是出自SQL, XQL 和XML-QLXQuery 使用 for let where . result 语法 for SQL from where SQL where result SQL select let 允许定义临时变量, 在SQL中没有对应39XQuery中的FLWR语法For子句使用Xpath表达式, for子句中的变量即在 Xpath返回的值集合上变化XQuery 中的简单FLWR表达式找出所有余额大于400的帐户, 每个结果都放入一对标记 . 中 for $x in /bank-2/account let $acctno := $x/acco

21、unt-number where $x/balance 400 return $acctno Let子句在此查询中不是必需的, 另外选择可以在Xpath中完成. 上面的 查询可写成:for $x in /bank-2/accountbalance400return $X/account-number 40路径表达式和函数for子句中的路径表达式用于约束变量, 但也可以用于其他地方例如路径表达式可用于 let 子句, 将变量约束到路径表达式的结果函数distinct( ) 可用于在路径表达式结果中删除复本函数document(name) 返回命名文档的根例如 document(“bank-2.x

22、ml”)/bank-2/account合计函数如sum( )与count( ) 可应用于路径表达式的结果XQuery不支持group by, 但通过嵌套查询可达到同样的效果, 即在 result子句中嵌套FLWR表达式 后面详述41联接联接的说明非常类似于SQLfor $b in /bank/account, $c in /bank/customer, $d in /bank/depositor where $a/account-number = $d/account-number and $c/customer-name = $d/customer-name return $c $a 同一查

23、询也可表达为利用Xpath选择: for $a in /bank/account $c in /bank/customer $d in /bank/depositor account-number =$a/account-number and customer-name = $c/customer-name return $c $a42改变嵌套结构下列查询将数据从bank信息的平面结构转换成bank-1的嵌套结构 for $c in /bank/customer return $c/* for $d in /bank/depositorcustomer-name = $c/customer-n

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

25、or $c in /bank/customer return $c/* sortby(name)可以在多个嵌套层次上排序(如先按customer-name排序, 每个客户内再按account-number排序) for $c in /bank/customer return $c/* for $d in /bank/depositorcustomer-name=$c/customer-name, $a in /bank/accountaccount-number=$d/account-number return $a/* sortby(account-number) sortby(custom

26、er-name) 45函数与其他Xquery特色具有XMLSchema的类型系统的用户定义函数 function balances(xsd:string $c) returns list(xsd:numeric) for $d in /bank/depositorcustomer-name = $c, $a in /bank/accountaccount-number=$d/account-number return $a/balance 对函数参数和返回值来说类型是可选的where子句谓词中的全称和存在量词some $e in path satisfies P every $e in pat

27、h satisfies P XQuery 还支持 If-then-else 子句46应用程序界面对XML数据有两种标准的应用程序界面:SAX (Simple API for XML)基于词法分析器模型, 用户为词法分析分析事件提供事件处理程序例如 元素开始, 元素结束不适合数据库应用DOM (Document Object Model)XML 数据经词法分析表示成一棵树提供各种函数来遍历DOM树例如: Java DOM API 提供Node类及方法 getParentNode( ), getFirstChild( ), getNextSibling( ) getAttribute( ), getData( ) (for text node) getElementsByTagName( ), 还提供修改DOM树的函数47XML数据的存储XML数据可以存储成非关系数据平面文件存储XML很自然但有Chapter 1中讨论的所有问题 (无并发, 无恢复, )XML 数据库专为存储XML数据建造的数据库在C+ OODB上实现DOM和陈述式查询在RDB上加一层来实现XML数据库当前尚无商业级的系统关系数据库数据必须翻译成关系形式优点: 成熟的数据库系统缺点: 翻译数据和查询的开销48在关系数据库中存储XML存储为串例如 将每个顶层元素存储为数据库中元组的一个串字段用一个关系存

温馨提示

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

评论

0/150

提交评论