SPARQL - 完成该组所需的主题

标签 sparql

我正在使用 RDF 开发一个新项目,只是学习它和 SPARQL。我认为这个查询会比结果更容易。

给定这个商店(从本体中简化出来)

Person1 -Owns->  Part1
Person2 -Owns->  Part1
Person2 -Owns->  Part2
Part1 -PartOf-> Product1
Part2 -PartOf-> Product1

我正在尝试退回人们完成其产品所需的所有部件。

给定 Person1,他需要 Part2 来完成 Product1 的制作。 对于 Person2,他不需要任何东西,因为他拥有制造 Product1 的所有零件。

我想在 1 个查询中返回每个产品的所有人员和所有所需零件,但我想从小规模开始,只是试图找到特定人员需要的零件。真实数据具有多种产品和可能属于多种产品的零件(即螺钉存在于许多产品中)以及拥有属于多种产品的零件的人员。一旦我可以让子集查询工作,我应该能够扩展它。

select ?parts
where 
{ 
  ?parts <PartOf> <Product1> .
  minus {<Person1> <Owns> ?parts}
}

我的想法是获取属于 Product1 的所有部件,然后消除 Person1 拥有的部件。但我得到了 Product1 中的所有零件。我尝试了很多其他查询,但在阅读教程和书籍后,这对我来说是最合乎逻辑的。有人可以指出我哪里出错了吗?

感谢您的宝贵时间。

最佳答案

您使用的是什么查询软件,您的数据实际上是什么样的?我使用 apache jena 尝试了以下操作:

@prefix ex: <http://example.com/> .

ex:person1 ex:owns ex:part1 .
ex:person2 ex:owns ex:part1 .
ex:person2 ex:owns ex:part2 .

ex:part1 ex:partOf ex:product1 .
ex:part2 ex:partOf ex:product1 .

和查询:

prefix ex: <http://example.com/>

select ?parts
where
{
    ?parts ex:partOf ex:product1
    minus { ex:person1 ex:owns ?parts }
}

结果:

$ arq --data data.ttl --query query.rq 
------------
| parts    |
============
| ex:part2 |
------------

鉴于您所编写的内容,您的查询软件可能存在错误(可能),但更有可能的是,您的数据或查询中可能存在简单的拼写错误。如果(例如)您使用的是“拥有”(小写)而不是“拥有”,则可以解释您的结果。

尝试执行{<Person1> <Owns> ?parts}通过它自己。你有结果吗?与您的查询返回的部分是否匹配?

关于SPARQL - 完成该组所需的主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15499759/

相关文章:

nlp - 自然语言到 Sparql

web-services - 如何使用 Tomcat 7.0.27 提供 SPARQL 端点

sparql - 检索每个 OWL 的 unionOf 和 junctionOf 的集合

java - Jena Fuseki API 将新数据添加到现有数据集 [java]

sparql - 使用 SPARQL 从 DBpedia 获取国家/地区的所有城市

Angular 2 中带有 header 和参数的 HTTP GET 请求

SPARQL 递归祖先查询

rdf - 使用密码的 SPARQL INSERT

sparql - 限制本地 DBpedia SPARQL 查询中的结果

sparql - 通过耶拿发布时,COUNT 聚合在 DBPedia 上不起作用