2016-08-19 7 views
0

Я хочу, чтобы добавить новую аксиому в онтологию, для этого я создал метод, который преобразует String [который находится в Манчестере OWL Синтаксиса] в OWLClassExpression с помощью ManchesterOWLSyntaxParser и поздних форм новый OWLAxiom и добавить в Онтологию.OWLAPI: «ParserException» при преобразовании строки в классе Expression с помощью ManchesterOWLSyntaxParser

Но я получаю следующее исключение (org.semanticweb.owlapi.manchestersyntax.renderer.ParserException): -

Exception in thread "main" org.semanticweb.owlapi.manchestersyntax.renderer.ParserException: Encountered owl:real at line 1 column 12. Expected one of: 
    Datatype name 
    not 
    { 

    at org.semanticweb.owlapi.manchestersyntax.parser.ManchesterOWLSyntaxParserImpl$ExceptionBuilder.build(ManchesterOWLSyntaxParserImpl.java:2441) 
    at org.semanticweb.owlapi.manchestersyntax.parser.ManchesterOWLSyntaxParserImpl.parseDataRangePrimary(ManchesterOWLSyntaxParserImpl.java:813) 
    at org.semanticweb.owlapi.manchestersyntax.parser.ManchesterOWLSyntaxParserImpl.parseDataUnionOf(ManchesterOWLSyntaxParserImpl.java:756) 
    at org.semanticweb.owlapi.manchestersyntax.parser.ManchesterOWLSyntaxParserImpl.parseDataIntersectionOf(ManchesterOWLSyntaxParserImpl.java:737) 
    at org.semanticweb.owlapi.manchestersyntax.parser.ManchesterOWLSyntaxParserImpl.parseDataRange(ManchesterOWLSyntaxParserImpl.java:729) 
    at org.semanticweb.owlapi.manchestersyntax.parser.ManchesterOWLSyntaxParserImpl.parseDataRestriction(ManchesterOWLSyntaxParserImpl.java:695) 
    at org.semanticweb.owlapi.manchestersyntax.parser.ManchesterOWLSyntaxParserImpl.parseNonNaryClassExpression(ManchesterOWLSyntaxParserImpl.java:584) 
    at org.semanticweb.owlapi.manchestersyntax.parser.ManchesterOWLSyntaxParserImpl.parseIntersection(ManchesterOWLSyntaxParserImpl.java:488) 
    at org.semanticweb.owlapi.manchestersyntax.parser.ManchesterOWLSyntaxParserImpl.parseUnion(ManchesterOWLSyntaxParserImpl.java:511) 
    at org.semanticweb.owlapi.manchestersyntax.parser.ManchesterOWLSyntaxParserImpl.parseClassExpression(ManchesterOWLSyntaxParserImpl.java:470) 
    at OWLAPI.convertStringToClassExpression(OWLAPI.java:29) 

Ниже мой Онтология: -

<?xml version="1.0"?> 
<!DOCTYPE rdf:RDF [ 
    <!ENTITY owl "http://www.w3.org/2002/07/owl#" > 
    <!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" > 
    <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" > 
    <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" > 
]> 
<rdf:RDF xmlns="http://www.semanticweb.org/empty#" 
    xml:base="http://www.semanticweb.org/empty" 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns:owl="http://www.w3.org/2002/07/owl#" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#" 
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"> 
    <owl:Ontology rdf:about="http://www.semanticweb.org/empty"/> 
    <!-- 
    /////////////////////////////////////////////////////////////////////////////////////// 
    // 
    // Data properties 
    // 
    /////////////////////////////////////////////////////////////////////////////////////// 
    --> 
    <!-- http://www.semanticweb.org/empty#name --> 
    <owl:DatatypeProperty rdf:about="http://www.semanticweb.org/empty#name"/> 
    <!-- 
    /////////////////////////////////////////////////////////////////////////////////////// 
    // 
    // Classes 
    // 
    /////////////////////////////////////////////////////////////////////////////////////// 
    --> 
    <!-- http://www.semanticweb.org/empty#A --> 
    <owl:Class rdf:about="http://www.semanticweb.org/empty#A"/> 
</rdf:RDF> 
<!-- Generated by the OWL API (version 3.5.1) http://owlapi.sourceforge.net --> 

Мой JAVA код: -

// some code above to form OWLManager and Ontology 
System.out.println(convertStringToClassExpression("name max 1 owl:real")); 
private OWLClassExpression convertStringToClassExpression(String expression) { 
     ManchesterOWLSyntaxParser parser = OWLManager.createManchesterParser(); 
     parser.setStringToParse(expression); 
     parser.setDefaultOntology(owlOntology); // my ontology 
     ShortFormEntityChecker checker = new ShortFormEntityChecker(getShortFormProvider()); 
     parser.setOWLEntityChecker(checker); 
     return parser.parseClassExpression(); 
    } 
private BidirectionalShortFormProvider getShortFormProvider() { 
     Set<OWLOntology> ontologies = owlManager.getOntologies(); // my OWLOntologyManager 
     ShortFormProvider sfp = new ManchesterOWLSyntaxPrefixNameShortFormProvider(
       owlManager.getOntologyFormat(owlOntology)); 
     BidirectionalShortFormProvider shortFormProvider = new BidirectionalShortFormProviderAdapter(
       ontologies, sfp); 
     return shortFormProvider; 
    } 

Но если я изменю свою строку с name max 1 owl:real на name max 1 xsd:string, то исключение не будет выведено из кода. В чем проблема ? Как этого избежать?

+1

'ManchesterOWLSyntaxParserImpl' (в настоящее время) не обрабатывает типы данных OWL 2' owl: real' и 'owl: rational'. Использует ли параметр 'float' или' xsd: double' для вашего прецедента (их пространства значений попарно не пересекаются по определению, однако)? – dhke

+0

Хорошо. Итак, как протеже обрабатывает этот случай? Я могу добавить 'name max 1 owl: real' как ClassExpression для любой аксиомы. Я что-то пропустил (я имею в виду дополнительную обработку, неправильную реализацию)? – SuhasD

+0

Какие версии OWLAPI вы пробовали? Новый Protègé имеет 4.2.5, у вас есть 3.5.1, помеченный в вашей онтологии, но вверх по течению уже на 5.0.1. Я просто подтвердил, что 4.0.2 не имеет поддержки 'owl: real'. – dhke

ответ

0

Это ошибка OWLAPI, исправленная в текущих версиях багажника. Исправление будет выпущено в 4.2.6 и 5.0.3, как только они будут завершены и опубликованы на Maven Central.

 Смежные вопросы

  • Нет связанных вопросов^_^