我正在使用 OWL API 来处理本体。我想创建自己的与 OWLObjects 对应的 Java 对象(例如,OWLEntity、OWLClass 等)。我该怎么做?
为此,我想我需要知道如何获取 OWLEntity 对象的名称(字符串)。但是怎么办?我搜索了 OWL API Javadoc 和教程,但找不到方法。
public class Arg {
private String name;
private String defaultValue;
private boolean isEssential = false;
private Set<String> preArgNames;
public Arg(String name, String defaultValue, boolean isEssential,
Set<String> preArgNames) {
this.name = name;
this.defaultValue = defaultValue;
this.isEssential = isEssential;
this.preArgNames = preArgNames;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isEssential() {
return isEssential;
}
public void setEssential(boolean isEssential) {
this.isEssential = isEssential;
}
public Set<String> getPreArgNames() {
return preArgNames;
}
public void setPreArgNames(Set<String> preArgNames) {
this.preArgNames = preArgNames;
}
public String getDefaultValue() {
return defaultValue;
}
public void setDefaultValue(String defaultValue) {
this.defaultValue = defaultValue;
}
}
我的应用程序有一个数据结构。数据存储在本体中。我在上面添加了我的代码示例。
Arg对象的成员变量必须由本体数据填充。例如Class SomeArg1, SomeArg2,... 它在本体中有子类和限制,我想获取实体名称和相关限制等,以填充 Arg 对象的适当变量。
最佳答案
OWLEntity 有一个方法 getIRI() 可以为您提供对象的 IRI; IRI 既是 CharSequence,又可以使用经典的 toString() 方法转换为 String。
在最新的 OWL API 中,您还可以访问 IRI 的 namespace 和片段(这只是 URI 的扩展,即类似 http://example.com 或 urn:testuri 的东西),正如 mikrohelen 上面提到的。
这对所有 OWLEntity 子接口(interface)都有效,即 OWLClass、OWLDataProperty、OWLObjectProperty、OWLDatatype、OWLNamedIndividual 和 OWLAnnotationProperty。
我还不能回答 Anthony 的评论,但我在这里引用:
Blockquote Not all owl entities (classes, individuals...) have names. I'm guessing that by name you mean the URI used as rdf:id. Protege has a feature that automatically generates Java wrapper classes for owl classes in your ontology, it might be helpful for you. – Anthony Sep 5 at 15:04
严格来说,这是不正确的:所有 OWLEntity 实例都有 IRI。没有 IRI 的类和个体不是实体:类是 OWLClassExpression 实例,如限定限制,没有 IRI 的个体是 OWLAnonymousIndividual 实例。这同样适用于属性:匿名的只是表达式,例如属性链,但它们不是 OWLEntity 实例。
关于java - 如何将 OWL API 对象转换为 Java 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18522894/