【发布时间】:2017-03-29 14:16:06
【问题描述】:
我正在 Protege 5.1 中创建一个本体,这是第一次解决一个实际问题。
我偶然发现了为类的实例设置某些类型的属性“必需”的基本需求。我想在 Reasoner 中强调缺少必需属性等问题。
假设某类产品,例如“物理产品”需要一个“重量”。我如何在本体中表达这个要求?那么没有重量的实物产品会被标记吗?
【问题讨论】:
我正在 Protege 5.1 中创建一个本体,这是第一次解决一个实际问题。
我偶然发现了为类的实例设置某些类型的属性“必需”的基本需求。我想在 Reasoner 中强调缺少必需属性等问题。
假设某类产品,例如“物理产品”需要一个“重量”。我如何在本体中表达这个要求?那么没有重量的实物产品会被标记吗?
【问题讨论】:
简短的回答是你不能用 OWL 做到这一点。
OWL 本体描述了关于世界的真相,仅此而已。本体不会使屏幕闪烁,它们不会对向警察提供什么来验证您是一个人进行规定,它们不会使本体系统崩溃,因为已知存在的东西没有提供具体的价值。本体是知识,而不是规则。如果我知道实物产品必须有重量这一事实,那么我的心理推理者就没有理由因为我携带的苹果没有提供其重量的明确值而发疯。
但是,如果您有可验证的证据证明实物产品没有重量,例如有人试图向您推销抽象概念,就好像它是您可以触摸和处理的实物产品一样,那么您可以说有不一致的地方。也就是说,有些真理是相互矛盾的。推理者可以检测不一致并解释不一致的原因。但是,他们无法将缺少重量标记为不一致的原因。
不过,这可能会让您不满意,因为您有一个具体的问题并且您想要一个具体的解决方案。处理这个问题的一种方法是简单地实现需求。如果您找不到权重值,甚至可能使用推理器,那么您标记无法提供其权重的实例。更复杂的解决方案是使用 Pellet 声明完整性约束。 Pellet 正在使用 OWL 的扩展,它允许您声明您感兴趣的那种完整性约束(例如,必需的值)。可能还有其他非标准扩展或工具可以指定您需要的内容,但这一切都超出了 OWL 和 RDF(S) 的范围。
【讨论】:
您想要实现的目标通常是使用 SPARQL 完成的。
您可以编写一个 SPARQL 查询,该查询将返回所有没有“重量”的“物理产品”(使用 NOT EXISTS {...})。然后你可以“标记”返回的元素。请注意,您所说的“标志”是什么意思并不清楚。
解决这个问题的一个好方法是使用 SPARQL 规则,例如 SPIN。这种非标准扩展允许使用 SPARQL 查询作为数据的约束。它很好地集成在 Topbraid Composer 中……如果我没记错的话,它甚至是免费版。
【讨论】:
您将需要使用存在限制(即一些)。在描述逻辑中,可以表述为: = 3PhysicalProducts.requireWeight U ~(3PhysicalProducts.requireWeight)
The sign 3 is the some restriction;
U is logical OR;
~ is the negation;
【讨论】: