到目前为止,我们已经看到RDF如何在Web上以分布式的方式表示数据。因此,它构成了语义Web的基础,语义Web是一个由数据组成的Web,任何人都可以在其中谈论任何主题。本书的重点是在语义Web上建模:描述和定义分布式数据,使数据能够以有用和有意义的方式重新组合在一起。在一本关于建模的书中,我们可以说没有讨论系统体系结构的空间——计算机系统的组件可以在有用的应用程序中实际使用这些模型。但这本书是为工作的本体论谁建立模型,使他们可以使用。但是用于什么?这些模型用于构建一些利用Web上分布的信息的应用程序。简而言之,把语义Web工作,我们需要描述,至少在高级别上,语义Web应用程序特定的结构,组件组成,输入它的种类(的地方),如何利用RDF,为什么这是不同于其他应用程序体系结构。
语义Web应用程序的许多组件都是由专门从事语义Web技术的公司作为支持产品提供的,并且是在各种许可证下作为自由软件提供的。研究小组和产品公司正在不断地开发新的软件。在本章中,我们不描述任何特定的工具,而是讨论组成语义Web部署的组件的类型以及它们是如何组合在一起的。
RDF Parser/Serializer :我们已经看到了RDF的许多序列化,包括XML中的W3C标准序列化。RDF解析器读取这些格式中的一种(或多种)文本,并在RDF数据模型中将其解释为三元组。RDF序列化器则相反;它接受一组三元组并创建一个文件,该文件以序列化形式之一表示该内容。
RDF Store:我们已经看到RDF如何以三元组的形式分发数据。RDF存储(有时称为三元组存储)是一个数据库,它经过调优以三元组的形式存储和检索数据。除了任何数据库的常见功能之外,RDF存储还具有从多个数据源合并信息的附加功能,这是RDF标准所定义的。
RDF Query Engine :与RDF存储密切相关的是RDF查询引擎。查询引擎提供了根据结构化查询从RDF存储中检索信息的功能。
Application:应用程序对其处理的数据执行一些工作:分析、用户交互、归档等等。这些功能是使用一些通过查询(使用RDF查询引擎处理)访问RDF存储的编程语言实现的。
在熟悉的关系数据支持的应用程序中,这些组件中的大多数都具有相应的组件。关系数据库本身对应于RDF存储,因为它存储数据。数据库包含一种查询语言,以及用于访问该数据的相应查询引擎。在这两种情况下,应用程序本身都是使用一种通用编程语言编写的,这种语言用于查询和处理结果。至少就标准而言,在关系数据库系统中,解析器/序列化器没有直接的对应项。没有一种关系数据库的标准序列化允许将其导入竞争关系数据库系统而无需更改语义。(这是RDF存储相对于传统数据存储的一个关键优势。)在接下来的部分中,我们将详细研究这些功能。由于这些类别中的每一种新产品都是在不断开发的基础上开发的,所以我们只笼统地描述它们,而不涉及特定的产品。
4.1RDF Parser/Serializer
一个基于RDF的系统怎么开始?
谷歌可以找到数百万的扩展名为.rdf的文件。这些数据中的任何一个都能成为一个RDF应用的资源。但这些文件是无用的,除非我们有一个程序可以读取它们。这个程序就是RDF Parser。RDF解析器将以某种RDF格式的文件作为输入,大部分的parser支持标准的RDF/XML格式,RDF解析器接受这样一个文件作为输入,并将其转换为该文件中表示的三元组的内部表示形式。此时,三元组存储在三元存储库中,并可用于该存储库的所有操作。
此刻的三元组也可以被序列化回来,不管是不是同一个文本形式。这就是parser的逆操作,序列化。可以使用解析器和序列化器对三元组进行“往返”操作,如果你序列化了一个三元组集合,然后使用相应的解析器(例如,用于Turtle序列化的Turtle解析器)解析得到的字符串,结果是与流程开始时相同的一组三元组。注意,如果从表示一些三元组的文本文件开始,则不一定是这样。即使在单一格式中,也可能有许多不同的文件表示同一组三元组。因此,通常不可能在RDF文件中读取,再次导出它,并确保结果文件将与输入文件完全相同(逐个字符)。
Other data sources
于RDF标准表示的解析器和序列化器对于RDF中数据的系统处理和归档非常有用。虽然这些格式中有相当多的数据可用,甚至还有一些RDF中还没有的数据可用。幸运的是,对于许多常见的数据格式(例如表格数据),将这些格式转换为RDF三元组非常容易。
我们已经看到了如何以一种自然的方式将表格数据映射成三元组,这种方法也能够用于关系数据库或者电子表格。基于此映射执行转换的工具(尽管严格来说不是解析器)在语义解决方案中扮演与解析器相同的角色:它们将三元组存储与三元组形式的信息源连接起来。大多数RDF系统都包含某种表输入转换器。一些工具专门针对关系数据库,包括适当处理外键引用,而另一些工具则更直接地处理电子表格。这类工具称为转换器,因为它们通常将信息从某种形式转换为RDF,而且常常转换为标准形式的RDF,如Turtle。这允许它们与任何其他RDF一起使用。语义Web的另一个丰富的数据来源可以在现有的Web页面(即HTML页面)中找到。此类页面通常包含结构化信息,如联系信息、事件描述、产品描述、出版物等。这些信息一旦以RDF形式提供,就可以在语义Web上以新颖的方式组合起来。
在web页面中编码信息的相关方法是一种称为微格式的趋势。微格式的概念是,一些web页面作者可能愿意在其web页面中嵌入结构化信息。为了使它们能够做到这一点,为web页面上常用的项目开发了一个标准词汇表(通常作为不影响浏览器显示页面方式的特殊标记属性嵌入到HTML中)。最初的一些微格式用于名片(在受控词汇表中包括姓名、职位、公司和电话号码)和事件(包括位置、开始时间和结束时间)。微格式的一个限制是需要指定受控词汇表并提供能够处理该词汇表的解析器。如果有人(如W3C)只指定一种语法来用RDF数据标记HTML页面,岂不是更好?然后,所有微格式将有一个单独的处理脚本。
W3C提出了一种称为RDFa的格式。RDFa背后的思想非常简单:使用HTML中的属性标记嵌入可以解析为RDF的信息。就像微格式一样,RDFa对浏览器显示页面的方式没有影响。许多搜索引擎(谷歌和Yahoo!)和零售商(BestBuy, Overstock.com)已经开始采用RDFa来提供机器可处理的语义Web数据。Facebook采用了RDFa的一个变体作为开放图形协议的一部分——Facebook中可用的信息网络。
RDFa为在Web上共享数据提供了两个优势。首先,从数据使用者的角度来看,从标记了结构化数据提取的页面中获取RDF数据要比从没有此目的而开发的源中获取RDF数据更容易。但是,更重要的是,从内容作者的角度来看,它允许他们在web页面内部表达web页面的预期含义。这确保文档中的RDF数据与文档本身的预期含义相匹配。这确实是语义web中语义一词的精髓,页面作者被赋予在web页面中表达其含义的能力,以供机器阅读和使用。
4.2RDF Store
通常做法是用数据库存储数据,使它们可以用于将来。RDF的数据存储方法不同,存储在一个叫做RDF store的系统中。RDF Store通常伴随着一个parser和一个serializer,用于从store发布信息。正如传统(例如,关系)数据存储的情况一样,RDF存储也可能包括查询引擎,如下一节所述。传统的数据存储根据各种性能特性进行区分,包括可存储的数据量、可访问或更新数据的速度以及查询引擎支持的各种查询语言。当应用于RDF存储时,这些特性同样相关。
与关系数据存储相反,RDF存储包含一个基本功能,即将两个数据集合并在一起的能力。由于RDF数据模型具备灵活性,这样的合并操作很容易定义。每一个数据商店代表了一个RDF三元组集合;两个(或多个)数据集的合并是单个数据集,其中只包含源数据集中的所有三元组。具有相同URI的任何资源(无论原始数据源是什么)在合并的数据集中都被认为是等价的。因此,除了评估数据存储的常用方法之外,RDF存储还可以根据合并过程的效率进行评估。
RDF存储实现的范围从定制的编程数据库解决方案到专业供应商完全支持的现成产品。从概念上讲,三元组存储最简单的关系实现是一个包含三列的表,每一列表示三元组的主语、谓语和宾语。表4.1显示了一些以这种方式组织的关于洛杉矶地铁站的数据。
这种表示看起来很熟悉,和第三章介绍的RDF三元组表示法很想。因为它适合关系数据库表示,可以使用传统的关系数据库工具(如SQL)访问它。一个有经验的SQL程序员写这样一个查询语句是没困难的,List the dc:title of every instance of metro:Metro in the table,作为实现表示,存在一些明显的问题,包括在第一列中复制信息,以及围绕字符串值(如uri)构建索引的难度。
4.2.1 RDF data standards and interoperability of RDF stores
RDF数据标准和RDF存储中的可互操作性
RDF存储与关系存储具有相当大的相似性,特别是在如何评估存储质量方面。RDF存储的显著区别来自RDF数据模型和RDF/XML序列化语法的标准化。几个相互竞争的关系数据存储供应商在今天的市场上占据着主导地位,并且已经持续了几十年。虽然这些产品都基于用于数据表示的关系代数的相同基本思想,但是将整个数据库从一个系统转移到另一个系统是一个困难的过程。也就是说,没有一种标准的序列化语言可以完全描述关系数据库,使其能够自动导入竞争对手的系统。这样的任务是可能的,但通常需要数据库程序员跟踪源数据库的细节,以确保它们在目标系统中得到了忠实的表示。
RDF的标准化工作使得RDF存储的情况非常不同。正如在传统数据库中,存在着几个竞争厂商和项目。与关系数据库的情况形成鲜明对比的是,所有这些产品都共享底层RDF数据模型,而且,更具体地说,它们都可以以任何标准格式(RDF/XML或Turtle)导入和导出数据集。这使得将RDF数据集(或多个RDF数据集)从一个RDF存储库传输到另一个RDF存储库成为一项常规任务。这个特性是早期和积极的标准化过程的结果,它使得从一个RDF存储开始变得容易得多,并且由于知道系统可以根据需要迁移到另一个RDF存储中,所以它是安全的。它还简化了联合存储在多个RDF存储中的数据的问题,这些数据可能来自不同的供应商源。
4.2.2 RDF query engines(RDF查询引擎)
RDF存储需要查询语言。这个功能上,RDF存储和关系数据库或者XML存储类似。毫无意外地,在RDF早期阶段,大量的查询语言可用,每一个都被基于RDF的产品支持,或者开源项目。从这些查询语言的普遍特性中,W3C已经着手标准化RDF查询语言SPARQL。我们将在下一章讨论SPARQL查询语言的详细信息。
RDF查询引擎与RDF存储紧密地联系在一起。要解决查询,引擎依赖于RDF存储的索引和内部表示:存储对查询引擎的调优越好,它的性能就越好。对于大型应用程序,最好有一个RDF存储和查询引擎,即使面对非常大的数据集,它也能保持性能。对于较小的应用程序,其他特性(例如,成本、易于安装、平台、开源状态以及与其他企业系统的内置集成)可能占主导地位。
SPARQL查询语言包含用于通信查询和结果的协议,因此查询引擎可以充当web服务。这为语义web提供了另一个数据源——所谓的SPARQL端点提供了对大量结构化RDF数据的访问。甚至可以提供对非三重存储的数据库的SPARQL访问,从而有效地将SPARQL查询转换为底层存储的查询语言。W3C最近开始对关系存储从SPARQL到SQL的转换进行标准化。
4.2.3 Comparison to relational queries
共同点:都为数据提供一个标准接口,定义数据的显示格式。关系查询语言基于连接和外键引用的关系代数。RDF查询语言更像谓词演算中的陈述句。统一变量用于表示模式之间的约束。
区别:1.关系查询描述的是由两个或者多个源表格组合的数据表。RDF查询(不管是SPARQL还是RDF查询语言都可以)描述一个新的图,这个图是由描述源RDF的图的子集组成的。这个图,可以使几个图的连接。图的固有递归特性简化了基于表的查询中出现的许多详细问题。例如,像SPARQL这样的RDF查询语言几乎不需要子查询结构;在很多情况下,一个查询就可以达到同样的效果。类似地,在SPARQL中没有对应于SQL“self-join”的特殊情况。
2.特殊情况下RDF存储以关系数据库中的表格形式,在这种场景中,任何图形模式匹配都将构成该表上的自连接,一些终端开发人员选择在熟悉的SQL环境中以这种方式工作。Oracle采用另一种方法使SQL程序员可以访问RDF查询,方法是为其SQL版本提供自己的SPARQL扩展,该扩展针对图形查询进行了优化。他们的SPARQL引擎与SQL脚本语言的表/连接结构集成得很好。
4.3Application Code
数据库应用不只是包含一个数据库和一个查询引擎,海报多一些程序代码,一个应用环境,可以分析和显示数据库中的信息。应用访问数据库的唯一途径是查询接口。如表4.1所示。
一个RDF应用应该有类似的结构,但是它包括一个RDF parser和Serializer,转换器,RDF合并功能,和RDF查询引擎。如表4.2
应用本身也应该有响应的格式。通常,用传统的编程语言。在本例中,RDF功能由该语言的API绑定提供。RDF存储提供一个脚本语言作为查询系统的一部分也很常见。它以一种类似于SQL高级方言为关系数据库应用程序提供脚本功能的方式提供对这些功能的编程访问。
无论RDF存储通过什么方法将这些功能提供给应用程序,应用程序仍然有责任使用它们。一下是一些RDF应用的例子:
1.Calendar integration:以日历的形式显示不同人和组的约会
2.Map integration:显示从不同网站、电子表格和数据库中收集的兴趣点的位置,所有这些都在一个地图上
3. Content management:为多个内容存储中可用的信息资源(文档、web页面、数据库等)创建单个索引。
应用程序将决定需要抓取或转换哪些信息源(例如,XML中的日记条目、web页面的地址列表、内容服务器的目录列表)。
根据数据的易变性,一些过程可以设计为离线(比如纽约地铁站的未通知,希尔斯百货目录中的专柜,普通化学结构的分析,都不会经常发生变化;这类数据可以在应用程序之外,导入为RDF),其他数据不得不经常更新。一些数据可以保留在RDF存储本身(关于这个团队的私有信息、订单信息、专利化学公式);其他数据可以以RDF格式发布,供其他应用程序使用(培训时间表、目录特别说明、FDA关于某些化学品的发现)。
一旦转换、获取或解析了所有必需的数据源,应用程序就使用RDF存储的合并功能来生成所有合并数据的单个联合图。应用程序将会使用这个联合图进行进一步的查询,查询本身不需要知道联合策略或调度。在执行RDF合并时,已经发生了联合。
我们可以看出,应用程序表现得很像其他的数据库应用,网页要显示任意组员的约会,就包括一个对信息的查询。即使约会来自不同的源,关于团队成员的信息来自另一个源,也要对联合信息图进行查询。
RDF-backed web portals
当应用程序的前端是web服务器时,该体系结构(如图4.1所示)对于数据库支持的web门户是众所周知的,这些页面是使用许多技术(例如CGI、ASP、JSP、ZOPE)生成的,这些技术允许根据对数据库的查询结果构建web页面。在web的早期,web页面通常作为文件系统中的文件静态存储。迁移到数据库支持的门户是为了允许web站点反映出现在关系数据库中的复杂的相互关联的数据结构。
图4.2中概述的系统架构可以用同样的方法实现语义Web门户。RDF存储在数据库支持的门户中扮演与数据库相同的角色。需要注意的是,由于图4.1和4.2中的表示层是分离的,因此在语义web门户的实际web页面构建中可以使用与数据库支持门户中使用的相同的所有技术。但是,与传统的数据支持的web门户不同,并且由于支持语义web门户的RDF存储的分布式特性,一个RDF支持的web页面上的信息通常来自多个源。RDF存储的合并功能支持将这种信息分发作为web门户基础设施的一部分。当门户由RDF支持时,构建分布式web门户与构建所有信息都是本地的门户没有区别。使用RDF,联合web门户就像竖井门户一样简单。
4.4Data Federation
RDF数据模型从一开始就考虑到了数据联合,来自任何源的信息都被转换成一组三元组,这样任何类型的数据联合——电子表格和XML、数据库表和web页面——都可以通过一种机制来完成。如图4.2所示,这种联合策略,使各种不同的信息源都转换成统一的三元组格式,再把所有的信息联合成一个存储。这与联合策略形成了对比,在联合策略中,应用程序使用与该格式对应的方法查询每个源。RDF不是指用于编码数据的文件格式或特定语言,而是指用三元组表示信息的数据模型。RDF的这个特性允许以这种方式联合数据。合并这些信息的机制,以及RDF数据模型的细节,可以封装到一个软件中——RDF存储——作为应用程序的构建块。
首先联合信息,然后查询联合信息存储,将数据联合的关注点与应用程序的操作关注点分离。在应用程序中编写的查询不需要知道特定的三元组来自何处。这允许一个查询在多个数据源上无缝操作,而无需查询作者进行详细的计划。这还意味着对应用程序的更改将不会影响应用程序本身中的查询,从而联合更多的数据源。
RDF应用程序的这一特性构成了下面讨论的大部分内容的关键。在讨论RDFS和OWL时,我们将假设应用程序所需的任何联合已经发生;也就是说,所有查询和推断都将发生在联合图上。联邦图就是包含来 自所有联邦数据源的信息的图,应用程序查询将在这些数据源上运行。
SUMMARY
这里提到的RDF的parser,serializer,store和查询引擎,本身都不是语义网模型,而是包含语义网模型的系统的组件。甚至RDF中表示的信息也不一定是语义模型。这些是构建和使用语义模型的构件。当然,模型将用RDF表示。我们将看到,W3C、RDFS和OWL的语义建模语言完全是用RDF构建的,它们可以像任何其他RDF数据一样进行联合。
语义模型在图4.2的应用程序体系结构中适合什么位置?作为RDF表示的数据,它们将与所有其他数据一起存储在RDF存储中。但是语义模型不仅仅包括用于回答查询的数据,比如莎士比亚写的戏剧列表或纸机存放的地方。语义模型还包括元数据;用来组织其他数据的数据。当我们从多个数据源联合信息时,RDF数据模型允许我们以单一、统一的方式表示所有数据。但它无助于解决来源之间的任何意义冲突。两个州对“婚姻”有相同的定义吗?“写”剧的概念和“写”歌的概念是一样的吗?正是语义模型为这些问题提供了答案。语义模型充当不同的、联合的数据源之间的粘合剂,因此我们可以描述它们是如何组合在一起的。
就像AAA,同样的任何人可以谈论模型的任何事情;这就是说,任何人都可以对信息源的定义和映射发挥作用。这样的话,不光是一个联合的,基于RDF的语义应用可以从多个资源中获取它的信息,也可以从多源中获得联合信息的指令。这样就可以说,语义网是一个真正的有意义的网络,可以描述信息的多源网络。
Fundamental concepts
RDF parser/serializer:用于以几种文件格式之一读写RDF的系统组件。
RDF store:使用RDF的数据库。主要操作之一是合并RDF图。
RDF query engine:这提供了对RDF存储的访问,就像SQL引擎提供对关系存储的访问一样。
SPARQL:RDF的标准查询语言。(W3C)
SPARQL endpoint:一个可以响应Sparql查询的应用,包括一个信息的本地编码,不是RDF格式的。
Application interfacel;在与某些用户的交互中使用RDF存储内容的应用程序的一部分。
Converter:一个可以把某种数据形式(表格)转换为RDF的工具。
RDFa:从HTML页面编码和检索RDF元数据的标准。