5

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

我有一个 RDBMS(更具体地说是 MySQL)。我在设计它时考虑了语义网的想法,即我有一个信息存储为对象、谓词和定义对象的类。反过来,所有对象都通过主体 --> 谓词 --> 对象(其中主体来自对象表)形式的语句相互关联。

我希望能够从我的应用程序中查询其他 RDF 三元存储,并让其他三元存储查询我的数据。是否可以“设置某些东西”以使其成为可能?

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

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

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

我敢肯定,从现在起四天后,这个问题会显得相当愚蠢,但目前我对如何进行有些困惑。

4

2 回答 2

5

我不确定您所说的“称为类别的新概念”是什么意思,也许您可​​以举个例子?

如果您的意思是要添加额外的元数据,也许是作为在用户界面中组织信息的一种方式,则无需扩展语义 Web 语言或存储系统——它们已经可以满足您的需求。

假设您有来自英国政府学校数据集的一所学校的数据(为简洁起见,使用 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 端点查询该数据,也可以下载数据并将其本地存储在您自己的三重存储中。无论哪种方式,您都可以完全自由地添加对您的用户有用的额外信息。例如:

@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 查询都可以很容易地查询它。

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

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

于 2010-05-25T12:25:07.383 回答
3

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

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

我相信您可以使用现有的概念来处理您在 RDF 中的类别概念,或者也许通过在 Jena 上分层一些东西。

于 2010-05-23T14:05:51.370 回答