java - 如何检索 <oboInOwl :hasExactSynonym> from every <rdf:Description> using OWL API

标签 java owl ontology owl-api

我是 OWL API 的新手,因此在检索数据时遇到一些问题。

假设我有以下数据:

<rdf:Description rdf:about="http://purl.obolibrary.org/obo/GO_0044297">
        <oboInOwl:creation_date>"2010-02-05T10:37:16Z"</oboInOwl:creation_date>
        <obo:IAO_0000115>"The portion of a cell bearing surface projections such as axons, dendrites, cilia, or flagella that includes the nucleus, but excludes all cell projections."</obo:IAO_0000115>
        <oboInOwl:hasOBONamespace>"cellular_component"</oboInOwl:hasOBONamespace>
        <oboInOwl:hasDbXref>"Wikipedia:Cell_body"</oboInOwl:hasDbXref>
        <oboInOwl:hasDbXref>"FMA:67301"</oboInOwl:hasDbXref>
        <oboInOwl:hasExactSynonym>"cell soma"</oboInOwl:hasExactSynonym>
        <rdfs:label>"cell body"</rdfs:label>
        <rdfs:subClassOf>http://purl.obolibrary.org/obo/GO_0044464</rdfs:subClassOf>
        <oboInOwl:hasDbXref>"FBbt:00005107"</oboInOwl:hasDbXref>
        <rdf:type>http://www.w3.org/2002/07/owl#Class</rdf:type>
        <oboInOwl:id>"GO:0044297"</oboInOwl:id>
        <rdfs:comment>"Note that 'cell body' and 'cell soma' are not used in the literature for cells that lack projections, nor for some cells (e.g. yeast with mating projections) that do have projections."</rdfs:comment>
        <oboInOwl:created_by>"xyz"</oboInOwl:created_by>
        <oboInOwl:inSubset>http://purl.obolibrary.org/obo/go#goslim_pir</oboInOwl:inSubset>
    </rdf:Description>
<rdf:Description rdf:about="http://purl.obolibrary.org/obo/GO_0071509">
    <oboInOwl:hasRelatedSynonym>"activation of MAPKK activity involved in mating response"</oboInOwl:hasRelatedSynonym>
    <rdfs:subClassOf>http://purl.obolibrary.org/obo/GO_0090028</rdfs:subClassOf>
    <oboInOwl:hasOBONamespace>"biological_process"</oboInOwl:hasOBONamespace>
    <oboInOwl:hasExactSynonym>"activation of MAP kinase kinase activity during conjugation with cellular fusion"</oboInOwl:hasExactSynonym>
    <oboInOwl:hasExactSynonym>"conjugation with cellular fusion, activation of MAPKK activity"</oboInOwl:hasExactSynonym>
    <rdfs:label>"activation of MAPKK activity involved in conjugation with cellular fusion"</rdfs:label>
    <rdf:type>http://www.w3.org/2002/07/owl#Class</rdf:type>
    <oboInOwl:id>"GO:0071509"</oboInOwl:id>
    <oboInOwl:creation_date>"2010-01-05T02:09:58Z"</oboInOwl:creation_date>
    <oboInOwl:hasExactSynonym>"conjugation with cellular fusion, activation of MAP kinase kinase activity"</oboInOwl:hasExactSynonym>
    <oboInOwl:created_by>"midori"</oboInOwl:created_by>
    <obo:IAO_0000115>"Any process that initiates the activity of the inactive enzyme MAP kinase kinase in the context of conjugation with cellular fusion."</obo:IAO_0000115>
    <rdfs:subClassOf>http://purl.obolibrary.org/obo/GO_0000186</rdfs:subClassOf>
</rdf:Description>

对于每个“rdf:description”,我想使用java中的OWL API检索其相应的“rdf:label”,“oboInOwl:hasExactSynonym”和“rdfs:subClassOf”。

到目前为止,我可以获得所有标签,但无法获取哪个标签对应哪个描述的链接。

