2016-08-19 5 views
0

Ich mag neues Axiom in Ontologie hinzuzufügen, für die ich Methode geschaffen, die String umwandelt [die in Manchester OWL Syntax ist] in OWLClassExpressionManchesterOWLSyntaxParser und später Formular neu OWLAxiom und zur Ontologie hinzufügen.OWLAPI: „ParserException“, während String Klasse Expression Umwandlung ManchesterOWLSyntaxParser mit

Aber ich bin immer folgende Ausnahme (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) 

Es folgt mein Ontology: -

<?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 --> 

Mein JAVA Code ist: -

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

Aber wenn ich meinen String von name max 1 owl:real zu name max 1 xsd:string ändere, dann gibt es keine Ausnahme vom Code geworfen. Was ist das Problem ? Wie man es vermeidet?

+1

'ManchesterOWLSyntaxParserImpl' (derzeit) behandelt nicht die OWL2-Datentypen' owl: real' und 'eule: rational'. Verwenden Sie 'float' oder' xsd: double' eine Option für Ihren Anwendungsfall (ihre Wertebereiche sind jedoch per Definition paarweise disjunkt)? – dhke

+0

Ok. Wie behandelt Protege diesen Fall? Ich kann jedem Axiom 'name max 1 eule: real' als ClassExpression hinzufügen. Habe ich etwas übersehen (ich meine extra Verarbeitung, falsche Umsetzung)? – SuhasD

+0

Welche Versionen von OWLAPI haben Sie versucht? Neueste Protègé hat 4.2.5, Sie haben 3.5.1 in Ihrer Ontologie markiert, aber Upstream ist bereits bei 5.0.1. Ich habe gerade verifiziert, dass 4.0.2 keine "Eule: echte" Unterstützung hat. – dhke

Antwort

0

Dies ist ein OWLAPI-Bug, der in den aktuellen Trunk-Versionen behoben ist. Das Update wird in 4.2.6 und 5.0.3 veröffentlicht, sobald sie abgeschlossen und auf Maven Central veröffentlicht wurden.