2017-05-24 84 views
1

我一直試圖無休止地解析實驗性因素本體(EFO)文件,但我無法解析它。我在Protege中打開的文件很好,但似乎無法使用Java加載它。我已經看過幾組示例代碼,並且我似乎正好複製它們,但我不明白爲什麼解析失敗。這裏是我的代碼:從EFO解析OWL

System.setProperty("entityExpansionLimit","100000000"); 
OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); 
URI uri = URI.create("file:~/efo.owl"); 
IRI iri = IRI.create(uri); 
OWLOntology ontology = manager.loadOntologyFromOntologyDocument(iri); 

這裏是我得到的錯誤:

Could not load ontology: Problem parsing 
file:/~/efo.owl 
Could not parse ontology. Either a suitable parser could not be found, or 
parsing failed. See parser logs below for explanation. 
The following parsers were tried: 

謝謝你,我知道一些類似的帖子已經被提出,但我一直無法弄清楚和我相當絕望!如果需要,我可以提供堆棧跟蹤,但是由於每個解析器都有一個跟蹤,所以時間很長。

+0

從完整的堆棧跟蹤中,我相信您的本地文件的內容是一個HTML錯誤消息,而不是實際的本體論。請在文本編輯器中打開它並確認內容。 – Ignazio

+0

我已經打開了本體,這很好,除了頂部有一個奇怪的HTML格式。我認爲這可能會導致錯誤,我不知道它爲什麼下載這樣的錯誤。 – Rotavator

+0

HTML會導致錯誤,這是有保證的。嘗試刪除它。 – Ignazio

回答

0

對於OWLAPI來說,文件URI必須是絕對解析它們的,但由於你有一個本地文件,你可以創建一個File實例並將其傳遞給IRI.create()。

文件實例或者傳遞給OWLOntologyManager :: loadOntologyFromOntologyDocument()

+0

我也試過這個,我得到同樣的錯誤。我也嘗試將我的文件作爲ClassPathResource,但它不起作用。 – Rotavator

+0

有沒有辦法直接獲取本體,而不需要將其作爲本地文件? – Rotavator

+0

是否有任何正在使用的解析器列表?如果沒有,看起來像缺少解析器定義。你在班級路線上有哪些Owlapi罐子? – Ignazio

0

一定有什麼不對的地方,下載的文件。直接從本體IRI加載本體工作。