首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jena/ARQ:模型、图和DataSet的区别

Jena/ARQ:模型、图和DataSet的区别
EN

Stack Overflow用户
提问于 2011-08-08 11:32:07
回答 2查看 8K关注 0票数 34

我开始使用耶拿引擎,我想我掌握了什么是语义。然而,我很难理解在Jena和ARQ中表示一组三元组的不同方法:

启动时遇到的第一件事是graphs.

  • However,文档中说它的Jenas名称是RDF Model

  • Then还有Graph,这似乎是我想要查询模型联盟时必需的工具,但是它似乎没有与Model共享一个公共接口,尽管可以从Model

  • Then中获取Graph --在ARQ中有DataSet,这似乎也是某种类型的三元组的集合。

当然,在一些人浏览了API之后,我找到了从一个转换到另一个的方法。不过,我怀疑,对于同一件事,它有不止3种不同的接口。

那么,问题是:这三者之间的主要设计差异是什么?我什么时候该用哪一个?特别是:当我想要持有单个的三组数据,但将它们作为一大串(联合)查询时,我应该使用哪些数据结构(以及为什么)?此外,当“转换”为另一个时,我是否“松”了任何东西(例如,model.getGraph()在某种程度上比model包含更少的信息)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-08 13:38:36

Jena分为用于应用程序开发人员的API和用于系统开发人员的SPI,如制作存储引擎、推理器等。

DataSetModelStatementResourceLiteral是API接口,为应用程序开发人员提供了许多便利。

DataSetGraphGraphTripleNode是SPI接口。它们很简朴,实现起来也很简单(如果你想要实现这些东西的话,你会希望如此)。

各种各样的API操作都归结为SPI调用。为了给出一个例子,Model interface有四个不同的contains方法。在内部,每一个都会产生一个呼叫:

代码语言:javascript
复制
Graph#contains(Node, Node, Node)

比如

代码语言:javascript
复制
graph.contains(nodeS, nodeP, nodeO); // model.contains(s, p, o) or model.contains(statement)
graph.contains(nodeS, nodeP, Node.ANY); // model.contains(s, p)

关于您关于丢失信息的问题,使用ModelGraph,您不需要(据我所知)。更有趣的例子是ResourceNodeResources知道它们属于哪个模型,所以您可以(在api中)编写最终成为Graph#addresource.addProperty(...)Node没有这样的方便,并且不与特定的Graph相关联。因此,Resource#asNode是有损的。

最后:

当我想要持有单个的三组数据,但将它们作为一大串(联合)查询时,我应该使用哪些数据结构(以及为什么)?

显然,您是一个正常的用户,所以您需要API。您想要存储三元组,所以使用Model。现在,您希望将模型查询为一个联合:您可以:

  • Model#union() everything,它将将所有三元组复制到一个新的model.
  • ModelFactory.createUnion() everything中,这将创建一个动态联合(即,在TDB或SDB数据集存储中不使用copying).
  • Store作为命名模型,并使用unionDefaultGraph选项.

)。

最后一种方法最适合于大量的模型和大型模型,但需要更多地进行设置。

票数 24
EN

Stack Overflow用户

发布于 2011-08-08 14:13:19

简短的回答:Model只是一个无状态包装器,围绕一个Graph有很多方便的方法。ModelFactory.createModelForGraph(Graph)将图形包装在模型中。Model.getGraph()获取包装图。

大多数应用程序程序员都会使用Model。就我个人而言,我更喜欢使用Graph,因为它更简单。我很难记住Model类的所有技巧。

Dataset是几个Model的集合:一个“默认模型”和零个或多个“命名模型”。这相当于SPARQL中的“RDF数据集”的概念。(从技术上讲,SPARQL不是“RDF图”的查询语言,而是“RDF数据集”的查询语言,RDF数据集可以是命名RDF图的集合加上默认的图。)

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6981467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档