我正在使用 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 中的所有部件。我尝试了很多其他查询,但在阅读了教程和书籍后,这对我来说是最合乎逻辑的。有人可以指出我哪里出错了吗?
谢谢你的时间。