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.core;
016    
017    import java.util.List;
018    import java.util.Map;
019    
020    // TODO split this interface into several interfaces:
021    // - AceWikiReasoner
022    // - AssignmentsReasoner
023    // - HierarchyReasoner
024    // - ConceptSatisfiabilityReasoner
025    // - QuestionReasoner
026    /**
027     * This is the reasoner interface for AceWiki.
028     * 
029     * @author Tobias Kuhn
030     */
031    public interface AceWikiReasoner {
032    
033            /**
034             * This is the first method to be called and provides the ontology object.
035             * 
036             * @param ontology The ontology object.
037             */
038            public void init(Ontology ontology);
039    
040            /**
041             * Should return the name of the reasoner.
042             * 
043             * @return The name of the reasoner.
044             */
045            public String getReasonerName();
046            
047            /**
048             * Should return the version of the reasoner.
049             * 
050             * @return The version of the reasoner.
051             */
052            public String getReasonerVersion();
053    
054            /**
055             * Should return the type of the reasoner.
056             * 
057             * @return The reasoner type.
058             */
059            public String getReasonerType();
060            
061            /**
062             * This method can return a map of name/value pairs with information about the reasoner.
063             * To retain the insertion order, a map implementation like LinkedHashMap should be used.
064             * It is allowed to return null for no information.
065             * 
066             * @return A map of name/value pairs with reasoner information.
067             */
068            public Map<String, String> getInfo();
069    
070            /**
071             * Loads the reasoner or reasoner interface.
072             */
073            public void load();
074            
075            /**
076             * Loads the given ontology element. The method flushElements is called after each
077             * sequence of one or more loadElement-calls.
078             * 
079             * @param element The ontology element.
080             */
081            public void loadElement(OntologyElement element);
082            
083            /**
084             * Unloads the given ontology element. The method flushElements is called after each
085             * sequence of one or more unloadElement-calls.
086             * 
087             * @param element The ontology element.
088             */
089            public void unloadElement(OntologyElement element);
090            
091            /**
092             * This method can finalize the loading or unloading of elements. It is always called
093             * after a sequence of one or more loadElement- or unloadElement-calls.
094             */
095            public void flushElements();
096    
097            /**
098             * Should return all concepts the given individual belongs to.
099             * 
100             * @param ind The individual.
101             * @return A list of all concepts of the individual.
102             */
103            public List<Concept> getConcepts(Individual ind);
104    
105            /**
106             * Should return all individuals that belong to the given concept.
107             * 
108             * @param concept The concept.
109             * @return A list of all individuals of the concept.
110             */
111            public List<Individual> getIndividuals(Concept concept);
112    
113            /**
114             * Should return all super-concepts of the given concept.
115             * 
116             * @param concept The concept for which all super-concepts should be returned.
117             * @return A list of all super-concepts.
118             */
119            public List<Concept> getSuperConcepts(Concept concept);
120    
121            /**
122             * Should return all the sub-concepts of the given concept.
123             * 
124             * @param concept The concept for which all sub-concepts should be returned.
125             * @return A list of all sub-concepts.
126             */
127            public List<Concept> getSubConcepts(Concept concept);
128    
129            /**
130             * Should return a list of ontology elements that answer the given question.
131             * 
132             * @param question The question to be answered.
133             * @return A list of ontology elements that are the answer to the question.
134             */
135            public List<AnswerElement> getAnswer(Question question);
136    
137            /**
138             * Should return true if the ontology is consistent.
139             * 
140             * @return true if the ontology is consistent.
141             */
142            public boolean isConsistent();
143    
144            /**
145             * Should check if the given concept is satisfiable.
146             * 
147             * @param concept The concept.
148             * @return true if the concept is satisfiable.
149             */
150            public boolean isSatisfiable(Concept concept);
151            
152            /**
153             * Loads the given sentence.
154             * 
155             * @param sentence The sentence.
156             */
157            public void loadSentence(Sentence sentence);
158            
159            /**
160             * Unloads the given sentence.
161             * 
162             * @param sentence The sentence.
163             */
164            public void unloadSentence(Sentence sentence);
165    
166    }