我正在研究如何用Jena自动实例化一个本体。我感兴趣的是实例化从一组数据中发现的概念。
我的问题是,有时我只需要实例化本体的一个概念。我很困惑,因为在Jena中,我们需要一个完整的语句来实例化一个本体。
假设我有以下本体论。
在本体上只实例化一个概念的语句是什么,例如eventtype
?
是否有必要使用语句
来实例化本体?
还是我的本体论表现力不够?
版本:我的耶拿代码
public static void manageOntologies() throws FileNotFoundException{
int i,inFrame, lineSize;
int frameNum = 0;
Individual individu;
Resource resource;
Statement statement;
OntModel domainModel;
Vector<String> lines = readFile("data/Trace.dat");
String[] parts = null;
String event = null;
domainModel = ModelFactory.createOntologyModel(ProfileRegistry.OWL_DL_LANG);
domainModel.read((new FileInputStream(ontopath)), null);
lineSize = lines.size();
for(i = 0; i < lineSize; i++){
parts = lines.elementAt(i).split(" ");
event = parts[parts.length - 1];
resource = domainModel.createResource(xmlbase + "frame" + frameNum);//, domainModel.getOntClass(xmlbase + "Event"));
domainModel.add(resource, RDF.type, domainModel.getOntClass("Event"));
}
System.out.println("Numbre de frame = " + frameNum);
domainModel.write(System.out);
}
下面是遇到的问题
Exception in thread "main" java.lang.NullPointerException
at com.hp.hpl.jena.rdf.model.impl.ModelCom.add(ModelCom.java:929)
at soctrace.Intology.manageOntologies(Intology.java:87) -- domainModel.add(...)
at soctrace.Intology.main(Intology.java:38)
第2版:我的OWL/XML代码
<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [
<!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 tima "http://www.soctrace.org/ontologies/tima.owl#" >
]>
<rdf:RDF xmlns="http://www.w3.org/2002/07/owl#"
xml:base="http://www.w3.org/2002/07/owl"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:tima="http://www.soctrace.org/ontologies/tima.owl#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<Ontology rdf:about="http://www.soctrace.org/ontologies/tima.owl">
</Ontology>
<!-- http://www.soctrace.org/ontologies/tima.owl#Event -->
<Class rdf:about="&tima;Event">
<rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
</Class>
<!-- http://www.soctrace.org/ontologies/tima.owl#EventDuration -->
<Class rdf:about="&tima;EventDuration">
<rdfs:subClassOf rdf:resource="&tima;ValuePartition"/>
</Class>
<!-- http://www.soctrace.org/ontologies/tima.owl#EventType -->
<Class rdf:about="&tima;EventType">
<rdfs:subClassOf rdf:resource="&tima;ValuePartition"/>
</Class>
<!-- http://www.soctrace.org/ontologies/tima.owl#ValuePartition -->
<Class rdf:about="&tima;ValuePartition"/>
</rdf:RDF>
谢谢您的回复!
很难精确,因为您还没有提供您的数据或本体(所以我们无法尝试您的代码)。不过,很可能问题就出在这里:
domainModel.getOntClass("Event")
“event”
不是URI,因此您的本体不太可能有该名称的事件类(如果有,您应该将其更改为使用完整的URI!)。
您需要为getOntClass
提供完整的URI,否则它将返回null
因为它不识别类。假设您为event_ns
提供了合适的值,那么:
domainModel.getOntClass( EVENT_NS + "Event")
您是正确的,在RDF中,您存储的是语句,而不是单独的术语或概念。但是,所有东西都有一个类型,即使只是rdfs:resource
(在owl中通常是owl:indiversity
或owl:class
)。因此,您总是通过格式为thing rdf:type
的语句添加一些内容,只需选择适当的类型。
在本例中,eventtype
可能是一个类?在这种情况下:
Resource eventTypeResource = model.createResource(eventTypeURI);
model.add(eventTypeResource, RDF.type, OWL.class);
然而,这是您可以使用的常见模式:
Resource eventTypeResource = model.createResource(eventTypeURI, OWL.class);
或者更好地使用Jena ontology API:
OntClass eventTypeResource = ontModel.createClass(eventTypeURI);
(ontclass
仍然是资源
,但添加了一些非常有用的方法)
Jena为本体API提供了一个很好的介绍。
问题内容: 我的代码中需要一个单例。我用Java实现了它,并且效果很好。我这样做的原因是为了确保在多种环境中只有一个此类的实例。 但是现在我想用单元测试在本地测试我的Singleton对象。因此,我需要模拟此Singleton的另一个实例(该对象可能来自另一个设备)。那么是否有可能第二次实例化Singleton以进行测试,还是我必须对其进行模拟? 我不确定,但是我认为可以通过使用其他类加载器来实现
有人能解释一下下面的代码是如何毫无例外地工作的吗。我在想,当为星期天创建新实例时,它也会为星期一(星期天内)创建一个新实例,然后再为星期天(星期一内)创建一个新实例,以此类推。。。类似递归的东西,因为它们都是课程周的一部分。但我的理解是错误的,因为下面的代码运行良好。 我有这个疑问,当我读到java枚举。
我正在尝试创建一些类,但它们的数量由用户决定。我要制作的类: 主类:
问题内容: 我使用JAXB创建XML消息。我需要创建的XML是(为简单起见): 我的代码如下所示: 问题:该元素未显示(标题为)。将header设置为空字符串时,将显示以下内容: 当我使用type 代替时,结果甚至更糟: 顺便说一句:我正在使用此代码来创建XML字符串。 是否可以获取空标签? 问题答案: 在XML中,并且是同一个东西。如果您真的想要前者,请使用修饰词。可能会为您做到这一点。
我有一个特点,它是由同一个结构以不同的方式实现的。为了实现这一点,我有不同的结构,它们有不同的实现。对于抽象,我将这些结构称为A-Z: 有没有其他方法来实现这一点,以便结构的每个实例都有一个不同的trait实现,或者创建一个新结构是最好的方法? 我不熟悉编译语言。我所做的大部分工作都是使用Python和TypeScript。
我尝试实例化以下Java代码中定义的内部类: 我得到了这个例外: 我错过了什么?