2013-08-30 102 views
1

我正在使用OWL API來操縱本體。我想創建我自己的與OWLObjects相對應的Java對象(例如,OWLEntity,OWLClass等)。我怎樣才能做到這一點?如何將OWL API對象轉換爲Java對象?

爲了達到這個目的,我想我需要知道如何獲取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

例如,你的意思是說,布爾值是必要的應該基於本體中某個屬性對應於你的Java對象的某個屬性的值嗎? –

+0

是的!和其他成員變量。 –

+0

並非所有的貓頭鷹實體(班級,個人...)都有姓名。我猜你的名字是指用作rdf:id的URI。 Protege具有一個功能,可以在本體中自動生成用於貓頭鷹類的Java包裝類,這可能對您有所幫助。 – Anthony

回答

1

在的第1093行中,方法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# 片段:披薩

3

OWLEntity有一個方法getIRI(),它將爲您提供該對象的IRI; IRI既是一個CharSequence,也可以用經典的toString()方法變成一個String。

在最新的OWL API中,您也可以像上面提到的mikrohelen一樣訪問IRI的名稱空間和片段(它只是URI的擴展,即類似於http://example.com或urn:testuri的東西)。

這適用於所有OWLEntity子接口,即OWLClass,OWLDataProperty,OWLObjectProperty,OWLDatatype,OWLNamedIndividual和OWLAnnotationProperty。

我不能回答安東尼的評論還沒有,但我在這裏引用:

塊引用 不是所有的貓頭鷹實體(類,個人...)有名字。我猜你的名字是指用作rdf:id的URI。 Protege具有一個功能,可以在本體中自動生成用於貓頭鷹類的Java包裝類,這可能對您有所幫助。 - 安東尼9月5日15:04

這是不正確的,嚴格來說:所有OWLEntity實例都有IRI。沒有IRI的類和個人不是實體:類是OWLClassExpression實例,例如限定條件,沒有IRI的個人是OWLAnonymousIndividual實例。這同樣適用於屬性:匿名屬性只是表達式,例如屬性鏈,但它們不是OWLEntity實例。