我知道在这里以不同的方式提出了类似的问题,但我仍然认为没有解决方案......
我想添加一个限制,声明A类个体只有1个数据类型属性值。我一直在尝试在类似的类Protege选项卡上插入hasXValue exactly 1
。此外,我还尝试了min
和max
限制。然而,正如其他人的帖子所述,一致的是有0或1个价值声明,但不是2.我已经理解了对OWL中世界假设的一些解释,但后来我想知道它可以是哪种公理被用来做这个限制。
事实上,对我有用的最简单的解决方案是在SPARQL ASK查询中查询,查看不存在与某个类相关的实例并且没有数据类型属性值(我使用FILTER NON EXISTS )。通过这种方式,我可以有一个true / false值,表明没有任何个人没有数据类型属性值声明。但是,我希望推理者说这种情况下模型不一致。
我的目标是,如果我必须声明一个必须具有ID的类的许多实例,不要错过任何声明。而且,我不想执行查询来检查它。因此,我认为基数限制是正确的选择。
对此有何帮助?提前谢谢!
答案 0 :(得分:1)
如果我没有弄错,你正在尝试使用OWL进行验证,这需要对语义进行封闭的世界解释,以获得您希望看到的那种不一致性错误。正如您所注意到的那样,开箱即用,您不会得到这种行为,因为这不是OWL的设计目标。
这个确切的主题有一个workshop,现在有一个W3C working group来探索如何以标准化的方式进行验证。
Stardog完整性约束的实现使用OWL(曼彻斯特)语法,其中包括创建约束,你可以在Protege中创建,但Stardog本身没有Protege插件。顺便说一句,它将约束转换为SPARQL查询,这些查询使用FILTER NOT EXISTS的方式与手工操作的方式相同,除非它自动执行。
工作组的其他输入是SPIN和SHEX。 SHEX不值得关注,但SPIN可能是另一个不错的选择。据我所知,它不会与Protege一起使用,但它与IDE(TopBraid)集成并且具有基于SPARQL的语法。