2

我有一个具有不同类的简单本体,它们courseslessons类。我正在尝试运行 SWRL 规则,将属性belongsTolessons. 我正在使用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
4

1 回答 1

0

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

  • courses和的类lessons缺失。
  • course_id被定义两次,使第一个过时
  • 该示例不遵循通常的命名约定:概念的单数名词和hasId角色的动词表达式。
  • 没有定义任何个人,因此当您运行推理器时,swrl 规则基本上没有任何适用性。

一般来说,为了调试规则,我建议从一个简单的规则或工作示例逐步构建它,并在每个步骤中检查结果是否符合预期。

于 2020-10-19T06:15:41.847 回答