OwlReady2技术问题:如何获取指定个体的数据属性?
如何用Owlready2查询指定个体的数据属性?
你当前代码的问题在于,list(onto.data_properties())获取的是整个本体中定义的所有数据属性,而非目标个体Prod1拥有的属性值。要查询指定个体的数据属性,需要针对找到的个体进行操作,而非本体对象。
原代码
import owlready2 from owlready2 import * onto = get_ontology("Atributos_complete.owl") onto.load() y = "Prod1" for x in onto.individuals(): if x.name == y: print (list(onto.data_properties()))
修正后的代码方案
方案1:遍历个体的所有数据属性及对应值
找到目标个体后,遍历该个体的data_properties(),并通过getattr()获取属性值:
import owlready2 from owlready2 import * onto = get_ontology("Atributos_complete.owl") onto.load() target_name = "Prod1" for individual in onto.individuals(): if individual.name == target_name: # 遍历该个体的所有数据属性 for prop in individual.data_properties(): # 获取属性对应的值,Owlready2中属性值以列表形式存储 prop_values = getattr(individual, prop.python_name) print(f"{prop.name}: {prop_values}")
方案2:直接访问已知的属性名
如果你已经知道要查询的具体数据属性名称,可以直接通过属性名访问:
import owlready2 from owlready2 import * onto = get_ontology("Atributos_complete.owl") onto.load() target_name = "Prod1" for individual in onto.individuals(): if individual.name == target_name: # 假设数据属性名为"productName",替换为你实际的属性名 print(f"productName: {individual.productName}") # 多个属性依次类推 # print(f"price: {individual.price}")
补充说明
- Owlready2中,个体的属性值默认以列表形式返回(因为OWL允许属性有多个值)。
- 可以通过
individual.get_properties()获取该个体的所有属性(包括数据属性和对象属性),如果只想过滤数据属性,就用individual.data_properties()。
内容的提问来源于stack exchange,提问作者JGJH
相关产品推荐
相关产品推荐

