无法使用 owlready python 中的搜索方法从我的 ontology 获取我的个人信息

can not get my individuals from my ontology using search method in owlready python

我有一个 ontology : https://raw.githubusercontent.com/amiraelsayed/lumiere/master/lumiere3.owl

我想获得名为 CS-Java

的特定 class 的所有课程

我已经尝试使用 owlready 搜索方法并向其添加带有课程名称和对象属性的过滤,但总是给出 0,而它应该检索大约 19 个项目

这是我个人

<owl:NamedIndividual rdf:about="http://www.smacrs.com/lumiere.owl#CS-Java">
        <rdf:type rdf:resource="http://www.smacrs.com/lumiere.owl#Course"/>
        <contains rdf:resource="http://www.smacrs.com/lumiere.owl#Arrays"/>
        <contains rdf:resource="http://www.smacrs.com/lumiere.owl#Do_..._While"/>
        <contains rdf:resource="http://www.smacrs.com/lumiere.owl#Final"/>
        <contains rdf:resource="http://www.smacrs.com/lumiere.owl#For_Loops"/>
        <contains rdf:resource="http://www.smacrs.com/lumiere.owl#Getting_User_Input"/>
        <contains rdf:resource="http://www.smacrs.com/lumiere.owl#Hello_World_Program"/>
        <contains rdf:resource="http://www.smacrs.com/lumiere.owl#If_conditions"/>
        <contains rdf:resource="http://www.smacrs.com/lumiere.owl#Introduction_and_Installation"/>
        <contains rdf:resource="http://www.smacrs.com/lumiere.owl#Method_Parameters"/>
        <contains rdf:resource="http://www.smacrs.com/lumiere.owl#Methods"/>
        <contains rdf:resource="http://www.smacrs.com/lumiere.owl#Multi-Dimensional_Arrays"/>
        <contains rdf:resource="http://www.smacrs.com/lumiere.owl#Static"/>
        <contains rdf:resource="http://www.smacrs.com/lumiere.owl#String_Builder_and_String_Formatting"/>
        <contains rdf:resource="http://www.smacrs.com/lumiere.owl#Switch"/>
        <contains rdf:resource="http://www.smacrs.com/lumiere.owl#Using_Variables"/>
        <contains rdf:resource="http://www.smacrs.com/lumiere.owl#What_Java_Is_and_How_It_Works"/>
        <contains rdf:resource="http://www.smacrs.com/lumiere.owl#While_Loops"/>
        <contains rdf:resource="http://www.smacrs.com/lumiere.owl#Strings:_Working_With_Text"/>
        <Code rdf:datatype="http://www.w3.org/2001/XMLSchema#string">CS102</Code>
        <Description rdf:datatype="http://www.w3.org/2000/01/rdf-schema#Literal">This course of study builds on the skills gained by students in Java Fundamentals or Java Foundations to help advance Java programming skills. Students will design object-oriented applications with Java and will create Java programs using hands-on, engaging activities.</Description>
        <Name rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Introduction to Java Programming Language</Name>
    </owl:NamedIndividual>

这是 class,它包含课程个人列表

onto.search(part_of="*") 它带来了所有课程的所有课程,当我使用 onto.search(part_of="CS-Java") 它时 return 0 而我需要它 return 只有本课程的课程

我猜你搜索returns0个结果是因为search方法只能对注释的内容进行Full Text Search

看来您需要的是对 ontology 中包含的知识执行查询,所以也许使用 SPARQL 是个好主意?

Owlready 提供了一种 perform SPARQL queries on an ontology 的方法,因此您可以表达类似“Select CS-Java 包含的所有内容”这样的内容:

# convert the ontology to a RDFLib graph
graph = onto.world.as_rdflib_graph()

# perform the query
result = list(graph.query_owlready("""
prefix : <http://www.smacrs.com/lumiere.owl#>
SELECT DISTINCT ?c WHERE {
  :CS-Java :contains ?c .
}"""))

另一种方法可能只是阅读 CS-Java class 上 contains 属性 的内容 :

onto['CS-Java'].contains

两种方法returns 列出一个 Owlready2 对象(在您的示例中为 18 个)。