1

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

4

2 回答 2

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。

我还不能回答安东尼的评论,但我在这里引用:

Blockquote 并非所有的猫头鹰实体(类、个体……)都有名字。我猜你的名字是指用作 rdf:id 的 URI。Protege 有一个功能可以自动为你的本体中的 owl 类生成 Java 包装类,它可能对你有帮助。– 安东尼 9 月 5 日 15:04

这是不正确的,严格来说:所有 OWLEntity 实例都有 IRI。没有 IRI 的类和个人不是实体:类是 OWLClassExpression 实例,例如限定限制,而没有 IRI 的个人是 OWLAnonymousIndividual 实例。这同样适用于属性:匿名的只是表达式,例如属性链,但它们不是 OWLEntity 实例。

于 2013-09-17T17:36:21.783 回答
1

In this example in line 1093, the method printNode(Node<OWLClass> node) shows how to get the name of an entity. In brief you can define your prefix manager and use that to print the name of the entity you want.

Otherwise you can use the following method:

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);
}

So if you have an entity which name is http://www.co-ode.org/ontologies/pizza/pizza.owl#Pizza, then the previous code will print:

Namespace: http://www.co-ode.org/ontologies/pizza/pizza.owl# Fragment: Pizza

于 2013-09-17T07:22:33.783 回答