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 org.semanticweb.owlapi.model.OWLAxiom;
018 import org.semanticweb.owlapi.model.OWLClassExpression;
019 import org.semanticweb.owlapi.model.OWLIndividual;
020 import org.semanticweb.owlapi.model.OWLNamedIndividual;
021 import org.semanticweb.owlapi.model.OWLObjectOneOf;
022 import org.semanticweb.owlapi.model.OWLSubClassOfAxiom;
023
024 import ch.uzh.ifi.attempto.acewiki.owl.OWLQuestion;
025 import ch.uzh.ifi.attempto.base.TextContainer;
026
027 /**
028 * This class represents ACE questions.
029 *
030 * @author Tobias Kuhn
031 */
032 public class ACEQuestion extends ACESentence implements OWLQuestion {
033
034 private OWLClassExpression questionOWLClass;
035 private OWLNamedIndividual questionOWLIndividual;
036 private boolean recalculateOWLEntities = true;
037
038 /**
039 * Creates a new ACE question.
040 *
041 * @param serialized The serialized representation of the question.
042 */
043 public ACEQuestion(String serialized) {
044 super(serialized);
045 }
046
047 /**
048 * Creates a new ACE question
049 *
050 * @param textContainer The text container with the question text.
051 */
052 public ACEQuestion(TextContainer textContainer) {
053 super(textContainer);
054 }
055
056 public OWLClassExpression getQuestionOWLClass() {
057 calculateQuestionOWLEntities();
058 return questionOWLClass;
059 }
060
061 public OWLNamedIndividual getQuestionOWLIndividual() {
062 calculateQuestionOWLEntities();
063 return questionOWLIndividual;
064 }
065
066 private void calculateQuestionOWLEntities() {
067 if (!recalculateOWLEntities) return;
068 questionOWLClass = null;
069 questionOWLIndividual = null;
070
071 OWLSubClassOfAxiom questionOWLAxiom = null;
072 for (OWLAxiom ax : getOWLAxioms()) {
073 if (ax instanceof OWLSubClassOfAxiom) {
074 questionOWLAxiom = (OWLSubClassOfAxiom) ax;
075 break;
076 }
077 }
078 if (questionOWLAxiom != null) {
079 questionOWLClass = questionOWLAxiom.getSubClass();
080 }
081
082 if (questionOWLClass instanceof OWLObjectOneOf) {
083 OWLObjectOneOf oneof = ((OWLObjectOneOf) questionOWLClass);
084 if (oneof != null && oneof.getIndividuals().size() == 1) {
085 OWLIndividual owlInd = oneof.getIndividuals().iterator().next();
086 if (owlInd instanceof OWLNamedIndividual) {
087 questionOWLIndividual = (OWLNamedIndividual) owlInd;
088 }
089 }
090 }
091
092 recalculateOWLEntities = false;
093 }
094
095 public void update() {
096 recalculateOWLEntities = true;
097 super.update();
098 }
099
100 public boolean isReasonable() {
101 return false;
102 }
103
104 }