首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >三重存储如何使用链接数据?

三重存储如何使用链接数据?
EN

Stack Overflow用户
提问于 2016-04-18 13:11:41
回答 1查看 63关注 0票数 0

让我说,我有以下场景:

我有一些不同的本体文件托管在web上的不同领域,如_http://foo1.com/ontolgy1.owl#、_http://foo2.com/ontology2.owl#等。

我还有一个三重存储库,我希望在其中插入基于所提到的本体文件的实例,如下所示:

代码语言:javascript
复制
INSERT DATA
{
  <http://foo1.com/instance1> a <http://foo1.com/ontolgy1.owl#class1>.
  <http://foo2.com/instance2> a <http://foo2.com/ontolgy2.owl#class2>.
  <http://foo2.com/instance2x> a <http://foo2.com/ontolgy2.owl#class2x>.
}

假设_http://foo2.com/ontolgy2.owl#class2x是在同一本体中定义的_http://foo2.com/ontolgy2.owl#class2的子类。

在插入之后,如果我运行这样的SPARQL查询:

代码语言:javascript
复制
select ?a
where 
{
  ?a rdf:type ?type.
  ?type  rdfs:subClassOf* <http://foo2.com/ontolgy2.owl#class2> .
}

其结果将是:

代码语言:javascript
复制
<http://foo2.com/instance2>

而不是:

代码语言:javascript
复制
<http://foo2.com/instance2>
<http://foo2.com/instance2x>

它应该是的。之所以发生这种情况,是因为本体文件_http://foo2.com/ontolgy2.owl#没有导入到三元存储中。

我的问题是:

在这个例子中,我们能谈谈“链接”数据吗?因为在我看来,它完全没有联系。它必须在本地导入到一个三重存储中,然后您可以开始查询。

如果您想对由20个本体文件描述的复杂数据运行查询,那么需要导入所有20个本体文件。

这是不是有点令人失望?

我是否误解了三重存储和链接数据以及它们是如何协同工作的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-18 15:55:23

它应该是的。

我不确定这是否应该是正确的术语。SPARQL查询的语义是查询存储在端点上的特定图中的数据。IRIs或多或少是不透明的标识符;仅仅因为它们也可能是可以检索额外数据的URL,并不意味着任何特定的系统都有义务进行这种检索。这样做很容易使查询行为不可预测:“这个查询昨天成功了,为什么今天不能工作?哦,远程网站不再可以使用…了。”。

假设_http://foo2.com/ontolgy2.owl#class2x是在同一本体中定义的_http://foo2.com/ontolgy2.owl#class2的子类。

记住,因为IRIs是不透明的,任何人都可以在任何本体中定义术语。对于其他人来说,总是有可能对资源说点别的。你无法追踪所有这些信息。例如,如果我编写了一个本体,我可以将http://foo2.com/ontolgy2.owl#class2x声明为一个类,并断言它等同于http://dbpedia.org/ontology/Person。系统是否应该知道我在其他地方做了什么,即使这样做了,是否应该要求它去检索信息呢?如果我创建了一个大小为2GB的本体怎么办?当然,您的端点不可能仅仅为了回答快速查询而去检索它吗?

在这个例子中,我们能谈谈“链接”数据吗?因为在我看来,它完全没有联系。它必须在本地导入到一个三重存储中,然后您可以开始查询。 如果要对20个本体文件描述的复杂数据运行查询,那么在本例中,我必须导入所有20个本体文件。

这通常是这样的,而关于链接数据的要点是,如果您愿意,您可以获得更多的信息,并且您不必在协商如何确定数据中的资源方面做那么多的工作。但是,您可以在SPARQL中使用服务关键字来引用其他端点,这可以提供一种类型的链接。例如,知道DBpedia有一个SPARQL端点,我可以运行一个本地查询,该查询将DBpedia与以下内容结合在一起:

代码语言:javascript
复制
select ?person ?localValue ?publicName {
  ?person :hasLocalValueOfInterest ?localValue
  service <http://dbpedia.org/sparql> {
    ?person foaf:name ?publicName 
  }
}

您可以使用多个服务块从多个端点聚合数据;您不仅限于一个端点。这对我来说似乎很“有关联”。

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

https://stackoverflow.com/questions/36695002

复制
相关文章

相似问题

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