简体   繁体   中英

How to import .owl file into eclipse using Jena and create instances of it

Hi i have created an ontology using protege(.owl file).Now i wish to import this into a java program(using jena on eclipse) and create instances of it(What i mean is that my ontology represents something general, a range of states, The instances should represent a specific state.) The importing and creation is required.

Later on i plan to compare user inputs(which are files containing instances) and output what state that instance is in.

I am new to this,extremely new. So all help is appreciated.

Thank you

The contents of the owl file are as follows:

<?xml version="1.0"?>


 <!DOCTYPE rdf:RDF [
 <!ENTITY owl "http://www.w3.org/2002/07/owl#" >
 <!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
 <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
 <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
 <!ENTITY Ontology1365003423152 "http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#" >
]>


<rdf:RDF xmlns="http://www.w3.org/2002/07/owl#"
     xml:base="http://www.w3.org/2002/07/owl"
  xmlns:Ontology1365003423152="http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
 xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns:owl="http://www.w3.org/2002/07/owl#">
<Ontology rdf:about="http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl"/>



<!-- 
///////////////////////////////////////////////////////////////////////////////////////
//
// Datatypes
//
///////////////////////////////////////////////////////////////////////////////////////
 -->




<!-- 
///////////////////////////////////////////////////////////////////////////////////////
//
// Data properties
//
///////////////////////////////////////////////////////////////////////////////////////
 -->




<!-- http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#HasDuration -->

<DatatypeProperty rdf:about="&Ontology1365003423152;HasDuration">
    <rdf:type rdf:resource="&owl;FunctionalProperty"/>
    <rdfs:domain rdf:resource="&Ontology1365003423152;Attack"/>
    <rdfs:range rdf:resource="&xsd;positiveInteger"/>
</DatatypeProperty>



<!-- http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#HasFlag -->

<DatatypeProperty rdf:about="&Ontology1365003423152;HasFlag">
    <rdf:type rdf:resource="&owl;FunctionalProperty"/>
    <rdfs:domain rdf:resource="&Ontology1365003423152;Attack"/>
    <rdfs:range rdf:resource="&xsd;string"/>
</DatatypeProperty>



<!-- http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#HasProtocol -->

<DatatypeProperty rdf:about="&Ontology1365003423152;HasProtocol">
    <rdf:type rdf:resource="&owl;FunctionalProperty"/>
    <rdfs:domain rdf:resource="&Ontology1365003423152;Attack"/>
    <rdfs:range rdf:resource="&xsd;string"/>
</DatatypeProperty>



<!-- http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#HasService -->

<DatatypeProperty rdf:about="&Ontology1365003423152;HasService">
    <rdf:type rdf:resource="&owl;FunctionalProperty"/>
    <rdfs:domain rdf:resource="&Ontology1365003423152;Attack"/>
    <rdfs:range rdf:resource="&xsd;string"/>
</DatatypeProperty>



<!-- 
///////////////////////////////////////////////////////////////////////////////////////
//
// Classes
//
///////////////////////////////////////////////////////////////////////////////////////
 -->




<!-- http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#0 -->

<Class rdf:about="&Ontology1365003423152;0">
    <rdfs:subClassOf rdf:resource="&Ontology1365003423152;AttackDuration"/>
</Class>



<!-- http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#1 -->

<Class rdf:about="&Ontology1365003423152;1">
    <rdfs:subClassOf rdf:resource="&Ontology1365003423152;AttackDuration"/>
</Class>



<!-- http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#2 -->

<Class rdf:about="&Ontology1365003423152;2">
    <rdfs:subClassOf rdf:resource="&Ontology1365003423152;AttackDuration"/>
</Class>



<!-- http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#6 -->

<Class rdf:about="&Ontology1365003423152;6">
    <rdfs:subClassOf rdf:resource="&Ontology1365003423152;AttackDuration"/>
</Class>



<!-- http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#Attack -->

<Class rdf:about="&Ontology1365003423152;Attack"/>



<!-- http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#AttackDuration -->

<Class rdf:about="&Ontology1365003423152;AttackDuration"/>



<!-- http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#AttackFlag -->

<Class rdf:about="&Ontology1365003423152;AttackFlag"/>



<!-- http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#AttackProtocolType -->

<Class rdf:about="&Ontology1365003423152;AttackProtocolType"/>



<!-- http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#AttackService -->

<Class rdf:about="&Ontology1365003423152;AttackService"/>



<!-- http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#Domain_u -->

<Class rdf:about="&Ontology1365003423152;Domain_u">
    <rdfs:subClassOf rdf:resource="&Ontology1365003423152;AttackService"/>
</Class>



<!-- http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#Eco_i -->

<Class rdf:about="&Ontology1365003423152;Eco_i">
    <rdfs:subClassOf rdf:resource="&Ontology1365003423152;AttackService"/>
</Class>



<!-- http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#Ecr_i -->

<Class rdf:about="&Ontology1365003423152;Ecr_i">
    <rdfs:subClassOf rdf:resource="&Ontology1365003423152;AttackService"/>
</Class>



<!-- http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#Finger -->

<Class rdf:about="&Ontology1365003423152;Finger">
    <rdfs:subClassOf rdf:resource="&Ontology1365003423152;AttackService"/>
</Class>



<!-- http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#Ftp_data -->

