OWLAPI: ParserException при преобразовании строки в выражение класса с использованием ManchesterOWLSyntaxParser

Я хочу добавить новую аксиому в онтологию, для этого я создал метод, который преобразует String [который находится в синтаксисе Manchester OWL] в OWLClassExpression с использованием ManchesterOWLSyntaxParser, а затем формирует новую OWLAxiom и добавляет в онтологию.

Но я получаю следующее исключение (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, тогда из кода не возникнет исключения. В чем проблема ? Как этого избежать?


person SuhasD    schedule 19.08.2016    source источник
comment
ManchesterOWLSyntaxParserImpl (в настоящее время) не обрабатывает типы данных OWL 2 owl:real и owl:rational. Является ли использование float или xsd:double вариантом для вашего варианта использования (однако их пространства значений попарно не пересекаются по определению)?   -  person dhke    schedule 19.08.2016
comment
Ok. Так как протеже справляется с этим делом? Я могу добавить name max 1 owl:real в качестве ClassExpression к любой аксиоме. Я что-то пропустил (я имею в виду дополнительную обработку, неправильную реализацию)?   -  person SuhasD    schedule 19.08.2016
comment
Какие версии OWLAPI вы пробовали? У самого нового Protègé 4.2.5, у вас в онтологии отмечено 3.5.1, но апстрим уже стоит на 5.0.1. Я только что убедился, что 4.0.2 не поддерживает owl:real.   -  person dhke    schedule 19.08.2016
comment
Я использую OWLAPI 4.1.3 и протеже 5.0.0 (использует OWLAPI 3.5.1). Так что я думаю, что OWLAPI еще не имеет поддержки.   -  person SuhasD    schedule 19.08.2016
comment
Можете ли вы добавить это как проблему в систему отслеживания ошибок owlapi?   -  person Ignazio    schedule 19.08.2016
comment
@Ignazio Добавлено в систему отслеживания ошибок github.com/owlcs/owlapi/issues/556   -  person SuhasD    schedule 19.08.2016


Ответы (1)


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

person Ignazio    schedule 07.09.2016