SWRL规则比较两2类的个人

问题描述

我有一个简单的本体,具有不同的类,其中courseslessons是类。我正在尝试运行将属性belongsTolessons的个人相关联的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

解决方法

在您的示例中,我检测到以下问题:

  • 缺少courseslessons的类。
  • course_id被定义两次,使第一个过时
  • 该示例不遵循通常的命名约定:概念和动词表达式使用单数名词,例如角色使用hasId
  • 没有定义任何个人,因此当您运行推理程序时,afaik swrl规则基本上没有任何内容可应用。

通常,对于调试规则,我建议从琐碎的规则或有效示例中逐步构建它,并在每个步骤中检查结果是否符合预期。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...