目前我的代码如下所示:

OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
        OWLOntology pizzaOntology = manager.loadOntologyFromOntologyDocument(f);
        Set<OWLOntology> allOntologies = manager.getImportsClosure(pizzaOntology);
        //System.out.println(allOntologies);
        OWLReasonerFactory reasonerFactory = new ElkReasonerFactory();
        OWLReasoner reasoner = reasonerFactory.createReasoner(pizzaOntology);
        //pizzaOntology
        OWLDataFactory factory = manager.getOWLDataFactory();

        Set<OWLAxiom> axiom = pizzaOntology.getAxioms();
        for (OWLAxiom o : axiom) {
            AxiomType<?> at = o.getAxiomType();
            //System.out.println("Annotation type is "+at+" for "+o);

            if (at == AxiomType.ANNOTATION_ASSERTION) {
                OWLAnnotationAssertionAxiom ax = (OWLAnnotationAssertionAxiom) o;
                //Check if the axiom is a label and write to file
                if(ax.getProperty().toString().contains("hasExactSynonym"))
                System.out.println("Data is "+ax.getValue().toString());
                if (ax.getProperty().equals(factory.getRDFSLabel())) {
                    String label = ax.getValue().toString();
                    label = label.toLowerCase();
                    label = label.replaceAll("[^\\p{L}\\p{Nd}]+", " ");
                    allLabels.add(label);
                }
            }

        }

有人可以帮助我对此有一些想法吗?

最佳答案

这应该有帮助:

    OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
    OWLOntology pizzaOntology = manager.loadOntologyFromOntologyDocument(f);
    Set<OWLOntology> allOntologies = manager.getImportsClosure(pizzaOntology);
    // System.out.println(allOntologies);
    OWLReasonerFactory reasonerFactory = new ElkReasonerFactory();
    OWLReasoner reasoner = reasonerFactory.createReasoner(pizzaOntology);
    // pizzaOntology
    OWLDataFactory factory = manager.getOWLDataFactory();
    Map<OWLAnnotationSubject, String> allLabels = new HashMap<>();
    Map<OWLAnnotationSubject, String> allExactSynonyms = new HashMap<>();
    for (OWLAnnotationAssertionAxiom ax : pizzaOntology
        .getAxioms(AxiomType.ANNOTATION_ASSERTION)) {
        // Check if the axiom is a label and write to file
        OWLAnnotationSubject subject = ax.getSubject();
        if (ax.getProperty().toString().contains("hasExactSynonym")) {
            allExactSynonyms.put(subject, ax.getValue().toString());
        }
        if (ax.getProperty().equals(factory.getRDFSLabel())) {
            String label = ax.getValue().toString();
            label = label.toLowerCase();
            label = label.replaceAll("[^\\p{L}\\p{Nd}]+", " ");
            allLabels.put(subject, label);
        }
    }

这两个映射保存 IRI(在这种情况下,注释主题始终是 IRI - 注释附加到类的 IRI,而不是类本身)和属性值之间的关系。如果将标签值与 IRI 的属性值相匹配,则可以通过 map 中的 IRI 找到另一个值。

关于java - 如何检索 <oboInOwl :hasExactSynonym> from every <rdf:Description> using OWL API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43306382/

相关文章:

java - 如何实现可以返回不同 PageObjects 的 WebDriver PageObject 方法

java - 除了 SimpleDateFormat.parse 之外,是否还需要使用 Regex 来检查日期完整性?

owl - rdfs :domain and rdfs:range mean? 是什么意思

c# - .NET 中的本体

rdf - 基于本体的语义网生成工具

java - Itext7 - 自动调整图像大小

java - 在不循环的情况下获取字节数组中最后一次出现的位置

rdf - 如何仅从 Jena Ontology 模型中获取推断数据

rdf - SPARQL 选择可选语言

java - 获取单个 jena api 的属性值