001    // This file is part of AceWiki.
002    // Copyright 2008-2012, AceWiki developers.
003    // 
004    // AceWiki is free software: you can redistribute it and/or modify it under the terms of the GNU
005    // Lesser General Public License as published by the Free Software Foundation, either version 3 of
006    // the License, or (at your option) any later version.
007    // 
008    // AceWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
009    // even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
010    // Lesser General Public License for more details.
011    // 
012    // You should have received a copy of the GNU Lesser General Public License along with AceWiki. If
013    // not, see http://www.gnu.org/licenses/.
014    
015    package ch.uzh.ifi.attempto.acewiki.aceowl;
016    
017    import ch.uzh.ifi.attempto.acewiki.core.AceWikiReasoner;
018    import ch.uzh.ifi.attempto.acewiki.core.Concept;
019    import ch.uzh.ifi.attempto.acewiki.core.Individual;
020    import ch.uzh.ifi.attempto.acewiki.core.LanguageHandler;
021    import ch.uzh.ifi.attempto.acewiki.core.MonolingualEngine;
022    import ch.uzh.ifi.attempto.acewiki.core.OntologyElement;
023    import ch.uzh.ifi.attempto.acewiki.core.Sentence;
024    import ch.uzh.ifi.attempto.acewiki.owl.AceWikiOWLReasoner;
025    import ch.uzh.ifi.attempto.acewiki.owl.OWLXMLExporter;
026    
027    /**
028     * This is the AceWiki language engine for ACE/OWL. It delivers the grammar, the lexicon, the
029     * language factory, the reasoner, and more.
030     * 
031     * @author Tobias Kuhn
032     */
033    public class ACEOWLEngine extends MonolingualEngine {
034            
035            private ACEHandler languageHandler = new ACEHandler();
036            private AceWikiOWLReasoner reasoner = new AceWikiOWLReasoner();
037            
038            /**
039             * Creates a new language engine for ACE/OWL.
040             */
041            public ACEOWLEngine() {
042                    addExporter(new OWLXMLExporter(true));
043                    addExporter(new OWLXMLExporter(false));
044                    addExporter(new ACETextExporter(true));
045                    addExporter(new ACETextExporter(false));
046                    addExporter(new ACELexiconExporter());
047                    
048                    setLexicalTypes("propername", "noun", "nounof", "trverb", "tradj");
049            }
050            
051            public LanguageHandler getLanguageHandler() {
052                    return languageHandler;
053            }
054    
055            public AceWikiReasoner getReasoner() {
056                    return reasoner;
057            }
058    
059            public OntologyElement createOntologyElement(String type) {
060                    if (type.equals("propername")) {
061                            return new ProperNameIndividual();
062                    } else if (type.equals("noun")) {
063                            return new NounConcept();
064                    } else if (type.equals("nounof")) {
065                            return new OfRelation();
066                    } else if (type.equals("trverb")) {
067                            return new VerbRelation();
068                    } else if (type.equals("tradj")) {
069                            return new TrAdjRelation();
070                    }
071                    return null;
072            }
073            
074            public Sentence createSentence(String serialized) {
075                    // remove leading and trailing blank spaces.
076                    String s = serialized.replaceFirst("^\\s+", "").replaceFirst("\\s+$", "");
077                    if (s.substring(s.length()-1).equals("?")) {
078                            return new ACEQuestion(s);
079                    } else {
080                            return new ACEDeclaration(s);
081                    }
082            }
083            
084            public Sentence createAssignmentSentence(Individual ind, Concept concept) {
085                    return createSentence(ind.getWord(2) + " is a " + concept.getWord() + ".");
086            }
087            
088            public Sentence createHierarchySentence(Concept subConcept, Concept superConcept) {
089                    return createSentence("Every " + subConcept.getWord() + " is a " +
090                                    superConcept.getWord() + ".");
091            }
092    
093    }