本体 - 超类是否获得其子类的实例?
Ontologies - Do superclasses get instances of their subclasses?
我的问题是关于超级class 继承。我的理解是,如果我有属于 Class B 的实例,那么作为 Class B 的母亲 class 的 Class A 也会有这些实例。例如:假设我有一辆名为 Car 的 superclass 和两辆 subclass classes Sedan 和 SUV。 classes Sedan 和 SUV 的实例也是 class Car 的实例,对吗?如果是这样,那么当我说给我 class Car 的所有实例时,我看不到我的 sparql 查询的任何 return。我在这里遗漏了什么吗?
我正在使用 Topbraid 编辑器。
实际上这是superclass/subclass的定义---子类的所有实例都是超类的实例。
不知道为什么 sparql 查询不起作用。不过,我认为它只有在引擎进行推理时才会起作用。
如果您希望 SPARQL 查询的子类蕴涵没有 运行 推理引擎的负担,您可以使用标准 SPARQL 属性 路径,特别是传递运算符:
SELECT *
WHERE {
?cls rdfs:subClassOf* :ClassA .
?inst a ?cls .
}
第一个三元组模式将 :ClassA 的所有子类 下到根。第二个三重模式获取所有这些的实例 类,有效地让你执行与推理器执行的相同的包含操作。
我的问题是关于超级class 继承。我的理解是,如果我有属于 Class B 的实例,那么作为 Class B 的母亲 class 的 Class A 也会有这些实例。例如:假设我有一辆名为 Car 的 superclass 和两辆 subclass classes Sedan 和 SUV。 classes Sedan 和 SUV 的实例也是 class Car 的实例,对吗?如果是这样,那么当我说给我 class Car 的所有实例时,我看不到我的 sparql 查询的任何 return。我在这里遗漏了什么吗?
我正在使用 Topbraid 编辑器。
实际上这是superclass/subclass的定义---子类的所有实例都是超类的实例。
不知道为什么 sparql 查询不起作用。不过,我认为它只有在引擎进行推理时才会起作用。
如果您希望 SPARQL 查询的子类蕴涵没有 运行 推理引擎的负担,您可以使用标准 SPARQL 属性 路径,特别是传递运算符:
SELECT *
WHERE {
?cls rdfs:subClassOf* :ClassA .
?inst a ?cls .
}
第一个三元组模式将 :ClassA 的所有子类 下到根。第二个三重模式获取所有这些的实例 类,有效地让你执行与推理器执行的相同的包含操作。