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.gf;
016
017 import java.util.HashMap;
018 import java.util.Map;
019
020 import ch.uzh.ifi.attempto.acewiki.core.AbstractAceWikiEngine;
021 import ch.uzh.ifi.attempto.acewiki.core.AceWikiReasoner;
022 import ch.uzh.ifi.attempto.acewiki.core.Concept;
023 import ch.uzh.ifi.attempto.acewiki.core.DummyReasoner;
024 import ch.uzh.ifi.attempto.acewiki.core.Individual;
025 import ch.uzh.ifi.attempto.acewiki.core.LanguageHandler;
026 import ch.uzh.ifi.attempto.acewiki.core.Ontology;
027 import ch.uzh.ifi.attempto.acewiki.core.OntologyElement;
028 import ch.uzh.ifi.attempto.acewiki.core.Sentence;
029
030 /**
031 * This is an AceWiki engine using GF (Grammatical Framework).
032 *
033 * @author Tobias Kuhn
034 */
035 public class GFEngine extends AbstractAceWikiEngine {
036
037 private Map<String, GFHandler> languageHandlers = new HashMap<String, GFHandler>();
038 private AceWikiReasoner reasoner = new DummyReasoner();
039 private GFGrammar gfGrammar;
040 private Ontology ontology;
041
042 /**
043 * Creates a new GF-based AceWiki engine.
044 */
045 public GFEngine() {
046 }
047
048 public void init(Ontology ontology) {
049 this.ontology = ontology;
050 gfGrammar = new GFGrammar(
051 ontology.getParameter("pgf_file"),
052 getLanguages()[0]
053 );
054 super.init(ontology);
055 }
056
057 public LanguageHandler getLanguageHandler(String language) {
058 GFHandler lh = languageHandlers.get(language);
059 if (lh == null) {
060 lh = new GFHandler(language, gfGrammar);
061 languageHandlers.put(language, lh);
062 }
063 return lh;
064 }
065
066 public String[] getLanguages() {
067 return ontology.getParameter("languages").split(",");
068 }
069
070 /**
071 * Returns the grammar object.
072 *
073 * @return The grammar object.
074 */
075 public GFGrammar getGFGrammar() {
076 return gfGrammar;
077 }
078
079 public AceWikiReasoner getReasoner() {
080 return reasoner;
081 }
082
083 public OntologyElement createOntologyElement(String type) {
084 // TODO
085 return null;
086 }
087
088 public Sentence createSentence(String serialized) {
089 return new GFDeclaration(gfGrammar.deserialize(serialized), gfGrammar);
090 }
091
092 public Sentence createAssignmentSentence(Individual ind, Concept concept) {
093 // TODO
094 return null;
095 }
096
097 public Sentence createHierarchySentence(Concept subConcept, Concept superConcept) {
098 // TODO
099 return null;
100 }
101
102 }