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    
019    import ch.uzh.ifi.attempto.base.TextElement;
020    
021    /**
022     * This interface represents a sentence in the given controlled natural language. It includes
023     * declarative sentences as well as questions.
024     * 
025     * @author Tobias Kuhn
026     */
027    public interface Sentence extends Statement {
028            
029            /**
030             * Returns a list of text elements that represent the tokens of this sentence in the given
031             * language.
032             * 
033             * @param language The language.
034             * @return A token list.
035             */
036            public List<TextElement> getTextElements(String language);
037            
038            /**
039             * Returns true if this sentence can participate in reasoning.
040             * 
041             * @return true if this sentence can participate in reasoning.
042             */
043            // TODO move to ontology or reasoner class?
044            public boolean isReasonable();
045            
046            /**
047             * Returns true if the sentence is integrated into the ontology.
048             * 
049             * @return true if the sentence is integrated into the ontology.
050             */
051            public boolean isIntegrated();
052            
053            /**
054             * Informs the sentence object whether it is integrated into the ontology or not. This
055             * method should only be called from the ontology or an ontology loader.
056             * 
057             * @param integrated true if the sentence is integrated into the ontology.
058             */
059            public void setIntegrated(boolean integrated);
060    
061            /**
062             * Checks whether the sentence contains the given ontology element (no matter which
063             * word form).
064             * 
065             * @param e The ontology element.
066             * @return true if the ontology element occurs in this sentence.
067             */
068            public boolean contains(OntologyElement e);
069            
070            /**
071             * This method is called whenever some words of the sentence are modified.
072             */
073            public void update();
074            
075            /**
076             * Returns whether the sentence can be changed or is immutable.
077             * 
078             * @return true if the sentence cannot be changed.
079             */
080            public boolean isImmutable();
081            
082            /**
083             * Returns a list of sentence details in the given language.
084             * 
085             * @param language The language.
086             * @return A list of sentence details.
087             */
088            public List<SentenceDetail> getDetails(String language);
089    
090    }