expressivityranker.java

来自「Semantic Web Ontology Editor」· Java 代码 · 共 243 行

JAVA
243
字号
/*
 * Created on Feb 19, 2006
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package org.mindswap.swoop.automation;

import java.util.Hashtable;

/**
 * @author Dave Wang
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class ExpressivityRanker 
{
	
	private static ExpressivityRanker myInstance;
	
	public Hashtable myComplexityRankTable;
	public Hashtable myRoughRankTable;
	
	public static ExpressivityRanker getInstance()
	{
		if ( myInstance == null )
			myInstance = new ExpressivityRanker();
		return myInstance;
	}
	
	private ExpressivityRanker()
	{
		myComplexityRankTable = new Hashtable();
		buildComplexityTable();
		buildRoughRankTable();
	}
	
	/* 1 - Polynomial
	 * 2 - PSpace-Complete
	 * 3 - ExpTime-Complete
 	 * 4 - NExpTime-Complete
	 */
	private void buildComplexityTable()
	{
		myComplexityRankTable.put( "EL",    "1");
		
		myComplexityRankTable.put( "ELI",   "2");
		myComplexityRankTable.put( "ELIH",  "2");		
		myComplexityRankTable.put( "ELIHF", "2"); // PSpace-hard
		
		myComplexityRankTable.put( "ELIF",  "3"); // ExpTime-C
		myComplexityRankTable.put( "ELU",   "3");
		myComplexityRankTable.put( "ELUI",  "3");
		myComplexityRankTable.put( "ELUIF", "3");
		myComplexityRankTable.put( "ELUIH", "3");
		
		myComplexityRankTable.put( "AL", "3");
		myComplexityRankTable.put( "ALC", "3");
		myComplexityRankTable.put( "ALCF", "3");
		myComplexityRankTable.put( "ALCI", "3");
		myComplexityRankTable.put( "ALCH", "3");
		myComplexityRankTable.put( "ALCN", "3");
		
		myComplexityRankTable.put( "ALCHON", "3");
		myComplexityRankTable.put( "ALCHOF", "3");
		myComplexityRankTable.put( "ALCIF", "3");
		myComplexityRankTable.put( "ALCOF", "3");
		myComplexityRankTable.put( "ALCIN", "3");
		myComplexityRankTable.put( "ALCHI", "3");
		myComplexityRankTable.put( "ALCON", "3");
		myComplexityRankTable.put( "ALCHO", "3");
		
		myComplexityRankTable.put( "ALCO", "3");
		myComplexityRankTable.put( "ALCHF", "3");
		myComplexityRankTable.put( "ALCHON", "3");
		myComplexityRankTable.put( "SHO", "3");
		myComplexityRankTable.put( "SHON", "3");
		
		myComplexityRankTable.put( "ALCHIF", "3");
		myComplexityRankTable.put( "ALCHIN", "3");
		
		myComplexityRankTable.put( "ALF", "3"); // bounded by ALCF
		myComplexityRankTable.put( "ALI", "3"); // bounded by ALCI
		myComplexityRankTable.put( "ALHI", "3"); // bounded by ALCHI
		myComplexityRankTable.put( "ALOF", "3"); // bounded by ALCOF
		myComplexityRankTable.put( "ALIF", "3"); // bounded by ALCIF
		myComplexityRankTable.put( "ALHF", "3"); // bounded by ALCHF
		myComplexityRankTable.put( "ALH", "3"); // bounded by ALCH
		myComplexityRankTable.put( "ALO", "3"); // bounded by ALCO
		myComplexityRankTable.put( "ALIN", "3"); // bounded by ALCIN
		
		myComplexityRankTable.put( "ALOIF", "4"); // bounded by ALCOIF
		myComplexityRankTable.put( "ALOIN", "4"); // bounded by ALCOIN
		myComplexityRankTable.put( "ALHON", "3"); // bounded by ALCHON
		
		myComplexityRankTable.put( "ALR+IF", "3"); // bounded by SIF
		myComplexityRankTable.put( "ALR+",   "3"); // bounded by S
		myComplexityRankTable.put( "ALR+H", "3"); // bounded by SH
		myComplexityRankTable.put( "ALR+HI", "3"); // bounded by SHI
		myComplexityRankTable.put( "ALR+HIF", "3"); // bounded by SHIF
		myComplexityRankTable.put( "ALR+HN", "3"); // bounded by SHN
		
		myComplexityRankTable.put( "S", "3");
		myComplexityRankTable.put( "SIF", "3");
		myComplexityRankTable.put( "SH", "3");
		myComplexityRankTable.put( "SHI", "3");
		myComplexityRankTable.put( "SHIF", "3");
		myComplexityRankTable.put( "SHIN", "3");
		myComplexityRankTable.put( "SHF", "3");
		myComplexityRankTable.put( "SF", "3");
		myComplexityRankTable.put( "SI", "3");

		myComplexityRankTable.put( "ALCOIF", "4");
		myComplexityRankTable.put( "ALCOIN", "4");
		myComplexityRankTable.put( "ALCHOIF", "4");
		myComplexityRankTable.put( "ALCHOIN", "4");
		myComplexityRankTable.put( "ALCOIF", "4");
		myComplexityRankTable.put( "ALCOIN", "4");
		myComplexityRankTable.put( "SHOIF", "4");
		myComplexityRankTable.put( "SHOIN", "4");
		myComplexityRankTable.put( "SOIF", "4");
		myComplexityRankTable.put( "SOIN", "4");
		
		myComplexityRankTable.put( "DL-Lite", "1");
		myComplexityRankTable.put( "RDFS(DL)", "1"); // polynomial by Bernardo		
	}
	
	/* Roughly group 
	 *   1. sub-boolean without union
	 *   2. sub-boolean with union to ACL
	 *   3. 
	 */
	private void buildRoughRankTable()
	{
		/*
		myRoughRankTable.put( "DL-Lite", "1");
		myRoughRankTable.put( "RDFS(DL)", "1");		

		myRoughRankTable.put( "EL",    "1");		
		myRoughRankTable.put( "ELI",   "1");
		myRoughRankTable.put( "ELIH",  "1");		
		myRoughRankTable.put( "ELIHF", "1"); 
		
		myRoughRankTable.put( "ELIF",  "2");
		myRoughRankTable.put( "ELU",   "2");
		myRoughRankTable.put( "ELUI",  "2");
		myRoughRankTable.put( "ELUIF", "2");
		myRoughRankTable.put( "ELUIH", "2");
		
		myRoughRankTable.put( "ALF", "2"); // bounded by ALCF
		myRoughRankTable.put( "ALI", "2"); // bounded by ALCI
		myRoughRankTable.put( "ALHI", "2"); // bounded by ALCHI
		myRoughRankTable.put( "ALIF", "2"); // bounded by ALCIF
		myRoughRankTable.put( "ALHF", "2"); // bounded by ALCHF
		myRoughRankTable.put( "ALH", "2"); // bounded by ALCH
		myRoughRankTable.put( "ALIN", "2"); // bounded by ALCIN
		myRoughRankTable.put( "ALOF", "2"); // bounded by ALCOF
		myRoughRankTable.put( "ALO", "2"); // bounded by ALCO

		myRoughRankTable.put( "ALR+IF", "2"); // bounded by SIF
		myRoughRankTable.put( "ALR+",   "2"); // bounded by S
		myRoughRankTable.put( "ALR+H",  "2"); // bounded by SH
		myRoughRankTable.put( "ALR+HI", "2"); // bounded by SHI
		myRoughRankTable.put( "ALR+HIF","2"); // bounded by SHIF
		myRoughRankTable.put( "ALR+HN", "2"); // bounded by SHN

		myRoughRankTable.put( "AL", "2");
		myRoughRankTable.put( "ALC", "2");
		
		myRoughRankTable.put( "ALCF", "3");
		myRoughRankTable.put( "ALCI", "3");
		myRoughRankTable.put( "ALCH", "3");
		myRoughRankTable.put( "ALCN", "3");		
		myRoughRankTable.put( "ALCIF", "3");
		myRoughRankTable.put( "ALCIN", "3");
		myRoughRankTable.put( "ALCHI", "3");
		myRoughRankTable.put( "ALCHF", "3");
		myRoughRankTable.put( "ALCHIF", "3");
		myRoughRankTable.put( "ALCHIN", "3");
		
		myRoughRankTable.put( "ALCHON", "3");
		myRoughRankTable.put( "ALCHOF", "3");
		myRoughRankTable.put( "ALCOF", "3");
		myRoughRankTable.put( "ALCO", "3");
		myRoughRankTable.put( "ALCON", "3");
		myRoughRankTable.put( "ALCHO", "3");
		myRoughRankTable.put( "ALCHON", "3");
	
		myRoughRankTable.put( "S", "4");
		myRoughRankTable.put( "SH", "4");
		myRoughRankTable.put( "SF", "4");
		myRoughRankTable.put( "SHF", "4");
		
		myRoughRankTable.put( "SI", "5");
		myRoughRankTable.put( "SHIF", "5");
		myRoughRankTable.put( "SHI",  "5");
		myRoughRankTable.put( "SIF",  "5");
		myRoughRankTable.put( "SHIN", "5");

		myRoughRankTable.put( "SHOIF", "6");
		myRoughRankTable.put( "SHOIN", "6");
		myRoughRankTable.put( "SOIF", "6");
		myRoughRankTable.put( "SOIN", "6");
		myRoughRankTable.put( "SHO", "6");
		myRoughRankTable.put( "SHON", "6");

		myRoughRankTable.put( "ALOIF", "4"); // bounded by ALCOIF
		myRoughRankTable.put( "ALOIN", "4"); // bounded by ALCOIN
		myRoughRankTable.put( "ALHON", "3"); // bounded by ALCHON
		myRoughRankTable.put( "ALCOIF", "4");
		myRoughRankTable.put( "ALCOIN", "4");
		myRoughRankTable.put( "ALCHOIF", "4");
		myRoughRankTable.put( "ALCHOIN", "4");
		myRoughRankTable.put( "ALCOIF", "4");
		myRoughRankTable.put( "ALCOIN", "4");
		*/

	}

	
	public String rankByRoughBin( String cExp )
	{
		// SHOIN
		if ( ( cExp.indexOf( "N" ) != -1 ) || ( cExp.indexOf( "O" ) != -1 ) )
			return "4";
		// SHIF
		else if ( ( cExp.indexOf( "I" ) != -1 ) || ( cExp.indexOf( "C" ) != -1 || (cExp.indexOf( "S" ) != -1) ))
			return "3";
		// ALHF
		else if ( ( cExp.indexOf( "H" ) != -1 ) || ( cExp.indexOf( "F" ) != -1 ) )
			return "2";
		// AL
		return "1";
	}
	
	public String rankByComplexity( String cExp )	
	{
		return (String)myComplexityRankTable.get( cExp );
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?