Java 如何使用Jena将.owl文件导入eclipse并创建其实例
您好,我已经使用protege(.owl文件)创建了一个本体。现在我希望将其导入一个java程序(在eclipse上使用jena)并创建它的实例(我的意思是,我的本体表示一些通用的、一系列的状态,这些实例应该表示一个特定的状态) 需要导入和创建 稍后,我计划比较用户输入(即包含实例的文件)并输出实例所处的状态 我是新来的,非常新。因此,我们非常感谢所有的帮助 多谢各位 owl文件的内容如下:Java 如何使用Jena将.owl文件导入eclipse并创建其实例,java,eclipse,jena,ontology,Java,Eclipse,Jena,Ontology,您好,我已经使用protege(.owl文件)创建了一个本体。现在我希望将其导入一个java程序(在eclipse上使用jena)并创建它的实例(我的意思是,我的本体表示一些通用的、一系列的状态,这些实例应该表示一个特定的状态) 需要导入和创建 稍后,我计划比较用户输入(即包含实例的文件)并输出实例所处的状态 我是新来的,非常新。因此,我们非常感谢所有的帮助 多谢各位 owl文件的内容如下: <?xml version="1.0"?> <!DOCTYPE rdf:RDF
<?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内置的备用定位机制解决了这个问题
- 属性名称以大写字母开头(例如,
)。RDF样式是使用前导大写字母作为类本地名称,使用前导小写字母作为属性本地名称(因此:HasDuration
)hasDuration
- 但事实上,一般的惯例是无论如何都要去掉像has和is这样的前缀(所以:
)duration
- 您有一些名为
、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 .
@前缀rdfs:。
@前缀owl:。
@前缀xsd:。
@前缀rdf:。
@前缀st:。
攻击01
a:攻击;
st:HasDuration“10”^^xsd:int。