AnIntroductiontoDatabaseSystem中国人民大学信息学院第十六章XML数据库16.1概述 16.2XML简介16.3XML数据模型16.4SQL/XML16.5小结16.1概述XML(eXt endedMarkupLanguage)可扩展的标记语言用户可以定义自己的标记,用来描述文档的结构W3C(World WideWebConsortium)在1998年制定的一项标准,用于网上数据交换是标准通用标记语言SGML的一个子集 概述(续)XML在SGML和HTML的基础上发展起来的相对于HTML,XML具有如下的一些特点:更多的结构和语义可扩展性 自描述性数据与显示分离简洁性第十六章XML数据库16.1概述16.2XML简介16.3XML数据模 型16.4SQL/XML16.5小结16.2XML简介一、XML说明(XMLdeclaration)对XML 文档处理的环境和要求的说明必须在文档的第一行例如: 8" standalone="no"?>二、元素元素(element)是XML文档的主要组成部分标记名区分大、小写开 始于字母或下划线(_),后面可以跟任意长度的字母、数字、句点(.)、连接符(-)、下划线或冒号起始标记形式是<标记名>,终止标 记形式是标记名>嵌套有且只有一个根元素元素(续)8”standalone=“no”?>BeijingLibrary DatabaseSystemConcepts 26.50Kail yJone>SilenSmith IntroductiontoXML18.80 KailyJonehor>AQuerylangu ageforXML26.50>KailyJone pub>图16.1一个X ML文档示例三、属性描述元素的有关信息格式为:<元素名属性名=“属性值”>如。属性 值必须出现在单引号或双引号中一个元素可以有任意多个属性,每个属性取不同的属性名四、处理指令处理指令(processing instructions)是为使用一段特殊代码而设计的标记为处理XML文档的应用程序提供信息。组成:处理指令名称和数据其格式 为。例如五、注释注释以->结束注释可以在XML文档的任何地方插入六、良构的XML文档良构的(well-formed)XML文档是指:文档的构造 从语法上都是正确的只有一个顶层元素,即根元素至少包含一个元素,即文档中必须有根元素所有的起始标记都有与之对应的终止标记,或者 使用空元素速记语法所有的标记都正确的嵌套每一个元素的所有属性具有不同属性名七、实体用来定义重复使用的文档内容格式为:< !ENTITY实体名“实体内容”>例如引用实体的格式为&实体名 当XML处理器遇到字符串&DW时就用字符串DataWarehouse代替该实体DW第十六章XML数据库16.1概 述16.2XML简介16.3XML数据模型16.4SQL/XML16.5小结XML数据模型XML数据是 自描述的、不规则的,可以用图模型来表示XML数据模型(续)XML数据VS半结构化数据(1)XML中存在参照(2) XML中的元素是有序的(3)XML中可以将文本与元素混合(4)XML包含许多其他的内容XML数据模型:XMLInf ormationSet,Xpath1.0DataModel,DOMmodel和XMLQueryDataModelX ML数据模型(续)这四种模型都采用树结构。16.3XML数据模型16.3.1XMLDTD16.3.2XML Schema16.3.1XMLDTD文档类型定义DTD(DocumentTypeDescriptors)用来描述XM L文档的结构,类似于模式的概念DTD定义内容元素、属性元素出现的次序、出现的次数如何相互嵌套其他详细信息一、元素的定 义DTD定义元素的格式为:[例1]itle?,first-name,last-name)>[例2])>[例3][例4]me(title?,first-name,(middle-initial|middle- name)?,last-nam e)>[例5]二、属性的定义DTD中定义属性的格式为: 属性类型字符串类型枚举类型缺省声明#REQUIRED ,表示该属性在XML文件中必须出现#IMPLIED,表示该属性在XML文件中可以缺省声明缺省属性值[例6]STbookyearCDATA#IMPLIED>属性的定义(续)通常把DTD存储在一个后缀为.dtd的外部文件里[ 例7]一个XMLDTD示例dress(name,street,city,state,postal-code)>e(title?first-name,last-name)>)>-name(#PCDATA)>EMENTcity(#PCDATA)> 16.3XML数据模型16.3.1XMLDTD16 .3.2XMLSchemaXMLSchema定义XML模式的另外两个标准:XMLSchemaDocumentC ontentDescriptors(DCDs)XMLSchema用XML来定义其文档的模式,支持对结构和数据类型的定义 XMLSchema(续)XMLSchema的例子[例8]"> eRefname="year"/>ournal"/>ice>XMLSchema(续)XMLS chema(续)良结构的文档有效的文档无效的文档第十六章XML数据库16.1概述16.2XML简介16. 3XML数据模型16.4SQL/XML16.5小结16.4SQL/XMLSQL2003标准增加了对XML的支 持,定义了数据库语言SQL与XML结合的方式,扩展的部分称为SQL/XMLSQL/XML(续)SQL/XML(续)SQL/X ML定义了新的数据类型—XML数据类型,以及一组函数16.4SQL/XML16.4.1XML数据类型16.4.2X ML发布函数16.4.3XML提取函数16.4.1XML数据类型原生(Native)SQL数据类型:XML数据类型,用 “XML”表示[例1]创建一个书店表bookstore,其中bib列的类型是XML。CREATETABLEb ookstore(idINTPRIMARYKEY,bibXML);XML数据类型(续)[例2]可以将一个XML 文档加入书店bookstore中。INSERTINTObookstoreVALUES(1492, xmlparse(''00">English…''));XML数据 类型(续)XMLCast将某种SQL预定义类型的数据转换为一种XML类型将某种XML类型的数据转换为其他的SQL预定义类型或 XML类型格式XMLCAST(value-expressionAStype)16.4SQL/XML1 6.4.1XML数据类型16.4.2XML发布函数16.4.3XML提取函数16.4.2XML发布函数XM L发布函数的作用:从关系数据创建XML结构一、XMLElement函数创建一个XML元素,可以指定元素名字[例3]S ELECTe.id,XMLELEMENT(NAME"Emp",e.fname||''''||e.lname)AS"r esult" FROMemployeese;XML发布函数(续)XML发布函数(续)嵌套使用 [例4] SELECTe.id,XMLELEMENT(NAME"Emp",XMLELEMENT(NA ME"name",e.lname),XMLELEMENT(NAME"hiredate",e.hire) )AS"result"FROMemployeese;XML发布函数(续)XML发 布函数(续)参数是子查询[例5]SELECTe.id,XMLELEMENT(NAME"Emp", XMLELEMENT(NAME"name",e.lname), XMLELEMENT(NAME"dependants", (SELECTCOUNT() FROMdependantsdWHEREd.pare nt=e.id)))AS"result" FROMemployeese;XML发 布函数(续)XML发布函数(续)二、XMLAttributes函数为构建的元素生成一组属性仅在XMLElement函数中 使用XML发布函数(续)XML发布函数(续)三、XMLNamespaces给出名空间Namespaces[例7] SELECTe.id,XMLELEMENT(NAME"admi:employee",XMLNAMESPACES( ''http://www.admi.com''AS"admi"),XMLATTRIBUTES(e.workdeptA S"admi:department"),e.lastname)AS"result"FROMemplo yeeseWHEREe.job=''ANALYST'';XML发布函数(续)XML发布函数(续)四、XMLForest函 数生成一组元素XML发布函数(续)XML发布函数(续)五、XMLConcat函数将两个以上的XML数据值串接起来[例 9]SELECTe.id,XMLCONCAT(XMLELEMENT(NAME"first",e.fna me),XMLELEMENT(NAME"last",e.lname))AS"result "FROMemployeese;XML发布函数(续)XML发布函数(续)六、XMLAGG函数XMLAGG是一个聚 集函数参数是一个XML数据类型的表达式XML发布函数(续)[例10]SELECTXMLELEMENT(NAME"De partment",XMLATTRIBUTES(e.deptAS"name"),XMLAGG(XM LELEMENT(NAME"emp",e.lname)))AS"dept_list",COUNT() AS"dept_count"FROMemployeeseGROUPBYdept;XML发布函数(续)XML发布函 数(续)XML发布函数(续)ORDERBY子句指定返回值的串接顺序[例11]SELECTXMLELEMENT(N AME"Department",XMLATTRIBUTES(e.deptAS"name"),X MLAGG(XMLELEMENT(NAME"emp",e.lname)ORDERBYe.lnam e))AS“dept_list”, COUNT()AS"dept_count" FROMemployeeseGROUPBYdept;XML发布函数(续)XML发布函数(续)七、XMLCo mment函数生成注释[例12]XMLCOMMENT(''Thisisacomment'')结果生成isisacomment->XML发布函数(续)八、XMLPI函数生成处理指令[例13]XMLPI(NAME "includeFile",''/POs/template.hls'')结果生成plate.hls?>16.4SQL/XML16.4.1XML数据类型16.4.2XML发布函数16.4. 3XML提取函数16.4.3XML提取函数一、XMLQuery函数XML数据的查询语言SQL/XML提供将XQue ry嵌入SQL的机制,对存储在关系数据库中的XML数据可以用XQuery进行查询返回的数据类型为XMLXML提取函数(续) [例14]选出价格低于80的所有英文书,返回价格和作者名SELECTXMLQUERY(‘for $bibin$doc/bib[lang/text()=''English''],$bookin$b ib//bookWHERE$book/@price<80RETURN {$book/@price},{$book/author/name} ''PASSINGbibAS"doc"RETURNCONTENT)AS "result"FROMbookstore;XML提取函数(续)XML提取函数(续)二、XMLTable函数从X ML数据中提取信息,返回结果是一个二维的关系表(列的定义用XPath路径表达式)XML提取函数(续)[例15]选出价格低 于80的英文书,显示书名、作者名、出版年份和价格(返回关系表的格式)。SELECTT.title,T.author,T.yea r,T.priceFROMbookstoreASB,XMLTABLE(''for$b ibin$doc/bib[lang/text()=''English''],$bookin $bib//bookWHERE$book/@price<80RETURN$book''PASSINGB.bibA S"doc"COLUMNS"title"VARCHAR(100)PATH''./title'', "year"INTEGERPATH''./year'', "price"DOUBLEPATH''./@price'', "author"VARCHAR(30)PATH''./author/name'')AST;XML提取函 数(续)XML提取函数(续)三、XMLExists谓词检查XQuery查询在XML数据上的执行结果是否为非空如果查询结 果是一个空序列,则谓词返回假,否则为真XML提取函数(续)[例16]查询标了价格的所有书目。SELECTid, bibFROMbookstoreWHEREXMLEXISTS(''$doc/bib/book/@price'' PASSINGbibAS"doc");第十六章XML数据库16.1概述16.2XML简介16.3XM L数据模型16.4SQL/XML16.5小结16.5小结SQL/XML基于关系模型允许在SQL查询中直接使用 XML发布函数生成XML结构对传统的SQL做了扩展SQL/XML既提供了从关系数据创建XML的功能,又能很好的适应已有的SQ L环境返回的可能结果是:601989RogerPenroseTheEmperor’sNewMind1519 99SergeAbiteboulDataontheWebpriceyearauthorTitleXML和关系 数据间的双向转换假设关系表employees如下:Shipping1996-02-01MartinBob1206A ccounting2000-05-24SmithJohn1001depthirelnamefnameId查询返 回的结果是:BobMartin1206JohnSmith1001Resu ltID查询返回的结果是:Martinedate>1996-02-011206Smi th2000-05-241001res ultID返回的结果可能是:Smithdants>31001resultID[例6]SELECTe.id,XMLEL EMENT(NAME"Emp",XMLATTRIBUTES(e.id,e.lnameAS"name") )AS"result"FROMemployeese;返回的结果可能是:e="Martin"/>12061001resultID可能 的结果是:t="C01">NICHOLLS1140tp://www.admi.comadmi:department="C01">QUINTANA 1130resultID[例8]SELECTe.id,XMLFOREST(e.hire,e.deptAS"depa rtment")AS"result"FROMemployeese;结果是:1996-02-01E>Shipping12062000-05-24 Accounting1001resultID返回的结果可能是:rst>MaryMartin1206Johnst>Smith1001ResultID如果某个结果返回空值,则不出现在串接中。假设关系表employee s加上了2条记录,共4条记录:Shipping1996-02-01MartinBob1206Shipping2000 -01-19OppenheimerMary1205Accounting2000-05-24SmithJohn100 1Accounting2001-08-02YatesTom1000depthirelnamefnameId返 回的结果是:2Oppenheimer Martin2 YatesSmithdept_countd ept_list返回的结果是:2Martin emp>Oppenheimer2"Accounting">SmithYatesent>dept_countdept_list返回的结果可能是: RogerPenrose SergeAbiteboulResultXquery 中的return子句有构造XML的功能数据库系统概论AnIntroductiontoDatabaseSys tem第十六章XML数据库图16.1中的XML数据的图模型表示元素标识名属性-值对应集合元素文本内容表16.1XML数据模型的比较是否否否是否要求DTD或XMLSchema验证Constructor和accessor的功能描述一组对象接口的描述对一组结点类型的数据结构和字符串值的描述对XML语法项的附加描述定义方式XML文档或部分的集合XML(或HTML)文档XML文档XML文档对象XMLQueryModelDOM1.0Level2Xpath1.0DataModelXMLInformationSet表16.2DTD和XMLSchema的特征比较YesYesYes37YesYesYesXMLSchemaNoNoNo10NoNoNoDTDExplicitNullDomainconstraintUser-definedtypeBuilt-intypeInclude&ImportNamespaceSyntaxinXMLXMLSchema更为完善DTD简便易用XMLEXISTSXML→布尔值XMLTABLEXML→关系XMLQUERYXML→XMLXML提取函数XMLELEMENT,(XMLNAMESPACES,XMLATTRIBUTES),XMLFOREST,XMLCONCAT,XMLAGG,XMLCOMMENT,XMLPI关系数据→XMLXML发布函数XMLSERIALIZEXML→字符串XMLPARSE字符串→XMLXMLCAST强制数据类型转化XML数据类型定义SQL/XML中的关键词功能表16.3SQL/XML中的主要关键词及功能分类 |
|