// This file is part of AceWiki.
// Copyright 2008-2013, AceWiki developers.
//
// AceWiki is free software: you can redistribute it and/or modify it under the terms of the GNU
// Lesser General Public License as published by the Free Software Foundation, either version 3 of
// the License, or (at your option) any later version.
//
// AceWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
// even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License along with AceWiki. If
// not, see http://www.gnu.org/licenses/.
package ch.uzh.ifi.attempto.acewiki.core;
import java.util.List;
import ch.uzh.ifi.attempto.base.MultiTextContainer;
import ch.uzh.ifi.attempto.base.TextElement;
/**
* This interface represents a potentially ambiguous sentence and covers declarative
* as well as interrogative tree sets. It can be viewed in different languages.
*
* @author Tobias Kuhn
* @author Kaarel Kaljurand
*/
public interface Sentence extends Statement {
/**
* Returns a list of text elements that represent the tokens of this sentence in the given
* language (the first one if there are multiple alternatives).
*
* @param language The language.
* @return A token list.
*/
public List<TextElement> getTextElements(String language);
/**
* Returns a text container with the text of this sentence (possibly with alternatives) in the
* given language.
*
* @param language The language.
* @return The multi-text container.
*/
public MultiTextContainer getTextContainer(String language);
/**
* Returns true if this sentence can participate in reasoning.
*
* @return true if this sentence can participate in reasoning.
*/
// TODO move to ontology or reasoner class?
public boolean isReasonable();
/**
* Returns true if the sentence is integrated into the ontology.
*
* @return true if the sentence is integrated into the ontology.
*/
public boolean isIntegrated();
/**
* Informs the sentence object whether it is integrated into the ontology or not. This
* method should only be called from the ontology or an ontology loader.
*
* @param integrated true if the sentence is integrated into the ontology.
*/
public void setIntegrated(boolean integrated);
/**
* Checks whether the sentence contains the given ontology element (no matter which
* word form).
*
* @param e The ontology element.
* @return true if the ontology element occurs in this sentence.
*/
public boolean contains(OntologyElement e);
/**
* This method is called whenever some words of the sentence are modified.
*/
public void update();
/**
* Returns whether the sentence can be changed or is immutable.
*
* @return true if the sentence cannot be changed.
*/
public boolean isImmutable();
/**
* Returns a list of sentence details in the given language and for the given representation.
*
* @param language The language.
* @param index The index of the representation.
* @return A list of sentence details.
*/
public List<SentenceDetail> getDetails(String language, int index);
/**
* Returns the number of internal representations. A value larger than 1 indicates internal
* ambiguity.
*
* @return The number of internal representations.
*/
public int getNumberOfRepresentations();
public Sentence unambiguousCopyFor(Article article, int index);
}