如何将OWL API对象转换为Java对象?

时间:2013-08-30 00:06:20

标签: java owl owl-api

我正在使用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对象的相应变量。

2 个答案:

答案 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# 片段:披萨