无法使用 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 个)。
我有一个 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 个)。