ser 为什么后面能跟宾语补足语

不及物动词后面不能直接加宾语,要加介词.但是及物动词的want后面跟动词的时候为什么也要加to?1.不及物动词后面不能直接加宾语,要加介词.但是及物动词的want后面跟动词的时候为什么也要加to 2在want后面跟动词的_百度作业帮
不及物动词后面不能直接加宾语,要加介词.但是及物动词的want后面跟动词的时候为什么也要加to?1.不及物动词后面不能直接加宾语,要加介词.但是及物动词的want后面跟动词的时候为什么也要加to 2在want后面跟动词的
1.不及物动词后面不能直接加宾语,要加介词.但是及物动词的want后面跟动词的时候为什么也要加to 2在want后面跟动词的时候加大这个to 是不是动词不定式?
好问题,能想到这个说明楼主是个细心的人.没错及物动词后接宾语不需要介词,但是你在这里没分清这个介词和动词不定式符号的问题.不及物动词跟宾语时后面要加介词如果有to那么这个to也是介词.但是want后的这个to do 中的to可不是介词,这是动词不定式的符号.这是to do sth整体做want的宾语.所以不是你理解的那种want后加介词的情况.明白了吗?
可能是习惯问题讲不出所以然的。介词后面能跟宾语从句吗?为什么?请举一个例子._百度作业帮
介词后面能跟宾语从句吗?为什么?请举一个例子.
介词后面能跟宾语从句吗?为什么?请举一个例子.
有句话是He was astonished at what he found.后面那个就叫名词性从句,也可以说成你那个跟在介词后的宾语从句.记住:从句必须要是陈述语序.Linked&data使用D2R&server操作
Linked data 最早是在 2007 年 5 月,由 Chris Bizer and Richard Cyganiak 向
W3C SWEO 提交的一个项目申请 Linked Open Data Project 中提出来的。Linked data
提出的目的是构建一张计算机能理解的语义数据网络,而不仅仅是人能读懂的文档网络,以便于在此之上构建更智能的应用。Linked Open
Data Project 的宗旨在于号召人们将现有数据发布成 Linked
data,并将不同数据源互联起来。在过去的三年中,越来越多的数据提供者和 Web 应用开发者将他们各自的数据发布到 Web
上,并且与其它数据源关联在一起,形成一个巨大的数据 Web。截止 2009 年 7 月,已发布的 Linked data 规模为
6.726.000.000 个 RDF 三元组以及 148.948.000 个 RDF 关联关系,相比 2007 年 5 月的 500
million RDF 三元组以及 120,000 RDF 关联关系,增涨非常迅速。 其数据领域涉及 Geographic
Data,Life Sciences,Publications,User Generate Content,Media 等等。
不仅仅是 Public Web,随着企业 2.0 的到来,企业内部也迫切需要越来越多的数据与 Web
上的数据关联,从而构建更好的应用与服务。而现有的数据,尤其是企业内部的数据,大多数存在于关系型数据库中,因此,本文挑选了一个目前应用较为广泛的工具
D2R,介绍如何使用它将关系型数据库的数据发布成 Linked Data。
简单来讲,Linked data 即为一系列利用 Web
在不同数据源之间创建语义关联的最佳实践方法。这里的不同数据源,可以来自一个组织内部的不同系统,也可以来自不同组织的不同系统,它们的内容,存储地点以及存储方式都可以完全不同,但它们很可能存在着关联,例如:Amazon
上图书可能与 MySpace 上的人之间可能存在关联,因为图书的作者有可能在 Myspace 上注册账号。总之,Linked data
最大的特点便是将不同的数据关联起来。
Linked data 包含一些基本原则:
资源。在发布一个领域的数据之前,我们需要确定要发布的资源是什么。任何事物,只要你认为是有意义的,有被引用必要的,都可以称之为资源。
资源标识。任何一个资源都用一个 HTTP URI(Uniform Resource Identifiers)来标识。之所有要用
HTTP URI 来标识,是希望数据能够通过 HTTP 协议访问,真正实现基于 Web 的访问与互联。
资源描述。资源可以有多种描述,例如 HTML,XML,RDF 以及 JPEG。文档 Web 的文档主要通过 HTML 格式来表示,数据
Web 的数据主要通过&格式(Resource
Description Framework)来表示。RDF 将一个资源描述成一组三元组(主语,谓语,宾语)。
王老师 教授 英语课
(主语) (谓语) (宾语)
主语用来表示需要描述的资源,谓语用来表示主语的某个属性(例如:姓名,出生日期)或者某个关系(例如,雇佣,认识,教授等),宾语表示了属性的值或者关系的值。主语,谓语都需要要用
HTTP URI 来表示。宾语可以用 HTTP URI
标识另一个资源,也可以是字符串表示的文本。我们可以把主语看作是类资源,而将谓语看作是类资源的属性资源,宾语或者是类资源或者是文字型资源。根据宾语的种类,可以将三元组分为两类:文字型三元组以及非文字型三元组,第二种可以看作是类资源之间的关联。
Linked data 的优点虽然很突出,但要想发挥其作用,其前提是数据必须满足 Linked data
的基本原则。然而实际上上大量已存在的数据并不满足这些原则,于是 Linked data
的推动者们便开发了一系列实用的工具,来帮助完成传统数据向 Linked data 的转换。
D2R 便是其中一个非常流行的工具。它的作用是一个将关系型数据库发布为 Linked data。D2R 主要包括 D2R
Server, D2RQ Engine 以及 D2RQ Mapping 语言。
D2R Server 是一个 HTTP Server,它的主要功能提供对 RDF 数据的查询访问接口,以供上层的 RDF
浏览器、SPARQL 查询客户端以及传统的 HTML 浏览器调用。
D2RQ Engine 的主要功能是使用一个可定制的 D2RQ Mapping 文件将关系型数据库中的数据换成 RDF 格式。D2RQ
engine 并没有将关系型数据库发布成真实的 RDF 数据,而是使用 D2RQ Mapping 文件将其映射成虚拟的 RDF
格式。该文件的作用是在访问关系型数据时将 RDF 数据的查询语言 SPARQL 转换为 RDB 数据的查询语言 SQL,并将 SQL
查询结果转换为 RDF 三元组或者 SPARQL 查询结果。D2RQ Engine 是建立在&(Jena 是一个创建 Semantic Web
应用的 Java 平台,它提供了基于 RDF,SPARQL 等的编程环境)的接口之上。
D2RQ Mapping 语言的主要功能是定义将关系型数据转换成 RDF 格式的 Mapping 规则。
图 1 呈现了 D2R 的主体架构:
<img STYLE="BorDer-BoTToM: 0 TexT-ALiGn: BorDer-LeFT: 0 pADDinG-BoTToM: 0.7 WiDoWs: 2; TexT-TrAnsForM: BACKGroUnD-CoLor: rgb(255,255,255); TexT-inDenT: 0 pADDinG-LeFT: 5 pADDinG-riGHT: 5 FonT: WHiTe-spACe: orpHAns: 2; LeTTer-spACinG: CoLor: rgb(0,0,0); BorDer-Top: 0 BorDer-riGHT: 0 WorD-spACinG: 0 pADDinG-Top: 0.3 -webkit-text-size-adjust: -webkit-text-stroke-width: 0px" ALT="图 1. D2R 的主体构架" src="/blog7style/images/common/sg_trans.gif" real_src ="/developerworks/cn/web/1003_zhangjing_d2r/image003.jpg" WIDTH="296" HEIGHT="240"
TITLE="Linked&data使用D2R&server操作" />&
在使用 D2R 之前,先要进行准备工作,即对 D2R 的环境进行下载和安装:
下载与你目前使用的数据库版本相匹配的驱动,将其 jar 文件放在 D2R Server 的 lib 目录下面。D2R
目前已经详细测试过 Oracle, MySQL, PostgreSQL, Microsoft SQL
Server。其它数据库没有测试,但笔者尝试过 IBM DB2,发现同样是支持的。
使用 D2R 可以对关系型数据库的数据进行两种方案的转化与访问。第一种方案是将关系型数据库的数据转换为虚拟的 RDF
数据进行访问,分为两个步骤,第一步是生成 Mapping 文件,第二步是使用 Mapping
文件对关系型数据进行转换与访问。我们可以通过 D2R server 访问关系型数据,或者通过在自己的 Java application
中调用 Jena/Seasame 的 API 去访问数据。第二种方案是直接将关系型数据库的数据包装成真实的 RDF
文件,以供一些可以访问 RDF Store 的接口访问。由于一般来讲,数据库的数据规模都比较大,且内容经常发生变化,转换为虚拟的
数据空间复杂度会更低,更新内容更加容易,因此第一种方案的应用更加广泛。我们在这里只介绍第一种方案,并分下述两个步骤进行介绍。
D2R 提供了生成 Mapping 文件的执行脚本。我们需要在命令行中进入您所下载的 D2R 所在的路径,执行下面的命令:
generate-Mapping [-u username] [-p password] [-d driverclass] [-o
outfile.n3] [-b base uri] jdbcURL
参数意义如下:
JDBC 链接数据库的 URL
MySQL: jdbc:mysql://servername/databasename
PostgreSQL: jdbc:postgresql://servername/databasename
Oracle: jdbc:oracle:thin:@servername:1521:databasename
Microsoft SQL Server: jdbc:sqlserver://databaseName=databasename
(包含分号,使用时需要用引号引起来)
DB2:jdbc:db2:// servername:50000/ databasename
-u username
数据库用户登录名
-p password
数据库用户登录密码
-d driverclass
数据库驱动类名
MySQL: com.mysql.jdbc.Driver
PostgreSQL: org.postgresql.Driver
Oracle: oracle.jdbc.OracleDriver
Microsoft SQL Server: com.microsoft.sqlserver.jdbc.SQLServerDriver
DB2:com.ibm.db2.jcc.DB2Driver
-o outfile.n3
Mapping file 的输出文件,以 n3 为后缀
-b base uri
Base uri 作为词汇的命名空间,默认为&http://localhost:2020/&词汇的前缀按照&http://&baseURI&/vocab/resource/&模式生成。base
uri 需要与 server 的 uri 相一致。
例如 : 现在我准备一个关于 Academic 的数据库,其中包括 1)从 hompage
上抽取的有关研究者的信息:homepagePeople;2)从 wikipedia
上抽取的有关研究者的信息:wikipediaPeople;3)从 ACM 页面上抽取的有关论文与作者的信息:Paper,
Author, Paper2Author。数据库相关的 schema 如清单 1 所示:
CREATE TABLE homepagePeople (
peopleID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY,
name varchar(100) NOT NULL,
email varchar(100),
organization varchar(100),
homepage varchar(100),
phone varchar(100),
position varchar(100),
PRIMARY KEY (peopleID)
CREATE TABLE wikiPeople (
peopleID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY,
name varchar(100) NOT NULL,
email varchar(100),
title varchar(100),
employer varchar(100),
education varchar(100),
occupation varchar(100),
PRIMARY KEY (peopleID)
CREATE TABLE paper (
paperID INTEGER NOT NULL,
title varchar(200) NOT NULL,
publishYear varchar(200),
conference varchar(200),
PRIMARY KEY
CREATE TABLE author (
authorID INTEGER NOT NULL ,
name varchar(200) NOT NULL,
email varchar(200),
organization varchar(200),
PRIMARY KEY
(authorID)
CREATE TABLE paper2author (
paperID INTEGER NOT NULL ,
authorID INTEGER NOT NULL ,
PRIMARY KEY
(authorID, paperID),
FOREIGN KEY (paperID) REFERENCES paper(paperID) ON DELETE CASCADE,
FOREIGN KEY (authorID) REFERENCES author(authorID) ON DELETE CASCADE
执行下面命令便可以根据&Academic&的&Schema&生成一个&Mapping&文件存储在&Academic.n3&中&:&generate-Mapping
-o Academic.n3 -d com.ibm.db2.jcc.DB2Driver -u test -p test
jdbc:db2://localhost:50000/Academic 默认的 Mapping
文件非常简单,我们需要的一些数据关联可能没有提供。之后会着重介绍一些利用 Mapping 语言自定制 Mapping
文件的实践方法。
生成 Mapping 文件后,我们便希望通过 Mapping 文件对关系型数据库的数据进行转换和访问,这里有两种方式,一种是通过
D2R Server 自动调用 D2RQ Engine 对数据进行转换访问,另一种在自己的 Java application 中通过
Jena/Seasame 的 API 去使用 D2RQ Engine。
该方法很简单,不需要自己写代码,只需要在命令行下面进入 D2R 所在文件路径,执行下面的命令启动 D2R Server:
d2r-server Academic.n3
其中 Academic.n3 即为上一节中生成 Mapping 文件。
然后在 Web 浏览器中访问 http://localhost:2020, 便可以默认的 HTML 浏览器、DF 浏览器以及
SPARQL 查询端对我们的数据进行访问:
<img STYLE="BorDer-BoTToM: 0 TexT-ALiGn: BorDer-LeFT: 0 pADDinG-BoTToM: 0.7 WiDoWs: 2; TexT-TrAnsForM: BACKGroUnD-CoLor: rgb(255,255,255); TexT-inDenT: 0 pADDinG-LeFT: 5 pADDinG-riGHT: 5 FonT: WHiTe-spACe: orpHAns: 2; LeTTer-spACinG: CoLor: rgb(0,0,0); BorDer-Top: 0 BorDer-riGHT: 0 WorD-spACinG: 0 pADDinG-Top: 0.3 -webkit-text-size-adjust: -webkit-text-stroke-width: 0px" ALT="图 2. D2R Server 运行的入口页面" src="/blog7style/images/common/sg_trans.gif" real_src ="/developerworks/cn/web/1003_zhangjing_d2r/image005.jpg" WIDTH="456" HEIGHT="316"
TITLE="Linked&data使用D2R&server操作" />&
从图 2 中可以看出,虽然我们的 schema 一共有五个,但是 D2R Server
在显示时仅生成了四种类资源:HomepagePeople,wikiPeople, paper,以及 author(图 2
第一行),而是将 paper2author 看作是类资源 author 与 Paper 之间的关系。其概念模型如下所示:
<img STYLE="BorDer-BoTToM: 0 TexT-ALiGn: BorDer-LeFT: 0 pADDinG-BoTToM: 0.7 WiDoWs: 2; TexT-TrAnsForM: BACKGroUnD-CoLor: rgb(255,255,255); TexT-inDenT: 0 pADDinG-LeFT: 5 pADDinG-riGHT: 5 FonT: WHiTe-spACe: orpHAns: 2; LeTTer-spACinG: CoLor: rgb(0,0,0); BorDer-Top: 0 BorDer-riGHT: 0 WorD-spACinG: 0 pADDinG-Top: 0.3 -webkit-text-size-adjust: -webkit-text-stroke-width: 0px" ALT="图 3. Academic 数据概念模" src="/blog7style/images/common/sg_trans.gif" real_src ="/developerworks/cn/web/1003_zhangjing_d2r/image001.jpg" WIDTH="380" HEIGHT="132"
TITLE="Linked&data使用D2R&server操作" />&
点击图 2 第一行的 Author,呈现出 5 个作者,如图 4 所示:
<img STYLE="BorDer-BoTToM: 0 TexT-ALiGn: BorDer-LeFT: 0 pADDinG-BoTToM: 0.7 WiDoWs: 2; TexT-TrAnsForM: BACKGroUnD-CoLor: rgb(255,255,255); TexT-inDenT: 0 pADDinG-LeFT: 5 pADDinG-riGHT: 5 FonT: WHiTe-spACe: orpHAns: 2; LeTTer-spACinG: CoLor: rgb(0,0,0); BorDer-Top: 0 BorDer-riGHT: 0 WorD-spACinG: 0 pADDinG-Top: 0.3 -webkit-text-size-adjust: -webkit-text-stroke-width: 0px" ALT="图 4. 点击 Author 的 HTML 显示结果" src="/blog7style/images/common/sg_trans.gif" real_src ="/developerworks/cn/web/1003_zhangjing_d2r/image008.jpg" WIDTH="344" HEIGHT="197"
TITLE="Linked&data使用D2R&server操作" />&
点击 Author#2,得到 Author#2 的详细属性与关系。如图 5 所示:
<img STYLE="BorDer-BoTToM: 0 TexT-ALiGn: BorDer-LeFT: 0 pADDinG-BoTToM: 0.7 WiDoWs: 2; TexT-TrAnsForM: BACKGroUnD-CoLor: rgb(255,255,255); TexT-inDenT: 0 pADDinG-LeFT: 5 pADDinG-riGHT: 5 FonT: WHiTe-spACe: orpHAns: 2; LeTTer-spACinG: CoLor: rgb(0,0,0); BorDer-Top: 0 BorDer-riGHT: 0 WorD-spACinG: 0 pADDinG-Top: 0.3 -webkit-text-size-adjust: -webkit-text-stroke-width: 0px" ALT="图 5. 访问类资源 Author 中标号为 2 的作者 HTML 显示结果" src="/blog7style/images/common/sg_trans.gif" real_src ="/developerworks/cn/web/1003_zhangjing_d2r/image010.jpg" WIDTH="347" HEIGHT="164"
TITLE="Linked&data使用D2R&server操作" />&
注意在这里,Paper2Atuhor 被映射成了 Author 的一个关系属性,点击该关系关联的资源“”,得到 Paper#1
的详细属性与关系,如图 6 所示:
<img STYLE="BorDer-BoTToM: 0 TexT-ALiGn: BorDer-LeFT: 0 pADDinG-BoTToM: 0.7 WiDoWs: 2; TexT-TrAnsForM: BACKGroUnD-CoLor: rgb(255,255,255); TexT-inDenT: 0 pADDinG-LeFT: 5 pADDinG-riGHT: 5 FonT: WHiTe-spACe: orpHAns: 2; LeTTer-spACinG: CoLor: rgb(0,0,0); BorDer-Top: 0 BorDer-riGHT: 0 WorD-spACinG: 0 pADDinG-Top: 0.3 -webkit-text-size-adjust: -webkit-text-stroke-width: 0px" ALT="图 6. 访问类资源 Paper 中标号为 1 的论文 HTML 显示结果" src="/blog7style/images/common/sg_trans.gif" real_src ="/developerworks/cn/web/1003_zhangjing_d2r/image012.jpg" WIDTH="351" HEIGHT="200"
TITLE="Linked&data使用D2R&server操作" />&
注意在浏览 Paper 的详细信息时,也可以通过反属性 (is vocab:Paper2Author of) 跳转到相关 Author
的详细信息。
点击图 2 中的类资源 HomepagePeople,再点击 1 号资源,呈现出 James A. Hendler 的
homepage 详细信息,如图 7 所示:
<img STYLE="BorDer-BoTToM: 0 TexT-ALiGn: BorDer-LeFT: 0 pADDinG-BoTToM: 0.7 WiDoWs: 2; TexT-TrAnsForM: BACKGroUnD-CoLor: rgb(255,255,255); TexT-inDenT: 0 pADDinG-LeFT: 5 pADDinG-riGHT: 5 FonT: WHiTe-spACe: orpHAns: 2; LeTTer-spACinG: CoLor: rgb(0,0,0); BorDer-Top: 0 BorDer-riGHT: 0 WorD-spACinG: 0 pADDinG-Top: 0.3 -webkit-text-size-adjust: -webkit-text-stroke-width: 0px" ALT="图 7. 访问类资源 HomepagePeople 中标号为 1 的人 HTML 显示结果" src="/blog7style/images/common/sg_trans.gif" real_src ="/developerworks/cn/web/1003_zhangjing_d2r/image014.jpg" WIDTH="349" HEIGHT="190"
TITLE="Linked&data使用D2R&server操作" />&
点击图 2 中的类资源 WikiPeople,再点击 1 号资源,呈现出 James Hendler 的 wikipedia
详细信息,如图 8 所示:
<img STYLE="BorDer-BoTToM: 0 TexT-ALiGn: BorDer-LeFT: 0 pADDinG-BoTToM: 0.7 WiDoWs: 2; TexT-TrAnsForM: BACKGroUnD-CoLor: rgb(255,255,255); TexT-inDenT: 0 pADDinG-LeFT: 5 pADDinG-riGHT: 5 FonT: WHiTe-spACe: orpHAns: 2; LeTTer-spACinG: CoLor: rgb(0,0,0); BorDer-Top: 0 BorDer-riGHT: 0 WorD-spACinG: 0 pADDinG-Top: 0.3 -webkit-text-size-adjust: -webkit-text-stroke-width: 0px" ALT="图 8. 访问类资源 WikiPeople 中标号为 1 的人 HTML 显示结果" src="/blog7style/images/common/sg_trans.gif" real_src ="/developerworks/cn/web/1003_zhangjing_d2r/image016.jpg" WIDTH="350" HEIGHT="196"
TITLE="Linked&data使用D2R&server操作" />&
如果需要在 RDF 数据层上构建自己的应用,开发自己的客户端展示方法,就要用到第二种方式,即直接在自己的 Java 工程中通过
Jena/Seasame 的 API 去使用 D2RQ, 这里仅介绍 Jena 的使用方式,Seasame
的使用留给读者自己去实践。
首先需要在你的工程中引用 D2RQ 与 Jena 相关的 jar 包:
将你下载的 D2R server 目录下的 lib/d2rq-0.7.jar 加入你工程的 classpath;
下载&,将其 lib 目录下的所有 jar
包加入你工程的 classpath。
使用 Jena API 可以多种方式调用 D2RQ, 其中最简洁的方式为直接编写 SPARQL 查询语言,其余方式都需要调用 Jena
的封装类,如 Resource,Property, RDFNode 等,需要读者非常熟悉 Jena
的接口,并需要为自己的数据创建相应的 Jena 类对象,因此比较麻烦。本文在此介绍最容易上手也是最灵活的访问方式,SPARQL
假定我们现在需要构建一个应用,展示所有作者的 name, email 和 paper,因此在 server
端需要提供一个查询类,如清单 2 所示:
import com.hp.hpl.jena.query.Q
import com.hp.hpl.jena.query.QueryExecutionF
import com.hp.hpl.jena.query.QueryF
import com.hp.hpl.jena.query.QueryS
import com.hp.hpl.jena.query.ResultS
import de.fuberlin.wiwiss.d2rq.ModelD2RQ;
public class AcademicTest {
public void queryBySPARQL(){
ModelD2RQ m = new ModelD2RQ("file:/D:/Academic.n3");
String SPARQLPrefix = "PREFIX vocab: http://localhost:2020/vocab/resource/";
String SPARQL =
SPARQLPrefix +
?name ?email ?paper WHERE {" +
?author vocab:Name ?name . " +
?author vocab:Email ?email ." +
?author vocab:Paper2Author ?paper . }"
Query query = QueryFactory.create(SPARQL);
ResultSet rs = QueryExecutionFactory.create(query, m).execSelect();
while (rs.hasNext()) {
QuerySolution row = rs.nextSolution();
System.out.println("name:"+row.get("name")+",email:"+row.get("email")+",
paper:"+row.get("paper"));
从清单 2 可以看出,用 SPARQL 查询数据的步骤如下:
创建 D2RQ model。该步骤需要注意的是,创建 model 时需要指定 Mapping
文件的路径,路径可以是绝对路径,也可以是基于工程根目录的相对路径,路径之前必须加上前缀“file:/”。
执行 SPARQL 语言。该 SPARQL 语句中 ?author 为主语,vocab:Name,vocab:Email 以及
vocab:Paper2Author 为谓语,查询结果 ?name,?email 以及 ?paper 为宾语。注意 SPARQL
语句需要有命名空间的前缀说明。如在清单程序的使用了 vocab:Name,则在前缀需要声明 vocab:
http://localhost:2020/vocab/resource/,并且该声明必须与 Mapping 文件的前缀相一致。有关
SPARQL 的详细语法,在此不作详细介绍,读者可以参阅&的详细说明。在执行
SPARQL 语句时,需要指明要执行的语句,以及所依附的 D2RQ model。
处理查询结果(e.g.,输出到 console)。关于 ResultSet 的处理,jena 提供了一些类似 SQL
的接口去获取每个查询结果项。
程序清单 2 的执行结果如下:
name:Jie Bao, email:baojie@cs.rpi.edu, paper:file:///D:/Academic2.n3#ZJ.PAPER/1
name:Li Ding, email:dingl@cs.rpi.edu, paper:file:///D:/Academic2.n3#ZJ.PAPER/1
name:Deborah McGuinness, email:dlm@cs.rpi.edu, paper:file:///D:/Academic2.n3#ZJ.PAPER/1
name:James Hendler, email:hendler@cs.rpi.edu, paper:file:///D:/Academic2.n3#ZJ.PAPER/1
name:James Hendler, email:hendler@cs.rpi.edu, paper:file:///D:/Academic2.n3#ZJ.PAPER/3
name:James Hendler, email:hendler@cs.rpi.edu, paper:file:///D:/Academic2.n3#ZJ.PAPER/2
name:Jennifer Golbeck, email:jgolbeck@umd.edu, paper:file:///D:/Academic2.n3#ZJ.PAPER/2
name:Jennifer Golbeck, email:jgolbeck@umd.edu, paper:file:///D:/Academic2.n3#ZJ.PAPER/3
注意,结果中 name 与 email 的值都是一个文字型资源,而 paper
的值则是一个类资源,用一个路径表示(注意,笔者目前创建的是 Java 工程,因此可以用一个文件路径来标识一个资源,在 Web
工程中,可以曝露出 HTTP URI,例如图 4 中用
http://localhost:2020/resource/ZJ.paper/1 表示一篇 paper)。
如何读者希望查询某一具体实例资源的属性值,在写 SPARQL 语句的时候注意需要将路径用“&&”引起来,例如:
?title WHERE {
vocab:Title ?title }"
读者可以基于 server 端提供的接口,构建自己的 client 端对数据进行展示,本文在此不作介绍。
到此为止,我们便介绍了如何使用 D2R 将关系型数据库中的数据转换为虚拟的 RDF
数据,并对其进行访问查询的最基本方法。接下来我们将介绍如何丰富自动生成的 Mapping 文件,使得更多的数据能够关联在一起。
本节首先简单介绍 Mapping 语言的一些基本语法,然后介绍如何利用 Mapping 语言对 Mapping 文件进行定制。
Mapping 语言中最重要的是两个概念,一个是&d2rq:ClassMap,另一个是&d2rq:PropertyBridge。
d2rq:ClassMap 代表 OWL Ontology 或者 RDFS Schema 中的一个或一组相似的
Class,它一般映射到关系数据库中的一个表。其中包括几个重要属性:
d2rq:Class:表示该 ClassMap 所对应 Class,其取值可以来自现有的 OWL
Ontology 或者 RDFS Schema,也可以根据自己的数据特征定义新的 Class;
d2rq:UriPattern: 描述了一个 URI 模板,用来指导生成实例化资源的真实
URI。一般用“ZJ.AUTHOR/@@ZJ.AUTHOR.AUTHORID@@”来表示,“/”前面的部分为表名,后面“@@”之间的部分为表的列。
d2rq:PropertyBridge 代表 OWL Ontology 或者 RDFS Schema 中 Class
的属性,它一般映射到关系数据库中某个表的一列。其中包括几个重要属性:
d2rq:belongsToClassMap: 表示该 propertyBridge 所属的
ClassMap;
d2rq:property: 表示该 propertyBridge 所对应
property,其取值可以来自现有的 OWL Ontology 或者 RDFS Schema,也可以根据自己的数据特征定义新的
property;
d2rq:column: 表示该 propertyBridge 关联的某个具体表中的列。
d2rq:refersToClassMap: 表示该 propertyBridge 引用的其它
ClassMap,它的取值不是该 propertyBridge 所属 ClassMap 对应表中的取值,而是从引用的 ClassMap
对应表中取值。该属性一般会跟随几个 d2rq:join 来指明关联的条件,d2rq:join 类似 sql 语句中的 where
Linked data 最重要的特点便是资源和资源之间是互联的,从一个资源可以跳转到其它许多资源。如图 4、5 中,从类资源
Author 可以跳转到类资源 Paper,同样从类资源 Paper 也可以跳转到类资源
Author。这些关联生成的前提是原始的数据中存在 Paper2Author 表,通过外键引用 Paper 表与 Author
表。有了主外键关系,D2R 便可以自动为其创建 RDF 关联。具体做法为,如果一个表 A 被表 B 外键引用,则为 A 对应的
ClassMap 创建一个 PropertyBridge,其 d2rq:belongsToClassMap 为 A 所对应的
ClassMap,d2rq:refersToClassMap 为 B 所对应的 ClassMap。 这样,在浏览 A
的实例资源时,便可以通过该 PropertyBridge 跳转到 B
的实例资源。如果一个表的所有列都通过外键引用其它数据表,则不会为该表生成对应的
ClassMap,而是选取一个被引用的表,为其创建属性,属性取值来自其它被引用的表。例如本文所举例子中的
Paper2Author:
# n:m table ZJ.PAPER2AUTHOR
map:Paper2author a d2rq:PropertyB
d2rq:belongsToClassMap map:A
d2rq:property vocab:Paper2A
d2rq:refersToClassMap map:P
d2rq:join "ZJ.PAPER2AUTHOR.AUTHORID =& ZJ.AUTHOR.AUTHORID";
d2rq:join "ZJ.PAPER2AUTHOR.PAPERID =& ZJ.PAPER.PAPERID";
实际情况中,很多数据之间虽然有联系,但数据库的创建者们并没有为之建立主外键的关系。在这种情况下,我们就需要根据一定的领域常识或经验,手动地修改
Mapping 文件,为之建立一些必要的关联。
例如,文中的 Academic 数据集,数据表 HomepagePeople 中的数据是 从 hompage
上抽取的有关研究者的信息, 数据表 WikiPeople 中的数据时从 wikipedia
上抽取的有关研究者的信息,这两张表并没有主外键的关联。但实际上,根据我们的常识,这两张表中的数据很有可能指代同一个人。因此,我们希望定义一定的规则,将
Homepage 这个类资源与 WikiPeople 这个类资源关联起来。清单 4 给出了我们自定义的属性
wikiInfor,该属性属于类资源 HomepagePeople,引用类资源 WikiPeople:
map:wikiInfor a d2rq:PropertyB
d2rq:belongsToClassMap map:HomepageP
d2rq:property vocab:WikiI
d2rq:refersToClassMap map:WikiP
d2rq:join "ZJ.HOMEPAGEPEOPLE.EMAIL =& ZJ.WIKIPEOPLE.EMAIL";
d2rq:join "ZJ.HOMEPAGEPEOPLE.ORGANIZATION =& ZJ.WIKIPEOPLE.EMPLOYER";
清单 4 定义了 PropertyBridge:wikiInfor,其中 d2rq:belongsToClassMap 描述了
wikiInfor 所属的 ClassMap 为 HomepagePeople;d2rq:property 描述了 wikiInfor
所对应的 property 为 vocab:WikiInformation,这个值可以修改,或者引用现有的 Ontology/RDFS
中的词汇,或者根据自己的数据灵活定义;d2rq:refersToClassMap 描述了 wikiInfor 所引用的
ClassMap 为 WikiPeople,表示 wikiInfor 的取值来源于 WikiPeople 对应的表,而不是
HomepagePeople 对应的表;d2rq:join 描述了 wikiInfor 引用 WikiPeople
的条件,这里给出了两个条件,即 HomepagePeople 与 WikiPeople 的 email 相同并且
HomepagePeople 的 organization 与 WikiPeople 的 employer
相同。在这两个条件同时满足的情况下,wikiInfor 才会生成具体的值,使得从一个 HomepagePeople
的实例资源可以跳转到他相应的 WikiPeople,如图 9 所示:
<img STYLE="BorDer-BoTToM: 0 TexT-ALiGn: BorDer-LeFT: 0 pADDinG-BoTToM: 0.7 WiDoWs: 2; TexT-TrAnsForM: BACKGroUnD-CoLor: rgb(255,255,255); TexT-inDenT: 0 pADDinG-LeFT: 5 pADDinG-riGHT: 5 FonT: WHiTe-spACe: orpHAns: 2; LeTTer-spACinG: CoLor: rgb(0,0,0); BorDer-Top: 0 BorDer-riGHT: 0 WorD-spACinG: 0 pADDinG-Top: 0.3 -webkit-text-size-adjust: -webkit-text-stroke-width: 0px" ALT="图 9. 用 D2R Server 展示 wikiInfor 属性" src="/blog7style/images/common/sg_trans.gif" real_src ="/developerworks/cn/web/1003_zhangjing_d2r/image018.jpg" WIDTH="317" HEIGHT="189"
TITLE="Linked&data使用D2R&server操作" />&
相比图 7 可以看出,类资源 HomepagePeople 多了一条定制的关系属性 wikiInfor。
清单 5 列举了一个更复杂的属性 coauthor。该属性连接了 HomepagePeople 与 Author。当浏览
HomepagePeople
的实例资源时,可以跳转到与其共同发表过论文的作者。这个关系需要关联三张表,HomepagePeople,Author 以及
Paper2Author。从 HompagePeople 到 Author 通过 Email 以及 Organization 关联,从
Author 到 Paper2Author 通过 AuthorID 关联。注意在这些 join 条件中,Author 与
Paper2Author 分别出现了两次,因此需要使用 d2rq:alias 声明别名。此外,我们不希望 coauthor
列表中包括自己,因此需要使用 d2rq:condition 声明一条不相等关系。
map:coauthor a d2rq:PropertyB
d2rq:belongsToClassMap map:HomepageP
d2rq:property vocab:C
d2rq:refersToClassMap map:A
d2rq:join "ZJ.HOMEPAGEPEOPLE.EMAIL =& ZJ.AUTHOR.EMAIL";
d2rq:join "ZJ.HOMEPAGEPEOPLE.ORGANIZATION =& ZJ.AUTHOR.ORGANIZATION";
d2rq:join "ZJ.AUTHOR.AUTHORID =& ZJ.PAPER2AUTHOR.AUTHORID";
d2rq:join "ZJ.PAPER2AUTHOR.PAPERID =& P2A2.PAPERID";
d2rq:join "P2A2.AUTHORID = A2.AUTHORID";
d2rq:alias "ZJ.HOMEPAGEPEOPLE AS P2";
d2rq:alias "ZJ.AUTHOR AS A2";
d2rq:alias "ZJ.PAPER2AUTHOR AS P2A2";
d2rq:condition "ZJ.AUTHOR.AUTHORID && A2.AUTHORID";
从图 10 可以看出,相比图 9,类资源 HomepagePeople 多了一条定制的关系属性 coauthor。
<img STYLE="BorDer-BoTToM: 0 TexT-ALiGn: BorDer-LeFT: 0 pADDinG-BoTToM: 0.7 WiDoWs: 2; TexT-TrAnsForM: BACKGroUnD-CoLor: rgb(255,255,255); TexT-inDenT: 0 pADDinG-LeFT: 5 pADDinG-riGHT: 5 FonT: WHiTe-spACe: orpHAns: 2; LeTTer-spACinG: CoLor: rgb(0,0,0); BorDer-Top: 0 BorDer-riGHT: 0 WorD-spACinG: 0 pADDinG-Top: 0.3 -webkit-text-size-adjust: -webkit-text-stroke-width: 0px" ALT="图 10. 用 D2R Server 展示 coauthor 属性" src="/blog7style/images/common/sg_trans.gif" real_src ="/developerworks/cn/web/1003_zhangjing_d2r/image020.jpg" WIDTH="302" HEIGHT="205"
TITLE="Linked&data使用D2R&server操作" />&
经过上述两条关系属性的定制,图 3 中默认的概念模型扩展为图 11 中新的概念模型:
<img STYLE="BorDer-BoTToM: 0 TexT-ALiGn: BorDer-LeFT: 0 pADDinG-BoTToM: 0.7 WiDoWs: 2; TexT-TrAnsForM: BACKGroUnD-CoLor: rgb(255,255,255); TexT-inDenT: 0 pADDinG-LeFT: 5 pADDinG-riGHT: 5 FonT: WHiTe-spACe: orpHAns: 2; LeTTer-spACinG: CoLor: rgb(0,0,0); BorDer-Top: 0 BorDer-riGHT: 0 WorD-spACinG: 0 pADDinG-Top: 0.3 -webkit-text-size-adjust: -webkit-text-stroke-width: 0px" ALT="图 11. 扩展的概念模型" src="/blog7style/images/common/sg_trans.gif" real_src ="/developerworks/cn/web/1003_zhangjing_d2r/image021.jpg" WIDTH="502" HEIGHT="136"
TITLE="Linked&data使用D2R&server操作" />&
此外,读者如果希望从自己的数据源链接到 Web 上其它数据源,必须创建它们的关系并将其额外存储在一个真实的 RDF
数据库中。访问的时候,一方面去查询 D2R 转换的虚拟 RDF 数据库,同时要查询这个真实的 RDF
数据库,使得所有的内部与外部关系都被查询出来。本文将不介绍如何创建这些关系,有兴趣的读者可以参看&,它是一个在不同
Linked data 数据源之间发现关系的工具。
本文介绍了如何使用 D2R 工具将关系型数据库的数据发布为 Linked data,重点介绍了 D2R
的基本概念,使用步骤(包括直接访问 D2R Server 以及通过 Jena API 调用两种使用方式)以及定制 Mapping
文件创建关联属性的方法。有关 Linked data 发布及关系创建的工具有很多种,感兴趣的读者可以参考&。
Christian Bizer, Tom Heath, Tim Berners-Lee.&. IJSWIS ’ 09. Linked data 发展现状。
:本教程讲述了如何在 Web 上发布 Linked Data。再简单介绍了一些 Linked
Data 的概念以后,本文为您介绍了一些将信息发布成为 Linked Data 的最佳实践。
如何将关系型数据发布为 Linked Data。
: RDF 介绍。
: SPARQL 查询语言介绍。
:Jena 的 API 文档。
: 在不同 Linked
data 的数据源之间发现关系的工具。
介绍将其它格式的数据转化为 RDF 的工具。
“”(developerWorks,2001 年 7 月):对于怎么比较有相等语义的 XML 的建议。
“”(developerWorks,2003 年 10 月):本文介绍了 XML 结合 RDF 实现
Web 数据基于语义的描述。
“”(developerWorks,2004 年 11
月):本文说明了如何用语义请求和响应概念来明确规范化地理空间 Web 服务的开发和利用。
“”(developerWorks,2005 年 5
月):本期文章将继续探讨语义透明的许多不同方法,介绍这些方法对使用 XML 的开发人员的影响。长途旅行中节省体力的一种办法是搭便车。在
XML 中,可以利用数不清的开放的模式计划,其结果就是通过模式标准化实现自上而下的语义透明。但这并非完全免费的搭便车。在文中,Uche
Ogbuji 将考察第三方模式重用的优缺点。他还提到了 The Semantic Technology Conference
2005,对最近关于姓名建模困难的讨论作了答复。
“”(developerWorks,2005 年 12
月):作者在向您介绍组织如何利用基于存在论开发的同时,还探索了语义 Web 技术的基础。语义 Web
有助于有效的知识管理和有成本效益的产品生命周期自动化,实现更快的开发和集成过程。
“”(developerWorks,2006 年 11 月):本系列按顺序记录了一个终极 mashup
应用程序的创建过程,它不仅存储来自不同 mashup 的数据,而且使用语义技术让能够用户通过交换服务或选择数据来创建自己的
mashup。该程序采用 Java 编写,结合了开放源码 Jena 项目的 servlet、JSP、软件以及 DB2 新增的原生
XML 能力。在这一期中,Nicholas Chase 介绍了 mashup 的概念,说明了 mashup 的工作原理,以及构建简单
mashup 的方法。
developerWorks&和&:随时关注
developerWorks 技术活动和网络广播。&
:通过专门关于 Web 技术的文章和教程,扩展您在网站开发方面的技能。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 宾语从句 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信