0

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

我想获得名为 CS-Java 的特定课程的所有课程

我尝试使用 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>

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

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

4

1 回答 1

0

我猜您的搜索返回 0 结果,因为该search方法只能用于对注释的内容执行全文搜索。

似乎您需要对本体中包含的知识执行查询,所以也许使用 SPARQL 可能是一个想法?

Owlready 提供了一种在本体上执行 SPARQL 查询的方法,因此您可以表达类似“选择 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 .
}"""))

另一种方法可以简单地阅读你的类的contains属性内容:CS-Java

onto['CS-Java'].contains

两种方法都返回一个 Owlready2 个对象的列表(在您的示例中为 18 个)。

于 2020-08-13T10:51:25.077 回答