如何使用Jena将.owl文件导入eclipse并创建它的实例

时间:2013-04-13 08:55:50

标签: java eclipse jena ontology

您好我使用protege(.owl文件)创建了一个本体。现在我希望将它导入java程序(在eclipse上使用jena)并创建它的实例(我的意思是我的本体代表一般的东西,一系列状态,实例应代表一个特定的状态。) 需要导入和创建。

稍后我计划比较用户输入(包含实例的文件)并输出该实例所处的状态。

我是新手,非常新。所以所有的帮助都表示赞赏。

谢谢

owl文件的内容如下:

<?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 -->

1 个答案:

答案 0 :(得分:7)

问题陈述相当不清楚,所以我刚刚创建了一个基本的骨架应用程序,它将向您展示基本步骤。顺便提一下,输入本体存在许多问题:

  • 它不会在您用作命名空间的URL上发布 - 不是致命的,但您应该在某些时候解决此问题。我使用内置于Jena的备用位置机制解决了这个问题

  • 您的商品名称以大写字母开头(例如HasDuration)。 RDF样式是使用类本地名称的首要大写字母,以及属性本地名称的前导小写字母(所以:hasDuration

  • 但事实上,一般的惯例是不管怎么样都留下像'has'和'is'这样的前缀(所以:duration

  • 你有一些名为012等的类,它们是Attack的超级类,似乎没有任何类目的

无论如何,这是一个骨架应用程序,您可以根据自己的需要进行调整:

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 );
    }

}

这是我得到的输出:

@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 .