数据库系统-学习记录16-半结构化数据模型与XML基础

半结构化数据模型与XML基础

  在之前的课程学习中,由于课时缩减及任务的繁重,所以并没有机会接触到XML相关部分的内容。而XML这部分在修改《吞食鱼》的时候又会常常被涉及到,因此对其进行了解也是非常重要的。现在大学的最后一个考试周也结束了,是时候静下心来补充一些自己想去了解,而此前又没有机会去了解的内容了

半结构化数据

  半结构化数据模型是不同于之前所提到的结构化数据模型的。相比于结构化数据而言,半结构化数据具有更大的灵活性。

  半结构化数据是自我描述型的,其本身的模式可以发生变化(而不是像之前的结构化数据那样被严格固定)

半结构化数据的表示

  半结构化数据使用“图”这一数据结构进行表示,其规则大致如下:
  1、叶结点用于存放数据,而内部结点则有许多往外延伸的边,根结点入度为0
  2、结点u, v之间的边<u, v>上的标签,表示了u与v之间的关系。这个关系可以是两个实体间的联系,也可以是实体所具备属性的名字

  关于半结构化数据的图的表示,书上有这样一个举例:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ng7NKrCp-1610953878403)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20210117203717041.png)]

  根结点往下分别引出两个star实体和一个movie实体,而这些实体又具有各种属性(例如cf下方的凯利·费雪、地址),实体与实体之间也有着各种联系(例如mh和sw,分别具有starsIn和starOf的联系)……

半结构化数据的信息集成

  因为半结构化数据的模式不一,所以直接像合并元组那样合并它们是行不通的。因此采用用户通过一个支持半结构化数据的接口来访问各种不同的数据库这种方式:首先向数据库发送请求(post),随即访问数据库中的信息,再以某种形式将访问到的信息传回给接口,随即使用wrappers对接收到的信息进行解读。

XML

  XML的全称:Extensible Markup Language

  XML是一种基于标签的、最初是为“标记”文档而设计的符号语言

语义标签

  XML中的语义标签,是具有如下形式的:

<foo>...</foo>

  这样的一对尖括号括起的内容,加上中间的那些内容,统称语义标签

  语义标签可以进行嵌套,例如:

<foo>
    <bar>...</bar>
</foo>

  此外,语义标签还可以不成对出现,例如:

<foo/>

  在这种情况下,就不能进行嵌套了,但这样的语义标签,仍然可以具备属性

  XML有两种使用模式,一种是well-formed XML,另一种是void XML。前者允许用户任意指定标签及嵌套,而后者则对允许使用的标签及其嵌套语法有所规定

Well-Formed XML

  对于Well-Formed XML而言,最基本的要求为需要在开头处声明“这是XML”,以及一个根结点,形如:

<? xml version = "1.0" encoding = "utf-8" standalone = "yes" ?>
<SomeTag>...</SomeTag>

  其中,属性standalone = "yes"表示,此文件没有文件类型定义(Document Type Definition, DFD),这也是Well-Formed XML的特性

  当想要表示实体与实体间的关系时,可以让实体中再嵌套一个实体。例如,下图的XML片段表明,影星(Star)马克·哈米尔参演了1977年的《星球大战》和1980年的《帝国反击战》:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c9wyX8Xo-1610953878405)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20210118102710492.png)]

属性

  在XML中,半结构化数据的叶结点属性可以直接表示在语义标签中,例如:

<image>
    <opacity>0.85</opacity>
    <file>resources/hud/timerBg.png</file>
    <x>0</x>
    <y>0</y>
</image>

  这样的片段,可以表示为:

<image opacity="0.85" file="resources/hud/timerBg.png" x="0" y="0"></image>

  或者更简洁地,表示为:

<image opacity="0.85" file="resources/hud/timerBg.png" x="0" y="0" />

与元素相连接的属性

  为了表示不同实体间的联系,可以在语义标签中设定标识属性。这样一来,在其他属性中,就可以将值指定为其他实体的标识属性,从而起到不同实体相联系的效果

  例如,对于下图中的XML:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2rnrXNuu-1610953878408)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20210118114729190.png)]

  每一个Star实体都有starID这个标识属性,而Movie实体则具备movieID这个标识属性。对于Star实体而言,其属性starredIn的值,对应Movie的movieID;而对于Movie实体而言,其属性starsOf的值,对应Star的starID

命名空间

  命名空间主要是用于解决不同实体的属性重名问题的。例如:

<md:StarMovieData xmlns:md="http://infolab.stanford.edu/movies">

  表示StarMovieData位于一个名为md的命名空间中,定义这个命名空间的文件位于infolab.stanford.edu/movies处。如果要使用md这个命名空间中的子元素的话,只需像这段XML一样在字段前加上前缀md:即可

文件类型定义(DTD)

  DTD对XML中的格式进行了一些约束,例如“某种元素不能嵌套其他元素”,“一种元素只能嵌套一次指定的其他元素”等

DTD的形式

  DTD的总体结构如下:

<!DOCTYPE root-tag[
 <!ELEMENT element-name (components)>
  more elements
]>

  其中,components表示element-name所对应的元素的成分。一般情况下,这些成分会是其他元素的名字,而此外也有两种特殊情形:
  1、#PCDATA:这种情况下,<element-name></element-name>中就用来存放值,在里面嵌套定义的其他标签则不属于XML的一部分
  2、EMPTY:此类标签没有子元素,也没有值,并且没有闭合标签。也就是说,这样的标签只能以<Foo/>这样的形式出现

  如果将DTD存入到了某个文件中的话,之后使用时只需输入:

<!DOCTYPE name SYSTEM filePath>

  即可从filePath这个文件路径处加载名为name的DTD

  值得注意是,在使用DTD的时候,需要在XML的开头以standalone="no"的方式,注明这是DTD XML

属性列表

  DTD中,属性列表具有如下形式:

<!ATTLIST element-name attribute-name type>

  最常见的type为CDATA,这与之前提到的#PCDATA类似;此外,type还可以是枚举类型

  在type后,应该跟上保留字#REQUIRED或#IMPLIED,前者表示该属性必须出现,后者则表示该属性为可选项

标识符和引用

  在属性定义的type后,可以加入ID或IDREFS关键词,来表示该关键字为标识符或引用其他元素中的标识符属性,例如:

<!ELEMENT Movie (Title, Year)>
	<!ATTLIST Movie
		movieId ID #REQUIRED
		starsOf IDREFS #IMPLIED
	>

  表示元素Movie可以具有Title和Year这两个子元素,并且拥有movieId和starsOf这两个属性。其中,movieId是必须具备的一个属性,也是标识符;而starsOf则是引用其他元素的标识符属性

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值