我正在研究一个使用RDF的新项目,只是学习它和SPARQL。我认为这个查询会比现在要容易的多。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}
}
我的想法是让所有的产品1的部分零件,然后消除PERSON1拥有的部分。但是我得到了Product1中的所有部分。我尝试了很多其他查询,但是在阅读完教程和书籍之后,这对我来说是最符合逻辑的。有人可以指出我哪里错了吗?
感谢您的时间。
非常感谢。我正在使用其中一个使用Jena访问商店的RDFMS供应商实现RDF。我通过Jena将数据插入到DBMS中,并使用Fuseki在将它们放入Java之前处理SPARQL查询。我检查了案件和打字,看起来一切正常。我会再验证一次,然后给我的供应商代表打个电话。也许他可以帮忙。在打电话给供应商之前,我总是认为这是我的问题。 – 2013-03-19 16:50:32
我跟供应商谈过。这是SPARQL 1.1支持中的一个限制。他们也不会给出这个限制的错误。你给了我很好的见解 - 总是试着对抗arq。非常感谢。 – 2013-03-21 14:23:55