0

例如,我的本体中有数据属性“名称”,我想将多个数据属性“名称”同化到一个人身上。

onto = get_ontology("teste.owl").load()
for line in list:
    individual = onto.Class('individuo1')
    individual.nome = [line['name']]

我这样做了,但它不起作用,只创建了一个具有列表中最后一个值的数据属性。

4

2 回答 2

1

代替:

individual.name = [line['name']]

尝试:

individual.name = []

然后,在每次迭代中:

individual.name.append([line['name'])
于 2020-07-08T17:51:27.380 回答
1

这是您尝试实现的(我猜)的完整示例。我将您的nameDataProperty重命名为,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>
于 2020-07-08T18:03:03.430 回答