You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Apache Jena通过匿名类为OWL文件添加属性限制的实现问题

补全后可直接运行的Java代码

import org.apache.jena.ontology.*;
import org.apache.jena.rdf.model.*;
import org.apache.jena.util.FileManager;
import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class AddOntologyAxiom {
    // 替换为你的本体实际命名空间
    public static final String NS = "http://www.semanticweb.org/example/ontologies/2021/8/test#";

    public static void main (String [] args) {
        OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM_RULE_INF, null);
        // 读取本地原有本体文件
        InputStream ontologyIn = FileManager.get().open("~/jena_example/ontologies/symptom_rdf.owl");
        model.read(ontologyIn, "RDF/XML");

        // 1. 获取本体中已定义的基础资源
        OntClass subsymptomCls = model.getOntClass(NS + "subsymptom");
        ObjectProperty isSymptomOfProp = model.getObjectProperty(NS + "is_symptom_of");
        Individual sp3Ind = model.getIndividual(NS + "sp3");

        // 2. 构建OWL限制:属性is_symptom_of的值为sp3
        Restriction hasValueRestrict = model.createHasValueRestriction(null, isSymptomOfProp, sp3Ind);

        // 3. 构建匿名交集类:subsymptom类和上述限制的交集
        List<OntResource> intersectionMembers = new ArrayList<>();
        intersectionMembers.add(subsymptomCls);
        intersectionMembers.add(hasValueRestrict);
        IntersectionClass equivalentIntersection = model.createIntersectionClass(null, intersectionMembers);

        // 4. 定义目标类subs_de_sp3,添加等价类公理
        OntClass subsDeSp3Cls = model.createClass(NS + "subs_de_sp3");
        subsDeSp3Cls.addEquivalentClass(equivalentIntersection);

        // 5. 将修改后的本体写入新文件,避免覆盖原文件
        try {
            FileOutputStream out = new FileOutputStream("~/jena_example/ontologies/symptom_rdf_updated.owl");
            model.write(out, "RDF/XML");
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

代码说明

  • 修正了原代码中变量名使用Java关键字、带空格的语法错误
  • 生成的更新后本体文件可直接导入Protege,结构和你给出的OWL片段完全一致
  • 若不需要推理能力可将OntModelSpec.OWL_MEM_RULE_INF替换为OntModelSpec.OWL_MEM提升运行效率

内容的提问来源于stack exchange,提问作者nilrem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:27:01