如何使用Jena将.owl文件导入eclipse并创建它的实例
作者:互联网
您好我已经使用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 -->
解决方法:
问题陈述相当不清楚,所以我刚刚创建了一个基本的骨架应用程序,它将向您展示基本步骤.顺便说一句,您的输入本体存在许多问题:
>它不会在您用作命名空间的URL上发布 – 不是致命的,但您应该在某些时候解决此问题.我通过使用Jena内置的备用位置机制解决了这个问题
>您有以大写字母开头的属性名称(例如HasDuration). RDF样式是使用类本地名称的首要大写字母,以及属性本地名称的前导小写字母(so:hasDuration)
>但事实上,一般的惯例是不管怎么样都留下像’has’和’is’这样的前缀(所以:持续时间)
>你有一些名为0,1,2等的类,它们是攻击的超类,似乎没有任何目的
无论如何,这是一个骨架应用程序,您可以根据自己的需要进行调整:
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 .
标签:ontology,jena,java,eclipse 来源: https://codeday.me/bug/20190729/1568033.html