问题描述
我有一个简单的本体,具有不同的类,其中courses
和lessons
是类。我正在尝试运行将属性belongsTo
与lessons
的个人相关联的swrl规则。我正在使用OWLReady2和Python
with onto:
#courses
class course_id (onto.courses >> int): pass
class course_title (onto.courses >> str): pass
#lessons
class lesson_id (onto.lessons >> int): pass
class lesson_title (onto.lessons >> str): pass
class course_id (onto.lessons >> int): pass
class belongTo(onto.lessons >> onto.courses): pass
rule = Imp()
rule.set_as_rule("""lessons(?l),courses(?c),course_id(?c,?cid),course_id(?l,?cid) -> belongTo(?l,?c) """)
sync_reasoner_pellet(infer_property_values = True,infer_data_property_values = True)
想法是,如果course_id
类似,则该课程应属于该课程。但是我的代码似乎不起作用。我得到这些推论:
* Owlready * Adding relation lmsontology.Introduction belongTo lmsontology.Introduction
* Owlready * Adding relation lmsontology.Databases belongTo lmsontology.Databases
解决方法
在您的示例中,我检测到以下问题:
- 缺少
courses
和lessons
的类。 -
course_id
被定义两次,使第一个过时 - 该示例不遵循通常的命名约定:概念和动词表达式使用单数名词,例如角色使用
hasId
。 - 没有定义任何个人,因此当您运行推理程序时,afaik swrl规则基本上没有任何内容可应用。
通常,对于调试规则,我建议从琐碎的规则或有效示例中逐步构建它,并在每个步骤中检查结果是否符合预期。