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 java.util.ArrayList;
018    import java.util.Collection;
019    import java.util.List;
020    
021    import ch.uzh.ifi.attempto.acewiki.owl.OWLRelation;
022    import ch.uzh.ifi.attempto.ape.Gender;
023    import ch.uzh.ifi.attempto.ape.LexiconEntry;
024    import ch.uzh.ifi.attempto.chartparser.LexicalRule;
025    
026    /**
027     * This class stands for relations that are represented by of-constructs in ACE and object
028     * properties in OWL. Of-constructs consist of a noun plus the word "of". They have only one word
029     * form.
030     *<p>
031     * 0: word form consisting of a noun plus the word "of".
032     *<p>
033     * Examples: "father of"; "part of".
034     * 
035     * @author Tobias Kuhn
036     */
037    public class OfRelation extends OWLRelation implements ACEOWLOntoElement {
038            
039            private String word;
040            
041            /**
042             * Creates a new relation that is represented by an of-construct.
043             */
044            public OfRelation() {
045            }
046            
047            public String[] getWords() {
048                    return new String[] {word};
049            }
050    
051            public void setWords(String serializedWords) {
052                    String[] words = serializedWords.split(";");
053                    word = words[0];
054                    if (!words[0].endsWith(" of")) {
055                            word = word + " of";
056                    }
057            }
058            
059            public String serializeWords() {
060                    return word + ";";
061            }
062            
063            /**
064             * Returns the noun of the of-construct.
065             * 
066             * @return The noun.
067             */
068            public String getNoun() {
069                    if (word == null) {
070                            return null;
071                    } else {
072                            return word.substring(0, word.length()-3);
073                    }
074            }
075            
076            public String getIRISuffix() {
077                    return getNoun();
078            }
079            
080            public List<LexiconEntry> getLexiconEntries() {
081                    List<LexiconEntry> entries = new ArrayList<LexiconEntry>();
082                    if (word != null) {
083                            entries.add(LexiconEntry.createNounSgEntry(getNoun(), getNoun(), Gender.UNDEF));
084                    }
085                    return entries;
086            }
087            
088            public String getType() {
089                    return "Of-Construct";
090            }
091            
092            public String getInternalType() {
093                    return "nounof";
094            }
095            
096            public void collectLexicalRules(String catName, Collection<LexicalRule> lexRules) {
097                    if (catName == null || catName.equals("nounof")) {
098                            lexRules.add(new LexicalRule("nounof", getWord(0)));
099                    }
100            }
101    
102    }