Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SPARQL-完成集合所需的主题_Sparql - Fatal编程技术网

SPARQL-完成集合所需的主题

SPARQL-完成集合所需的主题,sparql,Sparql,我正在使用RDF进行一个新项目,只是学习它和SPARQL。我原以为这个问题会比实际情况更简单 给定此存储(在本体之外简化) 我正在尝试返回一个人完成其产品所需的所有零件 给定一个人,他需要第二部分来完成产品的制作。 给定一个人,他什么都不需要,因为他拥有生产产品的所有零件 我想在一个查询中返回每个产品的所有人员和所有需要的部件,但我想从较小的部分开始,只是尝试查找特定人员需要的部件。真实数据包含多个产品和零件,这些产品和零件可能包含在多个产品中(即,螺钉包含在许多产品中)以及拥有多个产品零件的人

我正在使用RDF进行一个新项目,只是学习它和SPARQL。我原以为这个问题会比实际情况更简单

给定此存储(在本体之外简化)

我正在尝试返回一个人完成其产品所需的所有零件

给定一个人,他需要第二部分来完成产品的制作。 给定一个人,他什么都不需要,因为他拥有生产产品的所有零件

我想在一个查询中返回每个产品的所有人员和所有需要的部件,但我想从较小的部分开始,只是尝试查找特定人员需要的部件。真实数据包含多个产品和零件,这些产品和零件可能包含在多个产品中(即,螺钉包含在许多产品中)以及拥有多个产品零件的人员。一旦我可以得到一个子集查询工作,我应该能够扩展它

select ?parts
where 
{ 
  ?parts <PartOf> <Product1> .
  minus {<Person1> <Owns> ?parts}
}
select?零件
哪里
{ 
?零件。
减{?部分}
}
我的想法是获取产品1中的所有零件,然后删除Person1拥有的零件。但我得到了产品1中的所有零件。我尝试了很多其他的查询,但在阅读了教程和书籍之后,这对我来说是最合乎逻辑的。有人能指出我错在哪里吗


谢谢您的时间。

您使用的是什么查询软件,您的数据实际上是什么样子的?我使用以下方法进行了尝试:

考虑到您所编写的内容,您的查询软件可能存在缺陷,但更有可能的是,您的数据或查询中可能存在简单的输入错误。如果(例如)你有“owns”(小写)而不是“owns”,它会解释你的结果


尝试自己执行
{?parts}
。你有什么结果吗?您的查询返回的部分是否匹配?

非常感谢。我正在使用一个RDBMS供应商的RDF实现,它使用Jena访问存储。我通过Jena将数据插入DBMS,并在将SPARQL查询放入Java之前使用Fuseki处理它们。我检查了箱子和打字,看起来都是正确的。我将再次验证,然后给我的供应商代表打电话。也许他能帮忙。在给供应商打电话之前,我总是认为这是我的问题。我和供应商谈过。这是其SPARQL 1.1支持的当前限制。他们也没有给出关于这个限制的错误。你给了我很好的洞察力——总是尝试对抗arq。非常感谢。
select ?parts
where 
{ 
  ?parts <PartOf> <Product1> .
  minus {<Person1> <Owns> ?parts}
}
@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 |
------------