我正在使用OWL API来操作本体。我想创建自己的对应于OWLObjects的Java对象(例如,OWLEntity,OWLClass等)。我怎么能这样做?
为了实现这一点,我想我需要知道如何获取OWLEntity对象的名称(String)。但是怎么样?我已经搜索了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对象的成员变量必须由本体数据填充。例如类SomeArg1,SomeArg2,...它在本体中有子类和限制,我想获取实体名称和相关限制等来填充Arg对象的相应变量。
答案 0 :(得分:3)
OWLEntity有一个方法getIRI(),它将为您提供对象的IRI; IRI既是CharSequence又可以使用经典的toString()方法转换为String。
在最新的OWL API中,您还可以访问IRI的名称空间和片段(这只是URI的扩展,例如http://example.com或urn:testuri),如上面提到的mikrohelen所述。
这适用于所有OWLEntity子接口,即OWLClass,OWLDataProperty,OWLObjectProperty,OWLDatatype,OWLNamedIndividual和OWLAnnotationProperty。
我无法回答安东尼的评论,但我在这里引用:
块引用 并非所有owl实体(类,个体......)都有名称。我猜你的名字是指用作rdf:id的URI。 Protege有一个功能可以自动为你的本体中的owl类生成Java包装类,它可能对你有所帮助。 - 安东尼9月5日15:04
严格来说,这是不正确的:所有OWLEntity实例都有IRI。没有IRI的类和个体不是实体:类是OWLClassExpression实例,例如限定限制,没有IRI的个体是OWLAnonymousIndividual实例。这同样适用于属性:匿名的只是表达式,例如属性链,但它们不是OWLEntity实例。
答案 1 :(得分:1)
在第1093行的example中,方法printNode(Node<OWLClass> node)
显示了如何获取实体的名称。简而言之,您可以定义前缀管理器并使用它来打印所需实体的名称。
否则您可以使用以下方法:
public void printEntity(OWLEntity e){
String namespace = e.getIRI().getNamespace();
String fragment = e.getIRI().getFragment();
System.out.println("Namespace: " + namespace);
System.out.println("Fragment: " + fragment);
}
因此,如果您的实体名称为http://www.co-ode.org/ontologies/pizza/pizza.owl#Pizza
,那么之前的代码将打印出来:
命名空间:http://www.co-ode.org/ontologies/pizza/pizza.owl# 片段:披萨