使用jena删除本体中的函数属性

使用jena删除本体中的函数属性,jena,ontology,Jena,Ontology,目前,我正在使用Jena处理本体文件,但找不到从某些属性中删除函数属性的方法 有人能指出如何使用Jena来实现这一点吗 --编辑-- 我想做的是迭代本体中的所有属性,如果发现functionalProperty,则将其转换为非functionalProperty 我的代码是这样的: Iterator<OntProperty> ont = model.listOntProperties(); while(ont.hasNext()) { OntPrope

目前,我正在使用Jena处理本体文件,但找不到从某些属性中删除函数属性的方法

有人能指出如何使用Jena来实现这一点吗

--编辑--

我想做的是迭代本体中的所有属性,如果发现functionalProperty,则将其转换为非functionalProperty

我的代码是这样的:

    Iterator<OntProperty> ont = model.listOntProperties();
    while(ont.hasNext()) {
        OntProperty p = ont.next();
        if(p.isFunctionalProperty()) {
            p.removeProperty(RDF.type, OWL.FunctionalProperty);
        }
    }
Iterator ont=model.listonproperties();
while(ont.hasNext()){
OntProperty p=ont.next();
if(p.isFunctionalProperty()){
p、 removeProperty(RDF.type、OWL.FunctionalProperty);
}
}
但目前它会产生java.util.ConcurrentModificationException错误


谢谢

Jena中的各种本体API类,如
FunctionalProperty
只是为了提供一个方便的编程API。所有状态信息实际上都保存在底层的
模型中。因此,要使属性不再是函数属性,只需从模型中删除相应的
rdf:type
triple

例如(未经测试的代码,但应该可以工作):

OntModel m=ModelFactory.createOntology(OntModelSpec.OWL_MEM);
NS=”http://www.example.com/ontology#";
FunctionalProperty p=m.createFunctionalProperty(NS+“p”);
//现在将p更改为普通对象属性
//setRDFType删除所有现有的rdf:type三元组并添加一个新的三元组
//或者,我们可以打电话:
//p.移除属性(RDF.type、OWL.FunctionalProperty);
p、 setRDFType(OWL.ObjectProperty);
ObjectProperty p1=p.as(ObjectProperty.class);
更新

您的代码会抛出一个
ConcurrentModificationError
,因为您试图在对集合进行迭代时对集合进行更改,从而在迭代的同时对其进行修改。解决方案是分两个阶段进行工作:首先创建一个集合对象,例如带有要更改的属性的
ArrayList
,然后对这些属性进行更改

List fps=new ArrayList();
迭代器ont=model.listonProperties();
while(ont.hasNext()){
OntProperty p=ont.next();
if(p.isFunctionalProperty()){
fps.add(p.asFunctionalProperty());
}
}
用于(功能属性fp:fps){
fp.removeProperty(RDF.type,OWL.FunctionalProperty);
}

Ian,我尝试了你的两种方法,但都产生了相同的错误:java.util.ConcurrentModificationException。我修改了这个问题并添加了部分代码以给出上下文。CME是Java编程问题,而不是Jena问题。但是我已经相应地更新了我的答案。谢谢你的回答和解释!看来我在java本身还有很多东西要学。。