【问题标题】:How do I assimilate to an individual the same data property n times我如何将相同的数据属性同化到个人 n 次
【发布时间】:2020-07-08 17:48:22
【问题描述】:
例如,我的本体中有数据属性“名称”,我想将多个数据属性“名称”同化到个人。
onto = get_ontology("teste.owl").load()
for line in list:
individual = onto.Class('individuo1')
individual.nome = [line['name']]
我这样做了,但它不起作用,只使用列表中的最后一个值创建一个数据属性。
【问题讨论】:
标签:
python
database
owl
ontology
owlready
【解决方案1】:
代替:
individual.name = [line['name']]
尝试:
individual.name = []
然后,在每次迭代中:
individual.name.append([line['name'])
【解决方案2】:
这是一个完整的示例(我猜)您正在尝试实现的目标。
我将您的 name DataProperty 重命名为 hasName,因为 owlready2 已经使用了 'name' 属性,因此该示例不起作用。
from owlready2 import get_ontology, DataProperty, Thing
list_names = [
{'name': 'name1'},
{'name': 'name2'},
{'name': 'name3'},
]
onto = get_ontology("http://example.org/ns")
with onto:
# A simple model:
class Class(Thing): pass
class hasName(DataProperty): pass
# you have to define the `hasName` property
# when creating the individual:
indiv = onto.Class('Indiv0', hasName=[])
# you can now append to this list:
for line in list_names:
indiv.hasName.append(line['name'])
onto.save('test.owl')
这应该会产生预期的 rdf/xml 表示:
<Class rdf:about="#Indiv0">
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#NamedIndividual"/>
<hasName rdf:datatype="http://www.w3.org/2001/XMLSchema#string">name1</hasName>
<hasName rdf:datatype="http://www.w3.org/2001/XMLSchema#string">name2</hasName>
<hasName rdf:datatype="http://www.w3.org/2001/XMLSchema#string">name3</hasName>
</Class>