/* * RapidMiner * * Copyright (C) 2001-2011 by Rapid-I and the contributors * * Complete list of developers available at our web site: * * http://rapid-i.com * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see http://www.gnu.org/licenses/. */ package com.rapidminer.tools; /** * Very simple ontology class. Two static ontologies are available: * <tt>ATTRIBUTE_BLOCK_TYPE</tt> and <tt>ATTRIBUTE_VALUE_TYPE</tt>. It * provides a single method <tt>boolean isA(int sub, int super)</tt> which * does what isA-methods are usually expected to do. Legal parameters are the * constants. * * @author Simon Fischer, Ingo Mierswa */ public class Ontology { public static final int VALUE_TYPE = 0; public static final int BLOCK_TYPE = 1; /** * The parent's index in the array. Root has parent -1. */ private final int parentId[]; /** Human readable string representations. */ private final String names[]; public static final int NO_PARENT = -1; // -------------------- VALUE TYPE -------------------- public static final int ATTRIBUTE_VALUE = 0; public static final int NOMINAL = 1; public static final int NUMERICAL = 2; public static final int INTEGER = 3; public static final int REAL = 4; public static final int STRING = 5; public static final int BINOMINAL = 6; // nominal, only +1 and -1 public static final int POLYNOMINAL = 7; public static final int FILE_PATH = 8; // path to a file public static final int DATE_TIME = 9; public static final int DATE = 10; public static final int TIME = 11; public static final String[] VALUE_TYPE_NAMES = { "attribute_value", "nominal", "numeric", "integer", "real", "text", "binominal", "polynominal", "file_path", "date_time", "date", "time" }; /** An ontology for value types (nominal, numerical...) */ public static final Ontology ATTRIBUTE_VALUE_TYPE = new Ontology(new int[] { NO_PARENT, // attribute_value (parent type) ATTRIBUTE_VALUE, // nominal ATTRIBUTE_VALUE, // numeric NUMERICAL, // integer NUMERICAL, // real NOMINAL, // string NOMINAL, // binominal (boolean) NOMINAL, // polynominal NOMINAL, // file_path ATTRIBUTE_VALUE, // date_time DATE_TIME, // date DATE_TIME // time }, VALUE_TYPE_NAMES); // -------------------- BLOCK TYPE -------------------- public static final int ATTRIBUTE_BLOCK = 0; public static final int SINGLE_VALUE = 1; public static final int VALUE_SERIES = 2; public static final int VALUE_SERIES_START = 3; public static final int VALUE_SERIES_END = 4; public static final int VALUE_MATRIX = 5; public static final int VALUE_MATRIX_START = 6; public static final int VALUE_MATRIX_END = 7; public static final int VALUE_MATRIX_ROW_START = 8; public static final String[] BLOCK_TYPE_NAMES = { "attribute_block", "single_value", "value_series", "value_series_start", "value_series_end", "value_matrix", "value_matrix_start", "value_matrix_end", "value_matrix_row_start" }; /** An ontology for block types (single, time series...) */ public static final Ontology ATTRIBUTE_BLOCK_TYPE = new Ontology(new int[] { NO_PARENT, // attribute block ATTRIBUTE_BLOCK, // single value ATTRIBUTE_BLOCK, // value series VALUE_SERIES, // value series start VALUE_SERIES, // value series end ATTRIBUTE_BLOCK, // value matrix VALUE_MATRIX, // value matrix start VALUE_MATRIX, // value matrix end VALUE_MATRIX // value matrix row start }, BLOCK_TYPE_NAMES); /** Constructs a new ontology where each of the entries points to its parent. */ private Ontology(int[] parents, String[] names) { this.parentId = parents; this.names = names; } /** Returns true if child is a parent. */ public boolean isA(int child, int parent) { while (child != parent) { child = parentId[child]; if (child == -1) return false; } return true; } /** Maps the name of a class to its index or -1 if unknown. */ public int mapName(String name) { for (int i = 0; i < names.length; i++) { if (names[i].equals(name)) return i; } return -1; } /** Maps an index to its name. */ public String mapIndex(int index) { if ((index >= 0) && (index < names.length)) return names[index]; else return null; } public String[] getNames() { return names; } public int getParent(int child) { return parentId[child]; } }