<Class rdf:about="&Ontology1365003423152;Ftp_data">
    <rdfs:subClassOf rdf:resource="&Ontology1365003423152;AttackService"/>
</Class>



<!-- http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#Http -->

<Class rdf:about="&Ontology1365003423152;Http">
    <rdfs:subClassOf rdf:resource="&Ontology1365003423152;AttackService"/>
</Class>



<!-- http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#Icmp -->

<Class rdf:about="&Ontology1365003423152;Icmp">
    <rdfs:subClassOf rdf:resource="&Ontology1365003423152;AttackProtocolType"/>
</Class>



<!-- http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#Mailbomb -->

<Class rdf:about="&Ontology1365003423152;Mailbomb">
    <rdfs:subClassOf rdf:resource="&Ontology1365003423152;Attack"/>
</Class>



<!-- http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#NoAttack -->

<Class rdf:about="&Ontology1365003423152;NoAttack">
    <rdfs:subClassOf rdf:resource="&Ontology1365003423152;Attack"/>
</Class>



<!-- http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#Private -->

<Class rdf:about="&Ontology1365003423152;Private">
    <rdfs:subClassOf rdf:resource="&Ontology1365003423152;AttackService"/>
</Class>



<!-- http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#SF -->

<Class rdf:about="&Ontology1365003423152;SF">
    <rdfs:subClassOf rdf:resource="&Ontology1365003423152;AttackFlag"/>
</Class>



<!-- http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#Smtp -->

<Class rdf:about="&Ontology1365003423152;Smtp">
    <rdfs:subClassOf rdf:resource="&Ontology1365003423152;AttackService"/>
</Class>



<!-- http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#Smurf -->

<Class rdf:about="&Ontology1365003423152;Smurf">
    <rdfs:subClassOf rdf:resource="&Ontology1365003423152;Attack"/>
</Class>



<!-- http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#Tcp -->

<Class rdf:about="&Ontology1365003423152;Tcp">
    <rdfs:subClassOf rdf:resource="&Ontology1365003423152;AttackProtocolType"/>
</Class>



<!-- http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#Udp -->

<Class rdf:about="&Ontology1365003423152;Udp">
    <rdfs:subClassOf rdf:resource="&Ontology1365003423152;AttackProtocolType"/>
</Class>
</rdf:RDF>



<!-- Generated by the OWL API (version 3.2.3.1824) http://owlapi.sourceforge.net -->

The problem statement is rather unclear, so I've just created a basic skeleton application that will show you the basic steps. By the way, there are a number of problems with your input ontology:

  • it's not published at the URL you are using as a namespace - not fatal, but you should fix this at some point. I've worked around it by using the alternate location mechanism built-in to Jena

  • you have property names beginning with capital letters (eg HasDuration ). RDF style is to use a leading capital letter for class local names, and a leading lower case letter for property local names (so: hasDuration )

  • but in fact the general convention is to leave off prefixes like 'has' and 'is' anyway (so: duration )

  • you have some classes called 0 , 1 , 2 etc, that are super-classes of Attack and that don't seem to have any purpose

Anyway, here's a skeleton application which you can adapt to your needs:

package examples;


import com.hp.hpl.jena.ontology.*;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.util.FileManager;

public class SamThomasExample
{
    /***********************************/
    /* Constants                       */
    /***********************************/

    // where the ontology should be
    public static final String SOURCE_URL = "http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl";

    // where we've stashed it on disk for the time being
    protected static final String SOURCE_FILE = "./src/main/resources/Ontology1365003423152.owl";

    // the namespace of the ontology
    public static final String NS = SOURCE_URL + "#";

    /***********************************/
    /* External signature methods      */
    /***********************************/

    public static void main( String[] args ) {
        new SamThomasExample().run();
    }

    public void run() {
        OntModel m = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM );

        loadModel( m );

        // get an OntClass reference to one of the classes in the model
        // note: ideally, we would delegate this step to Jena's schemagen tool
        OntClass attack = m.getOntClass( NS + "Attack" );

        // similarly a reference to the attack duration property,
        // and again, using schemagen would be better
        OntProperty attackDuration = m.getDatatypeProperty( NS + "HasDuration" );

        // create an instance of the attack class to represent the current attack
        Individual attack01 = m.createIndividual( NS + "attack01", attack );

        // add a duration to the attack
        attack01.addProperty( attackDuration, m.createTypedLiteral( 10 ) );

        // finally, print out the model to show that we have some data
        m.write( System.out, "Turtle" );
    }

    /***********************************/
    /* Internal implementation methods */
    /***********************************/

    /** read the ontology and add it as a sub-model of the given ontmodel */
    protected void loadModel( OntModel m ) {
        FileManager.get().getLocationMapper().addAltEntry( SOURCE_URL, SOURCE_FILE );
        Model baseOntology = FileManager.get().loadModel( SOURCE_URL );
        m.addSubModel( baseOntology );

        // for compactness, add a prefix declaration st: (for Sam Thomas)
        m.setNsPrefix( "st", NS );
    }

}

And here's the output I get:

@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl:     <http://www.w3.org/2002/07/owl#> .
@prefix xsd:     <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix st:      <http://www.semanticweb.org/ontologies/2013/3/Ontology1365003423152.owl#> .

st:attack01
  a       st:Attack ;
  st:HasDuration "10"^^xsd:int .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM