2016-08-19 9 views
0

를 사용하여 클래스 표현에 문자열을 변환하는 동안 내가 ManchesterOWLSyntaxParser 나중에 양식을 사용하여 OWLClassExpression에 [맨체스터 OWL 구문에] String 변환 방법을 만들어 그것을 위해, 온톨로지에 새로운 공리를 추가 할 새로운 OWLAxiom 및 추가 온톨로지.OWLAPI "의 ParserException"ManchesterOWLSyntaxParser

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

하지만 다음과 같은 예외 (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) 

이 다음은 내 온톨로지입니다

그러나 문자열을 name max 1 owl:real에서 name max 1 xsd:string으로 변경하면 코드에서 예외가 발생하지 않습니다. 뭐가 문제 야 ? 어떻게 피하는가?

+1

'ManchesterOWLSyntaxParserImpl' (현재)는 OWL 2 데이터 유형'owl : real'과'owl : rational'을 처리하지 않습니다. 'float' 또는'xsd : double'을 유스 케이스의 옵션으로 사용하고 있습니다 (그러나 값 공간은 정의에 의해 쌍으로 분리되어 있습니다)? – dhke

+0

확인. 그래서 재소자가이 사건을 어떻게 처리합니까? 어떤 명제에 ClassExpression으로'name max 1 owl : real'을 추가 할 수 있습니다. 내가 뭔가를 놓쳤습니까 (추가 처리, 잘못된 구현을 의미합니까)? – SuhasD

+0

어떤 OWLAPI 버전을 시도 했습니까? 최신 Protègé는 4.2.5이며 온톨로지에서 3.5.1을 표시하지만 업스트림은 이미 5.0.1입니다. 4.0.2에는 '올빼미 : 진짜'지원이 없음을 확인했습니다. – dhke

답변

0

이것은 현재 트렁크 버전에서 수정 된 OWLAPI 버그입니다. 수정본은 Maven Central에서 완성되고 공개되면 4.2.6 및 5.0.3에서 릴리스 될 예정입니다.