关系数据库中的数据是模式固定的结构化数据。模式固定可以使数据组织成一定的数据结构,这样能有效地支持查询响应,但难以实现对数据结构的动态修改。半结构化数据是介于结构化数据和完全无结构数据(如声音文件、图像文件等)之间的数据。它具有一定的结构,但是结构不完整、不规则,或者结构是隐含的,例如,HTML文档就是半结构化数据。半结构化数据主要来源于网络,因为网络对于数据的存储是无严格模式限制的,如常见的HTML、XML等文件,就存在着大量结构和内容都不固定的数据。
半结构化数据模型允许那些相同类型的数据项有不同的属性集的数据说明。这和结构化的数据模型形成了对比,因为在结构化数据模型中所有某种特定类型的数据项必须有相同的属性集。
半结构化数据的产生背景和自身特点决定了要求其查询必须能处理如下情形。
1. 数据缺失
与关系数据库和面向对象数据库中的数据不同,半结构化数据的模式不固定,同类实体的结构也可能不同,这样查询时就会出现缺失数据。例如,在公司人事档案库中,已婚雇员会有配偶项信息,而未婚的雇员则无该项信息。某些雇员有E-mail 地址和家庭电话,而有些却没有,查询这些项时就会有很多空值。因此,应保证查询在缺失数据时仍有意义。
2. 单值和集合值属性兼容
在传统查询语言如SQL、OQL、XSQL中, 单值和集合值属性是不兼容的,即集合不能按单值处理,单值也不能按集合处理。半结构化数据结构多样可变,单值和集合结果的出现无法预料,用户不能预先对数据结构和模式进行细致了解。同一查询对不同半结构化数据的结果可能是单值,也可能是多值。因此,要保证用兼容方式处理查询的单值和集合值属性。
3. 查询对象类型各异
在WWW 和异构信息源集成时,会有不少内容相同而类型各异的问题。如一信息源上的电话信息是用字符串表示,而另一信息源上则可能用整数表示。有些电话信息上可能带区号,而有些则不带。又如WWW上的主页,相同实体的类型差异也很大。如主页里的朋友项,有的是用字符串给出名字,有的则带有简单描述信息或是指向其朋友的网络地址。这就要求查询处理时有宽松的类型限制或没有类型检查。
4. 异构的查询返回结果
半结构化数据的同类实体查询会出现不同的结果对象,选择语句的返回结果可能因数据源的不同而异。同一个查询的结果可能是一个串、多个字段组成的复杂对象或二者兼有。 在数据模型和查询语言中,包括查询结果在内的所有对象,都应按照异构集方式建模,要允许在异构集上进行查询和返回异构集结果。
5. 查询的对象结构未知
在目前流行的客户机/服务器应用集成实现中常将部分或全部元数据(表结构或类信息) 调入客户端和管理器中,这在半结构化数据情形下是不现实的,因为这样的元信息会太多、太繁杂。所以在数据模型和查询中应允许用户通过某些机制了解源中的对象结构及相关联的对象内容。同时最好能进行模式发现,允许查询的路径表达式带通配符处理。这在数据库中部分结构已知、但内容和模式经常改变时尤为重要。