为RDBMS(MySQL数据库)创建SPARQL端点的最佳方法

时间:2010-05-23 11:10:28

标签: mysql semantic-web sparql

我正在做(想做)一些关于链接开放数据集的实验,特别是那些由政府提出的实验。

我有一个RDBMS(更具体地说是MySQL)。我在设计时考虑了语义网络思想,即我将信息存储为定义对象的对象,谓词和类。反过来,所有对象彼此相关,尽管形式主题的陈述 - >谓词 - >对象(主题来自于对象表)。

我希望能够从我的应用程序中查询其他RDF三元组商店,并让其他三元组商店查询我的数据。有可能“设置一些东西”以便这可能吗?

我看过耶拿。使用Jena似乎意味着我必须将它作为存储应用程序而不是MySQL - 唯一的问题是我包含一个称为类别的新概念(我认为它不是语义Web语言的一部分)。我将使用类别来帮助显示信息(它们没有任何其他含义),但使用Jena似乎意味着我无法在类别下组织谓词以便于查看。

我正在使用Java,因此首选JAVA API。

我也有可能误解了耶拿的目的,也许这可能有用,但我不确定如何。

我相信从现在开始的四天这个问题看起来很愚蠢,但目前我对如何进行感到有些困惑。

2 个答案:

答案 0 :(得分:4)

我不确定“一个叫做类别的新概念”是什么意思,或许你能给出一个例子吗?

如果您想要添加其他元数据,或许是为了在用户界面中组织信息,则无需扩展语义Web语言或存储系统 - 他们已经可以做您想要的了。

假设您拥有来自UK Government schools dataset的学校数据(为简洁起见使用Turtle编码):

@prefix sch-ont:  <http://education.data.gov.uk/def/school/>.
<http://education.data.gov.uk/id/school/135412>
a sch-ont:School;
sch-ont:establishmentStatus 
    <http://education.data.gov.uk/def/school/EstablishmentStatus_Open>;
sch-ont:MSOA <http://statistics.data.gov.uk/id/msoa/E02000001>;
sch-ont:establishmentName "Guildhall School of Music and Drama";
...

您可以直接从SPARQL end-point查询该数据,也可以下载数据并将其存储在您自己的三重存储中。无论哪种方式,您都可以自由地添加对用户有用的额外信息。例如:

@prefix ankurs-app: <http://ankur.org/example/app/vocab/display#>.
<http://education.data.gov.uk/id/school/135412> 
        ankurs-app:category ankurs-app:wkdCool.

您可以将此新三元组存储在与下载数据相同的图形中,也可以将其存储在单独的命名图形中,以指示其信息来源与源数据不同。无论哪种方式,从Jena以编程方式或通过SPARQL查询查询都很简单。

高效地进行布局查询无模式三重中心数据是一个经过深入研究且难以解决的问题。包括Jena在内的大多数RDF平台都具有优化的代码,用于从自己的数据库方案中查询和更新三元组。你必须有很好的理由来开始你自己的关系表布局:)

如果您确实需要采用现有的关系表方案并将其映射到Jena RDF模型,请查看D2RQ

答案 1 :(得分:3)

为什么不使用三重商店存储所有数据?如果您使用具有SPARQL endpoint功能的三重存储,那么您将拥有一个SPARQL可访问的Web API。同样,Web上的许多其他数据集也作为SPARQL端点公开,并可通过HTTP访问。

在数据库和其他方面(Jena + SDB,Mulgara,Virtuoso,Oracle等),有许多三重存储可用于持久存储。你当然可以通过他们的解析器扩展Mulgara以支持对你的自定义数据库的查询,但我认为这可能是很多工作,因为没有太大的实际价值。

我确信您可以使用现有概念来处理您在RDF中的类别概念,或者可能通过在Jena上分层来处理。